<?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>233878</bug_id>
          
          <creation_ts>2021-12-06 09:35:58 -0800</creation_ts>
          <short_desc>Split IsoSubspace into a GCClient allocator used by VM and a backend managed by Heap.</short_desc>
          <delta_ts>2022-02-18 10:51:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=236847</see_also>
          <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>232849</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1820637</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-06 09:35:58 -0800</bug_when>
    <thetext>This is another step building towards a global GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820638</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-06 09:36:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/86108394&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820639</commentid>
    <comment_count>2</comment_count>
      <attachid>446046</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-06 09:38:59 -0800</bug_when>
    <thetext>Created attachment 446046
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820659</commentid>
    <comment_count>3</comment_count>
      <attachid>446051</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-06 10:33:09 -0800</bug_when>
    <thetext>Created attachment 446051
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820668</commentid>
    <comment_count>4</comment_count>
      <attachid>446054</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-06 10:57:25 -0800</bug_when>
    <thetext>Created attachment 446054
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820805</commentid>
    <comment_count>5</comment_count>
      <attachid>446092</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-06 16:17:19 -0800</bug_when>
    <thetext>Created attachment 446092
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842081</commentid>
    <comment_count>6</comment_count>
      <attachid>452120</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-15 18:01:02 -0800</bug_when>
    <thetext>Created attachment 452120
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843221</commentid>
    <comment_count>7</comment_count>
      <attachid>452461</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-17 18:07:06 -0800</bug_when>
    <thetext>Created attachment 452461
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843265</commentid>
    <comment_count>8</comment_count>
      <attachid>452461</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-02-17 20:38:49 -0800</bug_when>
    <thetext>Comment on attachment 452461
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/heap/Heap.cpp:3484
&gt; +#undef DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW

Can we avoid repeating this list? I think we have the same kind of thing in VM, is it correct?

&gt; Source/JavaScriptCore/heap/Heap.h:1244
&gt; +class Heap {
&gt; +    WTF_MAKE_NONCOPYABLE(Heap);
&gt; +public:
&gt; +    Heap(JSC::Heap&amp;);
&gt; +    ~Heap();
&gt; +
&gt; +    VM&amp; vm() const;
&gt; +    JSC::Heap&amp; server() { return m_server; }
&gt; +
&gt; +    // FIXME GlobalGC: need a GCClient::Heap::lastChanceToFinalize() and in there,
&gt; +    // relinquish memory from the IsoSubspace LocalAllocators back to the server.
&gt; +    // Currently, this is being handled by BlockDirectory::stopAllocatingForGood().
&gt; +
&gt; +private:
&gt; +    JSC::Heap&amp; m_server;
&gt; +
&gt; +    IsoSubspace arraySpace;
&gt; +    IsoSubspace bigIntSpace;
&gt; +    IsoSubspace calleeSpace;
&gt; +    IsoSubspace clonedArgumentsSpace;
&gt; +    IsoSubspace customGetterSetterSpace;
&gt; +    IsoSubspace dateInstanceSpace;
&gt; +    IsoSubspace domAttributeGetterSetterSpace;
&gt; +    IsoSubspace exceptionSpace;
&gt; +    IsoSubspace executableToCodeBlockEdgeSpace;
&gt; +    IsoSubspace functionSpace;
&gt; +    IsoSubspace getterSetterSpace;
&gt; +    IsoSubspace globalLexicalEnvironmentSpace;
&gt; +    IsoSubspace internalFunctionSpace;
&gt; +    IsoSubspace jsProxySpace;
&gt; +    IsoSubspace nativeExecutableSpace;
&gt; +    IsoSubspace numberObjectSpace;
&gt; +    IsoSubspace plainObjectSpace;
&gt; +    IsoSubspace promiseSpace;
&gt; +    IsoSubspace propertyNameEnumeratorSpace;
&gt; +    IsoSubspace propertyTableSpace;
&gt; +    IsoSubspace regExpSpace;
&gt; +    IsoSubspace regExpObjectSpace;
&gt; +    IsoSubspace ropeStringSpace;
&gt; +    IsoSubspace scopedArgumentsSpace;
&gt; +    IsoSubspace sparseArrayValueMapSpace;
&gt; +    IsoSubspace stringSpace;
&gt; +    IsoSubspace stringObjectSpace;
&gt; +    IsoSubspace structureChainSpace;
&gt; +    IsoSubspace structureRareDataSpace;
&gt; +    IsoSubspace structureSpace;
&gt; +    IsoSubspace brandedStructureSpace;
&gt; +    IsoSubspace symbolTableSpace;
&gt; +
&gt; +#define DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(name) \
&gt; +    template&lt;SubspaceAccess mode&gt; \
&gt; +    IsoSubspace* name() \
&gt; +    { \
&gt; +        if (m_##name || mode == SubspaceAccess::Concurrently) \
&gt; +            return m_##name.get(); \
&gt; +        return name##Slow(); \
&gt; +    } \
&gt; +    JS_EXPORT_PRIVATE IsoSubspace* name##Slow(); \
&gt; +    std::unique_ptr&lt;IsoSubspace&gt; m_##name;
&gt; +
&gt; +#if JSC_OBJC_API_ENABLED
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiWrapperObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(objCCallbackFunctionSpace)
&gt; +#endif
&gt; +#ifdef JSC_GLIB_API_ENABLED
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiWrapperObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jscCallbackFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackAPIWrapperGlobalObjectSpace)
&gt; +#endif
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiGlobalObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiValueWrapperSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(arrayBufferSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(arrayIteratorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(asyncGeneratorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigInt64ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigIntObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigUint64ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(booleanObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(boundFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackConstructorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackGlobalObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(customGetterFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(customSetterFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(dataViewSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(debuggerScopeSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(errorInstanceSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(float32ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(float64ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(functionRareDataSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(generatorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(globalObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(injectedScriptHostSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int8ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int16ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int32ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(javaScriptCallFrameSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jsModuleRecordSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapBucketSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapIteratorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(moduleNamespaceObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(nativeStdFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(proxyObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(proxyRevokeSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(remoteFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scopedArgumentsTableSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scriptFetchParametersSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scriptFetcherSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setBucketSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setIteratorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(shadowRealmSpace);
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(strictEvalActivationSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(stringIteratorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(sourceCodeSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(symbolSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(symbolObjectSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(templateObjectDescriptorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalCalendarSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalDurationSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalInstantSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalPlainTimeSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalTimeZoneSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint8ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint8ClampedArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint16ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint32ArraySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedEvalCodeBlockSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedFunctionCodeBlockSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedModuleProgramCodeBlockSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedProgramCodeBlockSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(finalizationRegistrySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakObjectRefSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakSetSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakMapSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(withScopeSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlCollatorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlDateTimeFormatSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlDisplayNamesSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlListFormatSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlLocaleSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlNumberFormatSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlPluralRulesSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlRelativeTimeFormatSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmentIteratorSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmenterSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmentsSpace)
&gt; +#if ENABLE(WEBASSEMBLY)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jsToWasmICCalleeSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyExceptionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyFunctionSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyGlobalSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyInstanceSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyMemorySpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyModuleSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyModuleRecordSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyTableSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyTagSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyWrapperFunctionSpace)
&gt; +#endif
&gt; +
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(evalExecutableSpace)
&gt; +    DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(moduleProgramExecutableSpace)
&gt; +
&gt; +#undef DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER
&gt; +
&gt; +    IsoSubspace codeBlockSpace;
&gt; +    IsoSubspace functionExecutableSpace;
&gt; +    IsoSubspace programExecutableSpace;
&gt; +    IsoSubspace unlinkedFunctionExecutableSpace;
&gt; +
&gt; +    Vector&lt;IsoSubspacePerVM*&gt; perVMIsoSubspaces;
&gt; +
&gt; +    friend class JSC::VM;
&gt; +    friend class JSC::IsoSubspacePerVM;

Can we avoid repeating this list? I think we have the same kind of thing in VM, is it correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843336</commentid>
    <comment_count>9</comment_count>
      <attachid>452500</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 02:00:38 -0800</bug_when>
    <thetext>Created attachment 452500
[fast-cq] patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843420</commentid>
    <comment_count>10</comment_count>
      <attachid>452500</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 08:23:12 -0800</bug_when>
    <thetext>Comment on attachment 452500
[fast-cq] patch for landing.

Thanks for the review.  I&apos;ve introduced macro lists of subspaces to remove all there redundancy the was previously needed.  Now, to add a new subspace, we just add it to one of the macro lists.

Landing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843431</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 08:47:04 -0800</bug_when>
    <thetext>Landed in r290129: &lt;http://trac.webkit.org/r290129&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446046</attachid>
            <date>2021-12-06 09:38:59 -0800</date>
            <delta_ts>2021-12-06 16:17:19 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-233878.patch</filename>
            <type>text/plain</type>
            <size>242119</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkx
LDcgKzkxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSBXVEZfSUdOTwogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAot
ICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0mIHZt
ID0gVk06OmNyZWF0ZShIZWFwVHlwZTo6TGFyZ2UpLmxlYWtSZWYoKTsKICAgICB7CiAgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1ODgsNyArMzU4OCw3IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUm
IG9wdGlvbnMsIGIKIHsKICAgICBXb3JrZXIgd29ya2VyKFdvcmtlcnM6OnNpbmdsZXRvbigpKTsK
ICAgICAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAg
IFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgaWYg
KCFpc1dvcmtlciAmJiBvcHRpb25zLm1fY2FuQmxvY2tJc0ZhbHNlKQogICAgICAgICB2bS5tX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IEpTQzo6U2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIoZmFsc2UpKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYs
NyBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFs
TWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgVk0qIHZtID0gJlZNOjpjcmVhdGUo
TGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0qIHZtID0gJlZNOjpjcmVhdGUoSGVhcFR5cGU6
OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBD
b21tYW5kTGluZSBvcHRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uYXBpR2xvYmFsT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXBpVmFsdWVXcmFwcGVy
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw3ICsxMzksNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbklt
CiBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwg
SlNBUElXcmFwcGVyT2JqZWN0KTsKIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1
YnNwYWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNj
ZXNzOjpPbk1haW5UaHJlYWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5jYWxsYmFja0NvbnN0cnVjdG9yU3BhY2U8
bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3
LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmNhbGxiYWNrRnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0cnVjdHVyZSogSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamUKIH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJz
cGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6
Ok9uTWFpblRocmVhZDoKQEAgLTEzMyw3ICsxMzMsNyBAQCBJc29TdWJzcGFjZSogSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsCiB9CiAKIHRlbXBsYXRlIDw+Ci1Jc29TdWJzcGFjZSogSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNw
YWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtLCBtb2RlKTsKICAgICB9CkBA
IC0xOTksNyArMTk5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mLCBTdWJzcGFjZUFjY2Vzcyk7CisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJiwgU3Vic3Bh
Y2VBY2Nlc3MpOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMX0FUVFJJ
QlVURVMgY3VzdG9tVG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRl
cm5hbEZ1bmN0aW9uIEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ub2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3Nyw3ICsyMjc3
LDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsK
LSAgICAgICAgICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UoKS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworLy8gICAgICAgICAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCkuYWxsb2NhdG9yRm9yKG5ld1Np
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAg
ICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uo
KS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRj
aEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMiwgc2Ny
YXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2Ny
YXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzgsNyArMTA3OCw3IEBAIHZv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHYKICAgICBzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIHN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIAotICAgIFZNOjpTcGFjZUFuZFNldDo6
c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CisgICAgSGVhcDo6U3BhY2VBbmRTZXQ6OnNl
dEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPgpAQCAtMTY2OCw3ICsxNjY4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogICAgIH07CiAgICAgdXBkYXRlQWN0aXZpdHkoKTsKIAotICAgIFZNOjpTcGFj
ZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5yZW1vdmUodGhpcyk7CisgICAgSGVhcDo6U3Bh
Y2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOwogCiAgICAgLy8gSW4g
Q29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUgZGVjaWRlZCB0byBz
a2lwIHZpc2l0aW5nIHRoaXMKICAgICAvLyBjb2RlQmxvY2suIEJ5IHRoZSB0aW1lIHdlIGdldCBo
ZXJlLCB3ZSdyZSBkb25lIHdpdGggdGhlIHZlcmlmaWVyIEdDLiBTbywgbGV0J3MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6CiAgICAgREVDTEFS
RV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVy
biAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxv
Y2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0m
IHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFs
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiAmdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIHB1Ymxp
YzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
LSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOworICAgICAgICByZXR1
cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJs
b2NrJiBvdGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVybiAmdm0uY29k
ZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgp
OwogICAgIH0KIAogICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0m
IHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVC
bG9jay5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIHB1
YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOworICAgICAgICBy
ZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb2dyYW1D
b2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVC
bG9jayYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRFdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVy
ZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRFdmFsQ29kZUJsb2NrU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
a1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcg
QEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdAogICAgICAgICBtX3Vu
bGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LnNldCh2bSwgdGhpcywgcmVzdWx0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIHZtLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uo
KS5zZXQuYWRkKHRoaXMpOworICAgIHZtLmhlYXAudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVT
cGFjZUFuZFNldC5zZXQuYWRkKHRoaXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMx
MCw3ICszMTAsNyBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmaW5hbGl6CiAg
ICAgICAgIGNsZWFySWZEZWFkKG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKICAgICAgICAg
Y2xlYXJJZkRlYWQobV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgICAgIGlm
IChpc0NsZWFyZWQgJiYgIWlzU3RpbGxWYWxpZCkKLSAgICAgICAgICAgIHZtLnVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlU3BhY2UoKS5zZXQucmVtb3ZlKHRoaXMpOworICAgICAgICAgICAgdm0u
aGVhcC51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNldC5yZW1vdmUodGhp
cyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDkgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS51bmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZVNwYWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAmdm0udW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5j
dGlvbk1ldGFkYXRhTm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQgdW5saW5rZWRGdW5j
dGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3Jp
cHRNb2RlIHNjcmlwdE1vZGUsIFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+IHBhcmVudFNjb3Bl
VERaVmFyaWFibGVzLCBzdGQ6Om9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+IHBhcmVu
dFByaXZhdGVOYW1lRW52aXJvbm1lbnQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4
dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxp
emVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCBwcml2YXRlQnJhbmRSZXF1aXJlbWVudCwgYm9v
bCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGZhbHNlKQpAQCAtMTMyLDcgKzEz
Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxs
LmNsZWFyKCk7CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIo
KTsKLSAgICAgICAgdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpLnNldC5yZW1v
dmUodGhpcyk7CisgICAgICAgIHZtLmhlYXAudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFj
ZUFuZFNldC5zZXQucmVtb3ZlKHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgcmVjb3JkUGFyc2Uo
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBMZXhpY2FsU2NvcGVGZWF0dXJlcyBsZXhpY2FsU2NvcGVG
ZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTcGFjZTxtb2Rl
PigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS5kZWJ1Z2dlclNjb3BlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDE2ICs0NSw2IEBAIENvbXBsZXRlU3Vic3BhY2U6On5Db21w
bGV0ZVN1YnNwYWNlKCkKIHsKIH0KIAotQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQotewotICAgIHJldHVy
biBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1vZGUpOwotfQotCi12b2lkKiBDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0ZShWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCi17
Ci0gICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0
LCBmYWlsdXJlTW9kZSk7Ci19Ci0KIEFsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNl
OjpzaXplQ2xhc3NUb0luZGV4KHNpemUpOwpAQCAtMTIzLDkgKzExMyw5IEBAIHZvaWQqIENvbXBs
ZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgdm0udmVyaWZ5Q2FuR0MoKTsK
IAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7Ci0gICAgCi0gICAgaWYgKEFsbG9jYXRvciBh
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxs
b2NhdG9yKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSh2bS5oZWFwLCBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisKKyAgICBp
ZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKSkKKyAgICAgIHJldHVybiBhbGxvY2F0b3Iu
YWxsb2NhdGUodm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgIAogICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OnByZWNpc2VBbGxv
Y2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRv
ZmYpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNw
YWNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDggQEAgcHVibGlj
OgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJsb2Nr
RGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMiLCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIGZpbmFsOwogICAg
IEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9k
ZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBmaW5hbDsKICAgICB2b2lkKiBhbGxvY2F0ZU5v
blZpcnR1YWwoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlKTsKICAgICB2b2lkKiByZWFsbG9jYXRlUHJlY2lzZUFsbG9jYXRpb25Ob25WaXJ0dWFs
KFZNJiwgSGVhcENlbGwqLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKTsKICAgICAKQEAgLTYyLDYgKzYwLDIxIEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxMb2NhbEFsbG9jYXRvcj4+IG1fbG9jYWxBbGxvY2F0b3JzOwogfTsK
IAorLy9jbGFzcyBDb21wbGV0ZVN1YnNwYWNlIHsKKy8vcHVibGljOgorLy8gICAgSlNfRVhQT1JU
X1BSSVZBVEUgQ29tcGxldGVTdWJzcGFjZShDb21wbGV0ZVN1YnNwYWNlJik7CisvLyAgICBKU19F
WFBPUlRfUFJJVkFURSB+Q29tcGxldGVTdWJzcGFjZSgpOworLy8KKy8vICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisvLworLy8g
ICAgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisvLworLy9wcml2YXRlOgorLy8gICAgQ29tcGxl
dGVTdWJzcGFjZSYgbV9zZXJ2ZXI7CisvLy8vICAgIExvY2FsQWxsb2NhdG9yIG1fbG9jYWxBbGxv
Y2F0b3I7CisvL307CisKKwogQUxXQVlTX0lOTElORSBBbGxvY2F0b3IgQ29tcGxldGVTdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBt
b2RlKQogewogICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2
ICs0Nyw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJc29DZWxsU2V0
SW5saW5lcy5oIgogI2luY2x1ZGUgIklzb0lubGluZWRIZWFwQ2VsbFR5cGVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSXNvU3Vic3BhY2VQZXJWTS5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0
LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6
YXRpb25SZWdpc3RyeS5oIgpAQCAtMTEzLDcgKzExNCw3IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRv
dWJsZSB0aGlzUGF1c2VNUykKIAogc2l6ZV90IG1pbkhlYXBTaXplKEhlYXBUeXBlIGhlYXBUeXBl
LCBzaXplX3QgcmFtU2l6ZSkKIHsKLSAgICBpZiAoaGVhcFR5cGUgPT0gTGFyZ2VIZWFwKSB7Cisg
ICAgaWYgKGhlYXBUeXBlID09IEhlYXBUeXBlOjpMYXJnZSkgewogICAgICAgICBkb3VibGUgcmVz
dWx0ID0gc3RkOjptaW4oCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KE9wdGlvbnM6
OmxhcmdlSGVhcFNpemUoKSksCiAgICAgICAgICAgICByYW1TaXplICogT3B0aW9uczo6c21hbGxI
ZWFwUkFNRnJhY3Rpb24oKSk7CkBAIC0zOTMsMTAgKzM5NCwxMCBAQCBIZWFwOjpIZWFwKFZNJiB2
bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBzeW1ib2xUYWJsZVNwYWNlIElTT19TVUJTUEFD
RV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTeW1ib2xUYWJsZSkg
Ly8gSGFzaDoweGM1MjE1YWZkCiAgICAgLCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhD
b25zdHJhaW50cyhleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCiAgICAgLCBleGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJzKGV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2VTcGFjZSkKLSAgICAsIGNvZGVCbG9ja1NwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBDb2RlQmxvY2spIC8vIEhhc2g6MHg3N2U2NmVj
OQotICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMs
IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZSkgLy8gSGFz
aDoweDVkMTU4ZjMKLSAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFByb2dyYW1FeGVjdXRhYmxl
KSAvLyBIYXNoOjB4NTI3Yzc3ZTcKLSAgICAsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUs
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4ZjZiODI4ZDkKKyAgICAsIGNv
ZGVCbG9ja1NwYWNlQW5kU2V0IElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVD
ZWxsSGVhcENlbGxUeXBlLCBDb2RlQmxvY2spIC8vIEhhc2g6MHg3N2U2NmVjOQorICAgICwgZnVu
Y3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3Ry
dWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZSkgLy8gSGFzaDoweDVk
MTU4ZjMKKyAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lO
SVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFByb2dyYW1FeGVjdXRhYmxl
KSAvLyBIYXNoOjB4NTI3Yzc3ZTcKKyAgICAsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2Vs
bFR5cGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4ZjZiODI4ZDkKIAog
ewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKQEAgLTQ0Nyw2ICs0NDgsOSBAQCBIZWFwOjp+
SGVhcCgpCiAgICAgCiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrIDogbV9sb2dpY2FsbHlFbXB0
eVdlYWtCbG9ja3MpCiAgICAgICAgIFdlYWtCbG9jazo6ZGVzdHJveSgqdGhpcywgYmxvY2spOwor
CisgICAgZm9yIChhdXRvKiBwZXJWTUlzb1N1YnNwYWNlIDogcGVyVk1Jc29TdWJzcGFjZXMpCisg
ICAgICAgIHBlclZNSXNvU3Vic3BhY2UtPnJlbGVhc2VJc29TdWJzcGFjZSgqdGhpcyk7CiB9CiAK
IGJvb2wgSGVhcDo6aXNQYWdlZE91dCgpCkBAIC02OTEsNyArNjk1LDcgQEAgdm9pZCBIZWFwOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZQogewogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7
Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxGdW5jdGlvbkV4ZWN1
dGFibGU+KGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNwYWNlKTsKKyAgICBmaW5hbGl6ZU1hcmtl
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZnVuY3Rpb25FeGVj
dXRhYmxlU3BhY2VBbmRTZXQuc3BhY2UpOwogICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25h
bEZpbmFsaXplcnM8U3ltYm9sVGFibGU+KHN5bWJvbFRhYmxlU3BhY2UpOwogICAgIGZpbmFsaXpl
TWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4o
ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyk7IC8vIFdlIHJ1biB0aGlz
IGJlZm9yZSBDb2RlQmxvY2sncyB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBzaW5jZSBDb2RlQmxv
Y2sgbG9va3MgYXQgdGhlIG93bmVyIGV4ZWN1dGFibGUncyBpbnN0YWxsZWQgQ29kZUJsb2NrIGlu
IGl0cyBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseS4KICAgICBmb3JFYWNoQ29kZUJsb2NrU3BhY2Uo
CkBAIC02OTksNyArNzAzLDcgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZQogICAgICAgICAgICAgdGhpcy0+ZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxp
emVyczxDb2RlQmxvY2s+KHNwYWNlLnNldCk7CiAgICAgICAgIH0pOwogICAgIGZpbmFsaXplTWFy
a2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3RydWN0dXJlUmFyZURhdGE+KHN0cnVjdHVyZVJh
cmVEYXRhU3BhY2UpOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2Uuc2V0KTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlPih1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5k
U2V0LnNldCk7CiAgICAgaWYgKG1fd2Vha1NldFNwYWNlKQogICAgICAgICBmaW5hbGl6ZU1hcmtl
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha1NldD4oKm1fd2Vha1NldFNwYWNlKTsKICAg
ICBpZiAobV93ZWFrTWFwU3BhY2UpCkBAIC0xMDU4LDcgKzEwNjIsNyBAQCB2b2lkIEhlYXA6OmRl
bGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcyhECiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY29sbGVj
dGlvblNjb3BlKTsKIAogICAgIEhlYXBJdGVyYXRpb25TY29wZSBoZWFwSXRlcmF0aW9uU2NvcGUo
KnRoaXMpOwotICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uuc2V0LmZvckVhY2hM
aXZlQ2VsbCgKKyAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNldC5m
b3JFYWNoTGl2ZUNlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpL
aW5kKSB7CiAgICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAg
ICAgICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGUodm0pOwpAQCAtMzMwMyw0ICszMzA3LDE5NyBA
QCBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCiAKICN1bmRlZiBEWU5B
TUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCiAKKworbmFtZXNwYWNlIEdDQ2xp
ZW50IHsKKworI2RlZmluZSBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3Vic3BhY2UpIHN1YnNw
YWNlKGhlYXAuc3Vic3BhY2UpCisjZGVmaW5lIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9GUk9N
X1NQQUNFX0FORF9TRVQoc3Vic3BhY2UpIHN1YnNwYWNlKGhlYXAuc3Vic3BhY2UjI0FuZFNldC5z
cGFjZSkKKworSGVhcDo6SGVhcChKU0M6OkhlYXAmIGhlYXApCisgICAgOiBtX3NlcnZlcihoZWFw
KQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGFycmF5U3BhY2UpCisgICAgLCBDTElF
TlRfSVNPX1NVQlNQQUNFX0lOSVQoYmlnSW50U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVQoY2FsbGVlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoY2xv
bmVkQXJndW1lbnRzU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoY3VzdG9t
R2V0dGVyU2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZGF0ZUlu
c3RhbmNlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZG9tQXR0cmlidXRl
R2V0dGVyU2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZXhjZXB0
aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGZ1bmN0aW9u
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZ2V0dGVyU2V0dGVyU3BhY2Up
CisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoaW50ZXJuYWxGdW5jdGlvblNw
YWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGpzUHJveHlTcGFjZSkKKyAgICAs
IENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChuYXRpdmVFeGVjdXRhYmxlU3BhY2UpCisgICAgLCBD
TElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobnVtYmVyT2JqZWN0U3BhY2UpCisgICAgLCBDTElFTlRf
SVNPX1NVQlNQQUNFX0lOSVQocGxhaW5PYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVChwcm9taXNlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQo
cHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9J
TklUKHByb3BlcnR5VGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChy
ZWdFeHBTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChyZWdFeHBPYmplY3RT
cGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChyb3BlU3RyaW5nU3BhY2UpCisg
ICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc2NvcGVkQXJndW1lbnRzU3BhY2UpCisgICAg
LCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cmluZ1NwYWNlKQorICAgICwgQ0xJRU5UX0lT
T19TVUJTUEFDRV9JTklUKHN0cmluZ09iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJT
UEFDRV9JTklUKHN0cnVjdHVyZUNoYWluU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoc3RydWN0dXJlUmFyZURhdGFTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0Vf
SU5JVChzdHJ1Y3R1cmVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChicmFu
ZGVkU3RydWN0dXJlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3ltYm9s
VGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FO
RF9TRVQoY29kZUJsb2NrU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVRfRlJP
TV9TUEFDRV9BTkRfU0VUKGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQorICAgICwgQ0xJRU5UX0lT
T19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChwcm9ncmFtRXhlY3V0YWJsZVNwYWNl
KQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVCh1bmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQoreworfQorCitIZWFwOjp+SGVhcCgpCit7Cisg
ICAgZm9yIChhdXRvKiBwZXJWTUlzb1N1YnNwYWNlIDogcGVyVk1Jc29TdWJzcGFjZXMpCisgICAg
ICAgIHBlclZNSXNvU3Vic3BhY2UtPnJlbGVhc2VDbGllbnRJc29TdWJzcGFjZSh2bSgpKTsKK30K
KworI3VuZGVmIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVAorI3VuZGVmIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQKKworCisjZGVmaW5lIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhuYW1lKSBcCisgICAgSXNvU3Vic3BhY2UqIEhlYXA6
Om5hbWUjI1Nsb3coKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghbV8jI25hbWUpOyBcCisg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBzZXJ2ZXIoKS5tX2xvY2sgfTsgXAorICAgICAgICBKU0M6
Oklzb1N1YnNwYWNlJiBzZXJ2ZXJTcGFjZSA9ICpzZXJ2ZXIoKS5uYW1lPFN1YnNwYWNlQWNjZXNz
OjpPbk1haW5UaHJlYWQ+KCk7IFwKKyAgICAgICAgYXV0byBzcGFjZSA9IG1ha2VVbmlxdWU8SXNv
U3Vic3BhY2U+KHNlcnZlclNwYWNlKTsgXAorICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OyBcCisgICAgICAgIG1fIyNuYW1lID0gV1RGTW92ZShzcGFjZSk7IFwKKyAgICAgICAgcmV0dXJu
IG1fIyNuYW1lLmdldCgpOyBcCisgICAgfQorCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSX1NMT1coYXBpR2xvYmFsT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coYXBpVmFsdWVXcmFwcGVyU3BhY2UpCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXJyYXlCdWZmZXJTcGFjZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcnJheUl0ZXJhdG9yU3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXN5bmNHZW5lcmF0b3JTcGFjZSkKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhiaWdJbnQ2NEFycmF5U3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYmlnSW50T2JqZWN0U3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYmlnVWludDY0QXJyYXlT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhib29sZWFuT2Jq
ZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYm91bmRG
dW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNh
bGxiYWNrQ29uc3RydWN0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhjYWxsYmFja0dsb2JhbE9iamVjdFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja09iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGN1c3RvbUdldHRlckZ1bmN0aW9uU3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY3VzdG9tU2V0dGVyRnVu
Y3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhkYXRh
Vmlld1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGRlYnVn
Z2VyU2NvcGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhl
cnJvckluc3RhbmNlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1coZmxvYXQzMkFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coZmxvYXQ2NEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coZnVuY3Rpb25SYXJlRGF0YVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKGdlbmVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKGdsb2JhbE9iamVjdFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKGluamVjdGVkU2NyaXB0SG9zdFNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludDhBcnJheVNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludDE2QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnQzMkFycmF5U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coamF2YVNjcmlwdENhbGxGcmFtZVNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzTW9kdWxlUmVjb3JkU3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobWFwQnVja2V0U3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobWFwSXRlcmF0b3JT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhtYXBTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhtb2R1bGVOYW1lc3BhY2VP
YmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhuYXRp
dmVTdGRGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKHByb3h5T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cocHJveHlSZXZva2VTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoZXJTcGFjZSkKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzZXRCdWNrZXRTcGFjZSkKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzZXRJdGVyYXRvclNwYWNlKQorRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNldFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNoYWRvd1JlYWxtU3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3RyaWN0RXZhbEFjdGl2YXRpb25TcGFj
ZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzdHJpbmdJdGVyYXRv
clNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNvdXJjZUNv
ZGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzeW1ib2xT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzeW1ib2xPYmpl
Y3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyh0ZW1wb3JhbENhbGVuZGFyU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1codGVtcG9yYWxEdXJhdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsSW5zdGFudFNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsUGxhaW5UaW1lU3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxUaW1lWm9uZVNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVpbnQ4QXJyYXlTcGFj
ZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1aW50OENsYW1wZWRB
cnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVpbnQx
NkFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codWlu
dDMyQXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1
bmxpbmtlZEV2YWxDb2RlQmxvY2tTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cod2Vha01hcFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKHdlYWtTZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyh3ZWFrT2JqZWN0UmVmU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cod2l0aFNjb3BlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coZmluYWxpemF0aW9uUmVnaXN0cnlTcGFjZSkKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxF
RAorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGFwaVdyYXBwZXJPYmpl
Y3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhvYmpDQ2Fs
bGJhY2tGdW5jdGlvblNwYWNlKQorI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlXcmFwcGVyT2JqZWN0
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coanNjQ2FsbGJh
Y2tGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KGNhbGxiYWNrQVBJV3JhcHBlckdsb2JhbE9iamVjdFNwYWNlKQorI2VuZGlmCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bENvbGxhdG9yU3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bERhdGVUaW1lRm9ybWF0U3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bERpc3BsYXlOYW1l
c1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxMaXN0
Rm9ybWF0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50
bExvY2FsZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGlu
dGxOdW1iZXJGb3JtYXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhpbnRsUGx1cmFsUnVsZXNTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50ZXJTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudHNTcGFjZSkK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUZ1bmN0aW9u
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1i
bHlHbG9iYWxTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3
ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1cod2ViQXNzZW1ibHlNZW1vcnlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseU1vZHVsZVNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlUYWJsZVNw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5
VGFnU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKKyNlbmRpZgorCisjdW5kZWYgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XCisKKyNkZWZpbmUgRFlOQU1JQ19TUEFDRV9BTkRf
U0VUX0RFRklORV9NRU1CRVJfU0xPVyhuYW1lKSBcCisgICAgSXNvU3Vic3BhY2UqIEhlYXA6Om5h
bWUjI1Nsb3coKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghbV8jI25hbWUpOyBcCisgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBzZXJ2ZXIoKS5tX2xvY2sgfTsgXAorICAgICAgICBKU0M6Oklz
b1N1YnNwYWNlJiBzZXJ2ZXJTcGFjZSA9ICpzZXJ2ZXIoKS5uYW1lPFN1YnNwYWNlQWNjZXNzOjpP
bk1haW5UaHJlYWQ+KCk7IFwKKyAgICAgICAgYXV0byBzcGFjZSA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+KHNlcnZlclNwYWNlKTsgXAorICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyBc
CisgICAgICAgIG1fIyNuYW1lID0gV1RGTW92ZShzcGFjZSk7IFwKKyAgICAgICAgcmV0dXJuIG1f
IyNuYW1lLmdldCgpOyBcCisgICAgfQorCitEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01F
TUJFUl9TTE9XKGV2YWxFeGVjdXRhYmxlU3BhY2UpCitEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVG
SU5FX01FTUJFUl9TTE9XKG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCisKKyN1bmRlZiBE
WU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCisKK30gLy8gbmFtZXNwYWNl
IEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIGNsYXNzIEhlYXA7CiBjbGFz
cyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBIZWFwVmVyaWZpZXI7CiBjbGFzcyBJbmNyZW1lbnRhbFN3
ZWVwZXI7CitjbGFzcyBJc29TdWJzcGFjZVBlclZNOwogY2xhc3MgSklUU3R1YlJvdXRpbmU7CiBj
bGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKQEAgLTEwNiwxMCArMTA3LDE0
IEBAIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiB9CiAKK25hbWVzcGFj
ZSBHQ0NsaWVudCB7CitjbGFzcyBIZWFwOworfQorCiB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpT
Q2VsbCo+IFByb3RlY3RDb3VudFNldDsKIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hh
cio+IFR5cGVDb3VudFNldDsKIAotZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVhcCwgTGFyZ2VIZWFw
IH07CitlbnVtIGNsYXNzIEhlYXBUeXBlIDogdWludDhfdCB7IFNtYWxsLCBMYXJnZSB9OwogCiBj
bGFzcyBIZWFwVXRpbDsKIApAQCAtMzg5LDYgKzM5NCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNNYXJraW5nRm9yR0NWZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nRm9yR0NW
ZXJpZmllcjsgfQogCisgICAgTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNz
IENvZGVCbG9jazsKQEAgLTQyMCw2ICs0MjcsOCBAQCBwcml2YXRlOgogICAgIGNsYXNzIEhlYXBU
aHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBUaHJlYWQ7CiAKKyAgICBmcmllbmQgY2xhc3Mg
R0NDbGllbnQ6OkhlYXA7CisKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtaW5FeHRyYU1l
bW9yeSA9IDI1NjsKICAgICAKICAgICBjbGFzcyBDRmluYWxpemVyT3duZXIgZmluYWwgOiBwdWJs
aWMgV2Vha0hhbmRsZU93bmVyIHsKQEAgLTU3MCw2ICs1NzksNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgdmVyaWZ5R0MoKTsKIAorICAgIExvY2sgbV9sb2NrOwogICAgIGNvbnN0IEhlYXBU
eXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0YXRvclN0YXRlIHsgTXV0YXRv
clN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTg3Myw3
ICs4ODMsNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UqIG5h
bWUjI1Nsb3coKTsgXAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV8jI25hbWU7
CiAKLQogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQpAQCAtMTAxNywz
NSArMTAyNiwyMTYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKICAgICAKLSAgICBTcGFj
ZUFuZFNldCBjb2RlQmxvY2tTcGFjZTsKKyAgICBTcGFjZUFuZFNldCBjb2RlQmxvY2tTcGFjZUFu
ZFNldDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQ29k
ZUJsb2NrU3BhY2UoY29uc3QgRnVuYyYgZnVuYykKICAgICB7CiAgICAgICAgIC8vIFRoaXMgc2hv
dWxkIG5vdCBpbmNsdWRlIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UgYmVjYXVzZSB0aGlzIGlz
IGFib3V0IHN1YnNjbGFzc2VzIG9mCiAgICAgICAgIC8vIEpTQzo6Q29kZUJsb2NrLgotICAgICAg
ICBmdW5jKGNvZGVCbG9ja1NwYWNlKTsKKyAgICAgICAgZnVuYyhjb2RlQmxvY2tTcGFjZUFuZFNl
dCk7CiAgICAgfQogCiAgICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVIoZXZh
bEV4ZWN1dGFibGVTcGFjZSkKICAgICBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJF
Uihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQotICAgIFNwYWNlQW5kU2V0IGZ1bmN0aW9u
RXhlY3V0YWJsZVNwYWNlOwotICAgIFNwYWNlQW5kU2V0IHByb2dyYW1FeGVjdXRhYmxlU3BhY2U7
CisgICAgU3BhY2VBbmRTZXQgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQ7CisgICAgU3Bh
Y2VBbmRTZXQgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZUFuZFNldDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2NyaXB0RXhlY3V0YWJsZVNwYWNlKGNvbnN0
IEZ1bmMmIGZ1bmMpCiAgICAgewogICAgICAgICBpZiAobV9ldmFsRXhlY3V0YWJsZVNwYWNlKQog
ICAgICAgICAgICAgZnVuYygqbV9ldmFsRXhlY3V0YWJsZVNwYWNlKTsKLSAgICAgICAgZnVuYyhm
dW5jdGlvbkV4ZWN1dGFibGVTcGFjZSk7CisgICAgICAgIGZ1bmMoZnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2VBbmRTZXQpOwogICAgICAgICBpZiAobV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNl
KQogICAgICAgICAgICAgZnVuYygqbV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKTsKLSAg
ICAgICAgZnVuYyhwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKTsKKyAgICAgICAgZnVuYyhwcm9ncmFt
RXhlY3V0YWJsZVNwYWNlQW5kU2V0KTsKICAgICB9CiAKLSAgICBTcGFjZUFuZFNldCB1bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIFNwYWNlQW5kU2V0IHVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2VBbmRTZXQ7CiAKKyAgICBWZWN0b3I8SXNvU3Vic3BhY2VQZXJWTSo+
IHBlclZNSXNvU3Vic3BhY2VzOwogI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVf
TUVNQkVSCiB9OwogCituYW1lc3BhY2UgR0NDbGllbnQgeworCitjbGFzcyBIZWFwIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShIZWFwKTsKK3B1YmxpYzoKKyAgICBIZWFwKEpTQzo6SGVhcCYp
OworICAgIH5IZWFwKCk7CisKKyAgICBWTSYgdm0oKSBjb25zdDsKKyAgICBKU0M6OkhlYXAmIHNl
cnZlcigpIHsgcmV0dXJuIG1fc2VydmVyOyB9CisKK3ByaXZhdGU6CisgICAgSlNDOjpIZWFwJiBt
X3NlcnZlcjsKKworICAgIElzb1N1YnNwYWNlIGFycmF5U3BhY2U7CisgICAgSXNvU3Vic3BhY2Ug
YmlnSW50U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgY2FsbGVlU3BhY2U7CisgICAgSXNvU3Vic3Bh
Y2UgY2xvbmVkQXJndW1lbnRzU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgY3VzdG9tR2V0dGVyU2V0
dGVyU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZGF0ZUluc3RhbmNlU3BhY2U7CisgICAgSXNvU3Vi
c3BhY2UgZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZXhj
ZXB0aW9uU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNw
YWNlOworICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZ2V0
dGVyU2V0dGVyU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50
U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgaW50ZXJuYWxGdW5jdGlvblNwYWNlOworICAgIElzb1N1
YnNwYWNlIGpzUHJveHlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBuYXRpdmVFeGVjdXRhYmxlU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2UgbnVtYmVyT2JqZWN0U3BhY2U7CisgICAgSXNvU3Vic3BhY2Ug
cGxhaW5PYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwcm9taXNlU3BhY2U7CisgICAgSXNv
U3Vic3BhY2UgcHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOworICAgIElzb1N1YnNwYWNlIHBy
b3BlcnR5VGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSByZWdFeHBTcGFjZTsKKyAgICBJc29T
dWJzcGFjZSByZWdFeHBPYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSByb3BlU3RyaW5nU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2Ugc2NvcGVkQXJndW1lbnRzU3BhY2U7CisgICAgSXNvU3Vic3Bh
Y2Ugc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOworICAgIElzb1N1YnNwYWNlIHN0cmluZ1NwYWNl
OworICAgIElzb1N1YnNwYWNlIHN0cmluZ09iamVjdFNwYWNlOworICAgIElzb1N1YnNwYWNlIHN0
cnVjdHVyZUNoYWluU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RydWN0dXJlUmFyZURhdGFTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSBzdHJ1Y3R1cmVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBicmFu
ZGVkU3RydWN0dXJlU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3ltYm9sVGFibGVTcGFjZTsKKwor
I2RlZmluZSBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hbWUpIFwKKyAgICB0
ZW1wbGF0ZTxTdWJzcGFjZUFjY2VzcyBtb2RlPiBcCisgICAgSXNvU3Vic3BhY2UqIG5hbWUoKSBc
CisgICAgeyBcCisgICAgICAgIGlmIChtXyMjbmFtZSB8fCBtb2RlID09IFN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpIFwKKyAgICAgICAgICAgIHJldHVybiBtXyMjbmFtZS5nZXQoKTsgXAor
ICAgICAgICByZXR1cm4gbmFtZSMjU2xvdygpOyBcCisgICAgfSBcCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSXNvU3Vic3BhY2UqIG5hbWUjI1Nsb3coKTsgXAorICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4gbV8jI25hbWU7CisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXBpV3JhcHBlck9iamVjdFNwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIob2JqQ0NhbGxiYWNrRnVuY3Rp
b25TcGFjZSkKKyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc2NDYWxsYmFja0Z1bmN0aW9uU3Bh
Y2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0FQSVdy
YXBwZXJHbG9iYWxPYmplY3RTcGFjZSkKKyNlbmRpZgorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoYXBpR2xvYmFsT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihhcGlWYWx1ZVdyYXBwZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFycmF5QnVmZmVyU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcnJheUl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhc3luY0dlbmVyYXRvclNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50NjRBcnJheVNwYWNlKQorICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50T2JqZWN0U3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdVaW50NjRBcnJheVNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYm9vbGVhbk9iamVjdFNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYm91bmRGdW5jdGlv
blNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY2FsbGJhY2tD
b25zdHJ1Y3RvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
Y2FsbGJhY2tHbG9iYWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihjdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY3VzdG9tU2V0dGVyRnVuY3Rpb25TcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGRhdGFWaWV3U3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihkZWJ1Z2dlclNjb3BlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihlcnJvckluc3RhbmNlU3Bh
Y2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihmbG9hdDMyQXJyYXlT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGZsb2F0NjRBcnJh
eVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZnVuY3Rpb25S
YXJlRGF0YVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZ2Vu
ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihnbG9i
YWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGlu
amVjdGVkU2NyaXB0SG9zdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50OEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihpbnQxNkFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihpbnQzMkFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihqc01vZHVsZVJlY29yZFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIobWFwQnVja2V0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihtYXBJdGVyYXRvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIobWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihtb2R1bGVOYW1lc3BhY2VPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFt
ZXRlcnNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlw
dEZldGNoZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNl
dEJ1Y2tldFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2V0
SXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNl
dFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2hhZG93UmVh
bG1TcGFjZSk7CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzdHJpY3RF
dmFsQWN0aXZhdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc3RyaW5nSXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHNvdXJjZUNvZGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHN5bWJvbFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc3ltYm9sT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUih0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsQ2FsZW5kYXJTcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsRHVyYXRpb25TcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsSW5zdGFudFNwYWNlKQorICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxQbGFpblRpbWVTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsVGltZVpv
bmVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVpbnQ4QXJy
YXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVpbnQ4Q2xh
bXBlZEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1
aW50MTZBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
dWludDMyQXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHVubGlua2VkRXZhbENvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIodW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1bmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKGZpbmFsaXphdGlvblJlZ2lzdHJ5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih3ZWFrT2JqZWN0UmVmU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUih3ZWFrU2V0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih3ZWFrTWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3aXRoU2NvcGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKGludGxDb2xsYXRvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoaW50bERhdGVUaW1lRm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihpbnRsRGlzcGxheU5hbWVzU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsTGlzdEZvcm1hdFNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bExvY2FsZVNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bE51bWJlckZvcm1hdFNwYWNlKQorICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFBsdXJhbFJ1bGVzU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRs
U2VnbWVudEl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihpbnRsU2VnbWVudGVyU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihpbnRsU2VnbWVudHNTcGFjZSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUNvZGVC
bG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNz
ZW1ibHlFeGNlcHRpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1lbW9yeVNwYWNlKQorICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3
ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKKyNlbmRpZgorCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihldmFsRXhlY3V0YWJsZVNwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGVTcGFjZSkKKworI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIK
KworICAgIElzb1N1YnNwYWNlIGNvZGVCbG9ja1NwYWNlOworICAgIElzb1N1YnNwYWNlIGZ1bmN0
aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIHByb2dyYW1FeGVjdXRhYmxlU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2UgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsKKwor
Ly8gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4+IGlzb1N1YnNwYWNlc05l
ZWRpbmdEZXN0cnVjdGlvbjsKK3B1YmxpYzoKKyAgICBWZWN0b3I8SXNvU3Vic3BhY2VQZXJWTSo+
IHBlclZNSXNvU3Vic3BhY2VzOworCisgICAgZnJpZW5kIGNsYXNzIEpTQzo6Vk07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcwLDQgKzI3MCwxMyBAQCB2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBG
dW5jCiAgICAgICAgIGZ1bmMoKnZpc2l0b3IpOwogfQogCituYW1lc3BhY2UgR0NDbGllbnQgewor
CitBTFdBWVNfSU5MSU5FIFZNJiBIZWFwOjp2bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICpiaXR3
aXNlX2Nhc3Q8Vk0qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzKSAtIE9CSkVDVF9PRkZT
RVRPRihWTSwgY2xpZW50SGVhcCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29T
dWJzcGFjZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIElzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
IGhlYXAsIGNvbnN0IEhlYXBDZWxsVHlwZSYgaGVhcENlbGxUeXBlLCBzaXplX3Qgc2l6ZSwgdWlu
dDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxs
b2NhdG9yQmFzZT4mJiBhbGxvY2F0b3IpCiAgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQogICAg
ICwgbV9kaXJlY3RvcnkoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9t
U2l6ZT4oc2l6ZSkpCi0gICAgLCBtX2xvY2FsQWxsb2NhdG9yKCZtX2RpcmVjdG9yeSkKICAgICAs
IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGxvY2F0b3IgPyBXVEZNb3ZlKGFsbG9jYXRv
cikgOiBtYWtlVW5pcXVlPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KG5hbWUpKQogewogICAg
IG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50ID0gbnVtYmVyT2ZMb3dlclRpZXJDZWxsczsK
QEAgLTU2LDE2ICs1NSw2IEBAIElzb1N1YnNwYWNlOjp+SXNvU3Vic3BhY2UoKQogewogfQogCi1B
bGxvY2F0b3IgSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZSBtb2RlKQotewotICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUs
IG1vZGUpOwotfQotCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoVk0mIHZtLCBzaXplX3Qg
c2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0s
IHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwotfQotCiB2b2lkIElzb1N1YnNw
YWNlOjpkaWRSZXNpemVCaXRzKHVuc2lnbmVkIGJsb2NrSW5kZXgpCiB7CiAgICAgbV9jZWxsU2V0
cy5mb3JFYWNoKApAQCAtMTI5LDUgKzExOCwxNCBAQCB2b2lkIElzb1N1YnNwYWNlOjpkZXN0cm95
TG93ZXJUaWVyRnJlZUxpCiAgICAgfSk7CiB9CiAKK25hbWVzcGFjZSBHQ0NsaWVudCB7CisKK0lz
b1N1YnNwYWNlOjpJc29TdWJzcGFjZShKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXIpCisgICAgOiBt
X2xvY2FsQWxsb2NhdG9yKCZzZXJ2ZXIubV9kaXJlY3RvcnkpCit7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJc29DZWxsU2V0OwogCituYW1lc3Bh
Y2UgR0NDbGllbnQgeworY2xhc3MgSXNvU3Vic3BhY2U7Cit9CisKIGNsYXNzIElzb1N1YnNwYWNl
IDogcHVibGljIFN1YnNwYWNlIHsKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBJc29T
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBjb25zdCBIZWFwQ2VsbFR5cGUmLCBzaXplX3Qg
c2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9wdHI8SXNv
TWVtb3J5QWxsb2NhdG9yQmFzZT4mJiA9IG51bGxwdHIpOwpAQCAtNDIsMTIgKzQ2LDYgQEAgcHVi
bGljOgogCiAgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4gbV9kaXJlY3RvcnkuY2VsbFNp
emUoKTsgfQogCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZv
ck1vZGUpIG92ZXJyaWRlOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNp
emVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7Ci0KLSAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVf
dCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwot
ICAgIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRl
eHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotCiAgICAgdm9pZCBzd2VlcExvd2VyVGllckNl
bGwoUHJlY2lzZUFsbG9jYXRpb24qKTsKICAgICB2b2lkIGNsZWFySXNvQ2VsbFNldEJpdChQcmVj
aXNlQWxsb2NhdGlvbiopOwogCkBAIC02MCwyNCArNTgsNTUgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIGZyaWVuZCBjbGFzcyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U7CiAgICAgCiAgICAgdm9pZCBkaWRSZXNpemVCaXRzKHVuc2lnbmVkIG5l
d1NpemUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2sodW5zaWduZWQgYmxvY2tJ
bmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJr
ZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgCisKKyAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UmIGZyb21CbG9ja0RpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSYpOworCiAgICAgQmxvY2tEaXJl
Y3RvcnkgbV9kaXJlY3Rvcnk7Ci0gICAgTG9jYWxBbGxvY2F0b3IgbV9sb2NhbEFsbG9jYXRvcjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4gbV9pc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQcmVjaXNlQWxsb2NhdGlv
biwgUGFja2VkUmF3U2VudGluZWxOb2RlPFByZWNpc2VBbGxvY2F0aW9uPj4gbV9sb3dlclRpZXJG
cmVlTGlzdDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPElzb0NlbGxTZXQ+PiBtX2NlbGxTZXRzOwogfTsKIAorQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSYgSXNvU3Vic3BhY2U6OmZyb21CbG9ja0RpcmVjdG9yeShCbG9ja0RpcmVjdG9y
eSYgZGlyZWN0b3J5KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PElzb1N1YnNwYWNlKj4o
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmRpcmVjdG9yeSkgLSBPQkpFQ1RfT0ZGU0VUT0YoSXNv
U3Vic3BhY2UsIG1fZGlyZWN0b3J5KSk7Cit9CisKK25hbWVzcGFjZSBHQ0NsaWVudCB7CisKK2Ns
YXNzIElzb1N1YnNwYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJc29TdWJzcGFjZSk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSXNvU3Vic3BhY2UoSlNDOjpJc29TdWJzcGFjZSYpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5Jc29TdWJzcGFjZSgpID0gZGVmYXVsdDsKKyAgICAvLyBtbGFtIEZJWE1FIG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgd2UgcmVsaW5xdWlzaCB0aGUgTG9jYWxBbGxvY2F0b3IgdG8gdGhlIHNl
cnZlciBvbiBkZXN0cnVjdGlvbi4KKworICAgIHNpemVfdCBjZWxsU2l6ZSgpIHsgcmV0dXJuIG1f
bG9jYWxBbGxvY2F0b3IuY2VsbFNpemUoKTsgfQorCisgICAgQWxsb2NhdG9yIGFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKworICAgIHZvaWQqIGFsbG9j
YXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpOworCisgICAgSlNDOjpJc29TdWJzcGFjZSYgc2VydmVyKCk7CisKK3ByaXZh
dGU6CisgICAgTG9jYWxBbGxvY2F0b3IgbV9sb2NhbEFsbG9jYXRvcjsKK307CisKIEFMV0FZU19J
TkxJTkUgQWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVf
dCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpID09IGNlbGxTaXpl
KCkpOwogICAgIHJldHVybiBBbGxvY2F0b3IoJm1fbG9jYWxBbGxvY2F0b3IpOwogfQogCit9IC8v
IG5hbWVzcGFjZSBHQ0NsaWVudAorCiAjZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXBDZWxsVHlwZSwgdHlwZSkgKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcCksICho
ZWFwQ2VsbFR5cGUpLCBzaXplb2YodHlwZSksIHR5cGU6Om51bWJlck9mTG93ZXJUaWVyQ2VsbHMp
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBHQ0NsaWVu
dCB7CisKIEFMV0FZU19JTkxJTkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVh
bChWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkg
PT0gY2VsbFNpemUoKSk7CkBAIC0zNSw2ICszNyw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogSXNv
U3Vic3BhY2U6OmFsbG9jYXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit9IC8vIG5hbWVzcGFj
ZSBHQ0NsaWVudAorCiBpbmxpbmUgdm9pZCBJc29TdWJzcGFjZTo6Y2xlYXJJc29DZWxsU2V0Qml0
KFByZWNpc2VBbGxvY2F0aW9uKiBwcmVjaXNlQWxsb2NhdGlvbikKIHsKICAgICB1bnNpZ25lZCBs
b3dlclRpZXJJbmRleCA9IHByZWNpc2VBbGxvY2F0aW9uLT5sb3dlclRpZXJJbmRleCgpOwpAQCAt
NjAsNSArNjQsMTUgQEAgdm9pZCBJc29TdWJzcGFjZTo6Zm9yRWFjaExvd2VyVGllckZyZWVMaQog
ICAgIG1fbG93ZXJUaWVyRnJlZUxpc3QuZm9yRWFjaChmdW5jKTsKIH0KIAorbmFtZXNwYWNlIEdD
Q2xpZW50IHsKKworLy8gbWxhbSBGSVhNRSBkbyB3ZSBuZWVkIHRoaXM/IERlbGV0ZSBpZiBub3Qg
dXNlZC4KK2lubGluZSBKU0M6Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZTo6c2VydmVyKCkKK3sK
KyAgICByZXR1cm4gSlNDOjpJc29TdWJzcGFjZTo6ZnJvbUJsb2NrRGlyZWN0b3J5KG1fbG9jYWxB
bGxvY2F0b3IuZGlyZWN0b3J5KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2VQZXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwyNSArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSXNvU3Vic3BhY2VQZXJW
TTo6QXV0b3JlbW92aW5nSXNvU3Vic3BhY2UgZmluYWwgOiBwdWJsaWMgSXNvU3Vic3BhY2Ugewot
cHVibGljOgotICAgIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKElzb1N1YnNwYWNlUGVyVk0mIHBl
clZNLCBDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxsVHlwZSYgaGVhcENl
bGxUeXBlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBJc29TdWJzcGFjZShuYW1lLCBoZWFwLCBo
ZWFwQ2VsbFR5cGUsIHNpemUsIC8qIG51bWJlck9mTG93ZXJUaWVyQ2VsbHMgKi8gMCkKLSAgICAg
ICAgLCBtX3BlclZNKHBlclZNKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgfkF1dG9yZW1vdmlu
Z0lzb1N1YnNwYWNlKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3Bl
clZNLm1fbG9jayB9OwotICAgICAgICBtX3BlclZNLm1fc3Vic3BhY2VQZXJWTS5yZW1vdmUoJnNw
YWNlKCkuaGVhcCgpLnZtKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJc29TdWJzcGFjZVBl
clZNJiBtX3BlclZNOwotfTsKLQotSXNvU3Vic3BhY2VQZXJWTTo6SXNvU3Vic3BhY2VQZXJWTShG
dW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoVk0mKT4gc3Vic3BhY2VQYXJhbWV0ZXJzKQorSXNv
U3Vic3BhY2VQZXJWTTo6SXNvU3Vic3BhY2VQZXJWTShGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRl
cnMoSGVhcCYpPiBzdWJzcGFjZVBhcmFtZXRlcnMpCiAgICAgOiBtX3N1YnNwYWNlUGFyYW1ldGVy
cyhXVEZNb3ZlKHN1YnNwYWNlUGFyYW1ldGVycykpCiB7CiB9CkBAIC01OSwxNiArNDEsNTkgQEAg
SXNvU3Vic3BhY2VQZXJWTTo6fklzb1N1YnNwYWNlUGVyVk0oKQogICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOwogfQogCi1Jc29TdWJzcGFjZSYgSXNvU3Vic3BhY2VQZXJWTTo6Zm9yVk0o
Vk0mIHZtKQorSXNvU3Vic3BhY2UmIElzb1N1YnNwYWNlUGVyVk06Omlzb1N1YnNwYWNlZm9ySGVh
cChIZWFwJiBoZWFwKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICBhdXRv
IHJlc3VsdCA9IG1fc3Vic3BhY2VQZXJIZWFwLmFkZCgmaGVhcCwgbnVsbHB0cik7CisgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIFN1YnNwYWNlUGFyYW1ldGVycyBwYXJhbXMg
PSBtX3N1YnNwYWNlUGFyYW1ldGVycyhoZWFwKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IG5ldyBJc29TdWJzcGFjZShwYXJhbXMubmFtZSwgaGVhcCwgKnBhcmFtcy5oZWFwQ2Vs
bFR5cGUsIHBhcmFtcy5zaXplLCAwKTsKKworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcC5s
b2NrKCkgfTsKKyAgICAgICAgaGVhcC5wZXJWTUlzb1N1YnNwYWNlcy5hcHBlbmQodGhpcyk7Cisg
ICAgfQorICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworR0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZVBlclZNOjpjbGllbnRJc29TdWJzcGFjZWZvclZNKFZN
JiB2bSkKIHsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBtX2NsaWVudFN1YnNwYWNlUGVyVk0uYWRkKCZ2bSwgbnVsbHB0cik7
CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm4gKnJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgSXNvU3Vic3BhY2UmIHN1YnNwYWNl
ID0gaXNvU3Vic3BhY2Vmb3JIZWFwKHZtLmhlYXApOworCiAgICAgTG9ja2VyIGxvY2tlciB7IG1f
bG9jayB9OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zdWJzcGFjZVBlclZNLmFkZCgmdm0sIG51bGxw
dHIpOworICAgIGF1dG8gcmVzdWx0ID0gbV9jbGllbnRTdWJzcGFjZVBlclZNLmFkZCgmdm0sIG51
bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBTdWJzcGFjZVBh
cmFtZXRlcnMgcGFyYW1zID0gbV9zdWJzcGFjZVBhcmFtZXRlcnModm0pOwotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKCp0aGlzLCBw
YXJhbXMubmFtZSwgdm0uaGVhcCwgKnBhcmFtcy5oZWFwQ2VsbFR5cGUsIHBhcmFtcy5zaXplKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2Uoc3Vic3BhY2UpOworICAgICAgICB2bS5jbGllbnRIZWFwLnBlclZNSXNvU3Vic3BhY2VzLmFw
cGVuZCh0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
fQogCit2b2lkIElzb1N1YnNwYWNlUGVyVk06OnJlbGVhc2VJc29TdWJzcGFjZShIZWFwJiBoZWFw
KQoreworICAgIElzb1N1YnNwYWNlKiBzdWJzcGFjZTsKKyAgICB7CisgICAgICAgIExvY2tlciBs
b2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgc3Vic3BhY2UgPSBtX3N1YnNwYWNlUGVySGVhcC50
YWtlKCZoZWFwKTsKKyAgICB9CisgICAgZGVsZXRlIHN1YnNwYWNlOworfQorCit2b2lkIElzb1N1
YnNwYWNlUGVyVk06OnJlbGVhc2VDbGllbnRJc29TdWJzcGFjZShWTSYgdm0pCit7CisgICAgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBjbGllbnRTdWJzcGFjZTsKKyAgICB7CisgICAgICAgIExvY2tl
ciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgY2xpZW50U3Vic3BhY2UgPSBtX2NsaWVudFN1
YnNwYWNlUGVyVk0udGFrZSgmdm0pOworICAgIH0KKyAgICBkZWxldGUgY2xpZW50U3Vic3BhY2U7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29TdWJzcGFjZVBlclZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBW
TTsKKwogLy8gVGhpcyBpcyBhbiBhcHByb3ByaWF0ZSB3YXkgdG8gc3Rhc2ggSXNvU3Vic3BhY2Vz
IGZvciByYXJlbHktdXNlZCBjbGFzc2VzIG9yIGNsYXNzZXMgdGhhdCBhcmUgbW9zdGx5CiAvLyBz
dXJlIHRvIGJlIG1haW4tdGhyZWFkLW9ubHkuIEJ1dCBpZiBhIGNsYXNzIHR5cGljYWxseSBnZXRz
IGluc3RhbnRpYXRlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQKIC8vIG9uY2UsIHRoZW4gdGhp
cyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgY29uY3VycmVudCBhbGxvY2F0aW9ucyB3aWxsIHByb2Jh
Ymx5IGNvbnRlbmQgb24gdGhpcyB0aGluZydzCkBAIC01MywxOCArNTYsMjAgQEAgcHVibGljOgog
ICAgICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKICAgICB9OwogICAgIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIElzb1N1YnNwYWNlUGVyVk0oRnVuY3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKFZNJik+
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZVBlclZNKEZ1bmN0aW9uPFN1YnNw
YWNlUGFyYW1ldGVycyhIZWFwJik+KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SXNvU3Vic3Bh
Y2VQZXJWTSgpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlJiBmb3JW
TShWTSYpOworICAgIElzb1N1YnNwYWNlJiBpc29TdWJzcGFjZWZvckhlYXAoSGVhcCYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY2xpZW50SXNvU3Vic3Bh
Y2Vmb3JWTShWTSYpOwogCi1wcml2YXRlOgotICAgIGNsYXNzIEF1dG9yZW1vdmluZ0lzb1N1YnNw
YWNlOwotICAgIGZyaWVuZCBjbGFzcyBBdXRvcmVtb3ZpbmdJc29TdWJzcGFjZTsKKyAgICB2b2lk
IHJlbGVhc2VJc29TdWJzcGFjZShIZWFwJik7CisgICAgdm9pZCByZWxlYXNlQ2xpZW50SXNvU3Vi
c3BhY2UoVk0mKTsKIAorcHJpdmF0ZToKICAgICBMb2NrIG1fbG9jazsKLSAgICBIYXNoTWFwPFZN
KiwgSXNvU3Vic3BhY2UqPiBtX3N1YnNwYWNlUGVyVk0gV1RGX0dVQVJERURfQllfTE9DSyhtX2xv
Y2spOwotICAgIEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhWTSYpPiBtX3N1YnNwYWNlUGFy
YW1ldGVyczsKKyAgICBIYXNoTWFwPEhlYXAqLCBJc29TdWJzcGFjZSo+IG1fc3Vic3BhY2VQZXJI
ZWFwIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBIYXNoTWFwPFZNKiwgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKj4gbV9jbGllbnRTdWJzcGFjZVBlclZNIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9sb2NrKTsKKyAgICBGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoSGVhcCYpPiBtX3N1
YnNwYWNlUGFyYW1ldGVyczsKIH07CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlMo
aGVhcENlbGxUeXBlLCB0eXBlKSA6OkpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6U3Vic3BhY2VQYXJh
bWV0ZXJzKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9m
KHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDkgQEAgdm9p
ZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoSAogICAgIGlmIChMSUtFTFkocmVz
dWx0ICE9IG51bGxwdHIpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCisgICAgLy8gbWxhbSBG
SVhNRSBJIHRoaW5rIHdlIG5lZWQgdG8gc3luY2hyb25pemUgaGVyZSB0byBwcmV2ZW50IGRpZmZl
cmVudCBWTQorICAgIC8vIG1haW4gdGhyZWFkcyBmcm9tIHJhY2luZy4KKwogICAgIFN1YnNwYWNl
KiBzdWJzcGFjZSA9IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlOwogICAgIGlmIChzdWJzcGFjZS0+
aXNJc29TdWJzcGFjZSgpKSB7CiAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxJc29TdWJzcGFjZSo+KHN1YnNwYWNlKS0+dHJ5QWxsb2NhdGVGcm9tTG93ZXJUaWVyKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgTG9jYWxBbGxvY2F0b3Ig
OiBwdWJsaWMgQmFzaWNSYXdTZQogICAgIAogcHVibGljOgogICAgIExvY2FsQWxsb2NhdG9yKEJs
b2NrRGlyZWN0b3J5Kik7Ci0gICAgfkxvY2FsQWxsb2NhdG9yKCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfkxvY2FsQWxsb2NhdG9yKCk7CiAgICAgCiAgICAgdm9pZCogYWxsb2NhdGUoSGVhcCYs
IEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICAKQEAgLTU2
LDcgKzU2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6
ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKikgY29uc3Q7
Ci0gICAgCisKKyAgICBCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4g
Km1fZGlyZWN0b3J5OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0
b3J5OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRl
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0
b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWVudW0gY2xhc3MgTXV0YXRvclN0YXRlIHsKK2VudW0gY2xhc3MgTXV0YXRvclN0YXRlIDog
dWludDhfdCB7CiAgICAgLy8gVGhlIG11dGF0b3IgaXMgcnVubmluZyB3aGVuIGl0J3Mgbm90IGlu
c2lkZSBhIEhlYXAgc2xvdyBwYXRoLgogICAgIFJ1bm5pbmcsCiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2
LDYgQEAgcHVibGljOgogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYs
IEZyZWVMaXN0Kik7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0
dWFsIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRl
eHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKLSAgICAKICAgICB2b2lkIHByZXBhcmVG
b3JBbGxvY2F0aW9uKCk7CiAgICAgCiAgICAgdm9pZCBkaWRDcmVhdGVGaXJzdERpcmVjdG9yeShC
bG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSB7IG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9u
ID0gZGlyZWN0b3J5OyB9CkBAIC0xMTUsMTMgKzExMiwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgQmxv
Y2tEaXJlY3RvcnkqIG1fZmlyc3REaXJlY3RvcnkgeyBudWxscHRyIH07CiAgICAgQmxvY2tEaXJl
Y3RvcnkqIG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OyAvLyBVc2Vz
IHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCiAgICAgU2VudGluZWxMaW5r
ZWRMaXN0PFByZWNpc2VBbGxvY2F0aW9uLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8UHJlY2lzZUFs
bG9jYXRpb24+PiBtX3ByZWNpc2VBbGxvY2F0aW9uczsKLSAgICBTdWJzcGFjZSogbV9uZXh0U3Vi
c3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07Ci0KLSAgICBDU3RyaW5n
IG1fbmFtZTsKIAogICAgIGJvb2wgbV9pc0lzb1N1YnNwYWNlIHsgZmFsc2UgfTsKLXByb3RlY3Rl
ZDoKICAgICB1aW50OF90IG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50IHsgMCB9OworCisg
ICAgU3Vic3BhY2UqIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVs
bHB0ciB9OworCisgICAgQ1N0cmluZyBtX25hbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhv
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbmpl
Y3RlZFNjcmlwdEhvc3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uamF2YVNjcmlwdENhbGxGcmFt
ZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BZ2dyZWdhdGVFcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FnZ3JlZ2F0ZUVy
cm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBFcnJvclByb3RvdHlwZUJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
c3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9t
U3luY0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
c3luY0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAg
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9u
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlU
YWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0dlbmVyYXRvckZ1bmN0
aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fz
eW5jR2VuZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNHZW5lcmF0b3JQ
cm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jSXRlcmF0b3JQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0l0
ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FzeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0F0b21pY3NPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdG9taWNzT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXRvbWljc09iamVjdCwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFwcGVyT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLmJpZ0ludE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEJp
Z0ludFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmpl
Y3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmJvb2xlYW5PYmplY3RTcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JyYW5k
ZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CcmFuZGVkU3RydWN0dXJlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBjbGFzcyBCcmFuZGVkU3RydWN0dXJlIGZpbmFsIDogcHVibGljIFN0CiBwdWJs
aWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuICZ2bS5icmFuZGVkU3RydWN0dXJlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghQ2VsbFR5cGU6Om5lZWRz
RGVzdHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5jbG9uZWRBcmd1bWVudHNTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmpl
Y3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc29sZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShDb25zb2xlT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0
b21HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEN1c3RvbVNldHRlciA9IFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2Uo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9ET01BdHRyaWJ1
dGVHZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9ET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBD
dXN0b21HZXR0ZXJTZXR0ZXI7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5kb21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZSgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0
YW5jZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuICZ2bS5kYXRlSW5zdGFuY2VTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShE
YXRlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5j
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5lcnJvckluc3RhbmNlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoRXJyb3JQcm90b3R5cGVCYXNlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFs
RXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5ldmFsRXhlY3V0YWJsZVNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZt
LmV4Y2VwdGlvblNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaW5hbGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaW5h
bGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShGaW5hbGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVybiAmdm0uZnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5mdW5jdGlvbkV4ZWN1dGFibGVTcGFj
ZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxl
LCBJbnRyaW5zaWMgaW50cmluc2ljLCBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLmZ1bmN0aW9uUmFyZURhdGFTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rp
b25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShHZW5lcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzUHV0IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmdldHRlclNl
dHRlclNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsgLy8gVGhpcyBpcyBu
ZXZlciBhY2Nlc3NlZCBkaXJlY3RseSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rYWdlIG9u
IHNvbWUgY29tcGlsZXJzLgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChUeXBlID09IEhhc2hUYWJsZVR5cGU6Oktl
eSkKICAgICAgICAgICAgIHJldHVybiB2bS5zZXRCdWNrZXRTcGFjZTxtb2RlPigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUp
ID09IHNpemVvZihJbnRlcm5hbEZ1bmN0aW9uKSwgIkludGVybmFsRnVuY3Rpb24gc3ViY2xhc3Nl
cyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVycmlkZSBzdWJzcGFjZUZvcjw+KCkiKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5pbnRlcm5hbEZ1bmN0aW9uU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxD
b2xsYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEludGxDb2xsYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bERhdGVUaW1l
Rm9ybWF0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5oCShyZXZpc2lvbiAy
ODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS5pbnRsRGlzcGxheU5hbWVzU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc1By
b3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5oCShyZXZpc2lv
biAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1h
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gdm0uaW50bExpc3RGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5
cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bExpc3RGb3JtYXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bExvY2FsZVNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExvY2FsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9w
ZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxMb2NhbGVQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uaW50bE51bWJlckZvcm1hdFNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxOdW1iZXJG
b3JtYXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShJbnRsT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsUGx1cmFsUnVsZXNTcGFjZTxtb2RlPigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxl
c1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsUGx1cmFs
UnVsZXNQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRp
bWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxSZWxhdGl2
ZVRpbWVGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlU
YWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsUmVsYXRpdmVUaW1lRm9y
bWF0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsU2VnbWVudEl0ZXJhdG9yU3Bh
Y2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lv
biAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0
ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bFNlZ21l
bnRlclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFNlZ21lbnRlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlclByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEludGxTZWdtZW50ZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxTZWdtZW50c1NwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRzUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50c1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxTZWdtZW50c1Byb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVy
YXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSXRlcmF0b3JQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uYXJyYXlTcGFjZSgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmFycmF5QnVmZmVyU3BhY2U8bW9kZT4oKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5hcnJheUl0ZXJhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fz
eW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5hc3luY0dlbmVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiAmdm0uYmlnSW50U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHN0YXRpY19hc3NlcnQoU3Ry
dWN0dXJlRmxhZ3MgJiBJbXBsZW1lbnRzSGFzSW5zdGFuY2UsICIiKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5ib3Vu
ZEZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5jYWxsZWVTcGFjZSgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRl
ckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS5jdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LmN1c3RvbVNldHRlckZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgVHlwZWRB
cnJheUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gVHlwZWRBcnJheUNvbnRlbnRUeXBlOjpOb25l
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLmRhdGFWaWV3U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNEYXRhVmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gdm0uZmluYWxpemF0aW9uUmVnaXN0cnlTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3QgcmFyZURhdGFUYWcgPSAweDE7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZnVuY3Rpb25TcGFjZSgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLmdlbmVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYw
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoQWRhcHRvcjo6dHlwZVZhbHVlKSB7CiAgICAg
ICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZ2xvYmFsTGV4aWNhbEVudmly
b25tZW50U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
Niw3ICs2MTYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmdsb2JhbE9iamVjdFNwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lvbiAy
ODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLm1hcFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGludGVybmFsRmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6OmludGVybmFsRmll
bGQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5tYXBJdGVyYXRv
clNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUxvYWRlci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTTW9kdWxlTG9hZGVyLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ubW9k
dWxlTmFtZXNwYWNlT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICByZXR1cm4gdm0uanNNb2R1bGVSZWNvcmRTcGFjZTxtb2RlPigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05h
dGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLm5hdGl2ZVN0ZEZ1bmN0aW9uU3Bh
Y2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoSlNPTk9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDwyPjsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biAmdm0ucHJvbWlzZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTUHJv
bWlzZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVp
bnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8PCAxKSAtIDE7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gJnZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IE92
ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNp
emVvZihKU1Byb3h5KSk7CiAgICAgICAgIHJldHVybiAmdm0uanNQcm94eVNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0
Y2hQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDcgKzQzLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
c2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gdm0uc2NyaXB0RmV0Y2hlclNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZtLnNldFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGludGVybmFsRmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6OmludGVybmFsRmllbGQo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zZXRJdGVyYXRvclNw
YWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTb3VyY2VDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTb3VyY2VDb2RlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNvdXJjZUNv
ZGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1
YmxpYzoKICAgICAvLyBXZSBzcGVjaWFsaXplIHRoZSBzdHJpbmcgc3Vic3BhY2UgdG8gZ2V0IHRo
ZSBmYXN0ZXN0IHBvc3NpYmxlIHN3ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAgICAgLy8gbmVjZXNz
YXJ5IGlmIEpTU3RyaW5nIGRpZG4ndCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdTcGFjZSgpOwogICAg
IH0KQEAgLTI2OCw3ICsyNjgsNyBAQCBjbGFzcyBKU1JvcGVTdHJpbmcgZmluYWwgOiBwdWJsaWMg
SlNTdHJpCiAgICAgZnJpZW5kIGNsYXNzIEpTU3RyaW5nOwogcHVibGljOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnJvcGVTdHJpbmdTcGFjZSgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnN0cmluZ0l0ZXJhdG9yU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2Vha09iamVjdFJlZlNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRo
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gSlNTY29wZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53aXRoU2NvcGVTcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0
ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTWFwSXRlcmF0b3JQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCShyZXZp
c2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
TWFwUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KE1hdGhPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEVycm9yUHJv
dG90eXBlQmFzZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTmF0aXZlRXJyb3JQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5uYXRpdmVFeGVj
dXRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLm51bWJl
ck9iamVjdFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBJc0ltbXV0YWJsZVByb3RvdHlw
ZUV4b3RpY09iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShPYmplY3RQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1i
bHlGYXN0TWVtb3J5KCk7CiAgICAgXAogICAgIHYoR0NMb2dMZXZlbCwgbG9nR0MsIEdDTG9nZ2lu
Zzo6Tm9uZSwgTm9ybWFsLCAiZGVidWdnaW5nIG9wdGlvbiB0byBsb2cgR0MgYWN0aXZpdHkgKDAg
PSBOb25lLCAxID0gQmFzaWMsIDIgPSBWZXJib3NlKSIpIFwKICAgICB2KEJvb2wsIHVzZUdDLCB0
cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUdsb2JhbEdDLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBnY0F0RW5kLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgdGhlIGpzYyBDTEkgd2lsbCBkbyBhIEdDIGJlZm9yZSBleGl0aW5nIikgXAogICAg
IHYoQm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdp
bGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24gdGhlaXIgc2xvdyBwYXRocy4i
KSBcCiAgICAgdihCb29sLCBmb3JjZURpZERlZmVyR0NXb3JrLCBmYWxzZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgRGVmZXJHQyBkZXN0cnVjdGlvbnMgdG8gcGVyZm9ybSBh
IEdDLiIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
Z3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSAr
MzksOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZt
LnByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5wcm9n
cmFtRXhlY3V0YWJsZVNwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRh
YmxlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5VGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5wcm9wZXJ0
eVRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVy
cmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0ucHJveHlPYmplY3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLnByb3h5UmV2b2tlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoUmVmbGVjdE9i
amVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnJlZ0V4cFNwYWNlKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIUNlbGxUeXBlOjpu
ZWVkc0Rlc3RydWN0aW9uLCAiIik7CiAgICAgICAgIHJldHVybiAmdm0ucmVnRXhwT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFJlZ0V4
cFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCFDZWxsVHlwZTo6bmVl
ZHNEZXN0cnVjdGlvbiwgIiIpOwogICAgICAgICByZXR1cm4gJnZtLnNjb3BlZEFyZ3VtZW50c1Nw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsNyArMTA4LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2Vs
bAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoJlZNOjpTcGFjZUFuZFNldDo6
c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNldCk7CisgICAgQVNTRVJUKCZI
ZWFwOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNl
dCk7CiAgICAgY2xlYXJhYmxlQ29kZVNldC5yZW1vdmUodGhpcyk7CiB9CiAKQEAgLTE4Nyw3ICsx
ODcsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8mIGNsZWFyYWJsZUNvZGVTZXQgPSBWTTo6U3BhY2VB
bmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSk7CisgICAgYXV0byYgY2xlYXJhYmxlQ29kZVNldCA9
IEhlYXA6OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpOwogICAgIGlmIChoYXNDbGVh
cmFibGVDb2RlKHZtKSkKICAgICAgICAgY2xlYXJhYmxlQ29kZVNldC5hZGQodGhpcyk7CiAgICAg
ZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJ
dGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTZXRJdGVyYXRvclByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTZXRQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93UmVhbG1PYmplY3Qu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hh
ZG93UmVhbG1PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNoYWRvd1JlYWxtU3BhY2U8bW9kZT4oKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1Jl
YWxtUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NoYWRvd1JlYWxtUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2hhZG93UmVhbG1Qcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3BhcnNlQXJyYXlWYWx1
ZU1hcFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNT
Y29wZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5zdHJpY3RFdmFsQWN0aXZhdGlvblNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0
eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFN0cmluZ0l0ZXJhdG9yUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdPYmplY3RTcGFjZSgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB+U3RydWN0dXJl
KCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiAmdm0uc3RydWN0dXJlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJ1Y3R1cmVDaGFpblNwYWNlKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3RydWN0dXJlUmFy
ZURhdGFTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2wuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LnN5bWJvbFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LnN5bWJvbE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFN5bWJvbFBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZp
c2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNyArNDU0LDcgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgV1RGOjpJdGVyYXRvclJhbmdlPHR5cGVuYW1lIFByaXZhdGVOYW1lRW52aXJvbm1lbnQ6Oml0
ZXJhdG9yPiBQcml2YXRlTmFtZUl0ZXJhdG9yUmFuZ2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zeW1ib2xUYWJsZVNwYWNl
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxD
YWxlbmRhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsQ2FsZW5kYXIuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS50ZW1wb3JhbENhbGVuZGFyU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhclBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbER1cmF0aW9u
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiAy
ODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS50ZW1wb3JhbEluc3RhbnRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudFByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
SW5zdGFudFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlU
YWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbEluc3RhbnRQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsTm93LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxOb3cuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxOb3cu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShU
ZW1wb3JhbE5vdywgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVj
dC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKFRlbXBvcmFsT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbFBsYWluVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsUGxhaW5UaW1lU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZVByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBv
cmFsUGxhaW5UaW1lUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1By
b3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxQbGFp
blRpbWVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpv
bmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bFRpbWVab25lLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsVGltZVpvbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
dGVtcG9yYWxUaW1lWm9uZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmVQcm90b3R5
cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw3
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwKICAgICAsIG1fcmFu
ZG9tKE9wdGlvbnM6OnNlZWRPZlZNUmFuZG9tRm9yRnV6emVyKCkgPyBPcHRpb25zOjpzZWVkT2ZW
TVJhbmRvbUZvckZ1enplcigpIDogY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKICAg
ICAsIG1faW50ZWdyaXR5UmFuZG9tKCp0aGlzKQogICAgICwgaGVhcCgqdGhpcywgaGVhcFR5cGUp
CisgICAgLCBjbGllbnRIZWFwKGhlYXApCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xp
ZW50RGF0YShudWxscHRyKQogICAgICwgdG9wRW50cnlGcmFtZShudWxscHRyKQpAQCAtNTU1LDcg
KzU1Niw3IEBAIFZNJiBWTTo6c2hhcmVkSW5zdGFuY2UoKQogICAgIEdsb2JhbEpTTG9jayBnbG9i
YWxMb2NrOwogICAgIFZNKiYgaW5zdGFuY2UgPSBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAg
ICAgaWYgKCFpbnN0YW5jZSkKLSAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgVk0oQVBJ
U2hhcmVkLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CisgICAgICAgIGluc3RhbmNlID0gYWRvcHRS
ZWYobmV3IFZNKEFQSVNoYXJlZCwgSGVhcFR5cGU6OlNtYWxsKSkubGVha1JlZigpOwogICAgIHJl
dHVybiAqaW5zdGFuY2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMjUzLDkgKzI1Myw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBzaGFyZWRJbnN0YW5jZUV4aXN0cygpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBWTSYgc2hhcmVkSW5zdGFuY2UoKTsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWY8Vk0+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCwgV1RGOjpS
dW5Mb29wKiA9IG51bGxwdHIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8
Vk0+IHRyeUNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCwgV1RGOjpSdW5Mb29wKiA9IG51bGxw
dHIpOwotICAgIHN0YXRpYyBSZWY8Vk0+IGNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlwZSA9IFNt
YWxsSGVhcCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxWTT4gY3JlYXRlKEhl
YXBUeXBlID0gSGVhcFR5cGU6OlNtYWxsLCBXVEY6OlJ1bkxvb3AqID0gbnVsbHB0cik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxWTT4gdHJ5Q3JlYXRlKEhlYXBUeXBlID0g
SGVhcFR5cGU6OlNtYWxsLCBXVEY6OlJ1bkxvb3AqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJl
ZjxWTT4gY3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlID0gSGVhcFR5cGU6OlNtYWxsKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB+Vk0oKTsKIAogICAgIFdhdGNoZG9nJiBlbnN1cmVXYXRjaGRv
ZygpOwpAQCAtMzI2LDYgKzMyNiw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBIZWFwIGhl
YXA7CisgICAgR0NDbGllbnQ6OkhlYXAgY2xpZW50SGVhcDsKIAogICAgIGNvbnN0IEhlYXBDZWxs
VHlwZSYgY2VsbEhlYXBDZWxsVHlwZSgpIHsgcmV0dXJuIGhlYXAuY2VsbEhlYXBDZWxsVHlwZTsg
fQogICAgIGNvbnN0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlJiBkZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUoKSB7IHJldHVybiBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZTsgfTsKQEAgLTM0Miw0MiArMzQzLDQyIEBAIHB1YmxpYzoKICAgICBBTFdBWVNf
SU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIHZhcmlhYmxlU2l6ZWRDZWxsU3BhY2UoKSB7IHJldHVy
biBoZWFwLnZhcmlhYmxlU2l6ZWRDZWxsU3BhY2U7IH0KICAgICBBTFdBWVNfSU5MSU5FIENvbXBs
ZXRlU3Vic3BhY2UmIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RTcGFjZTsgfQogCi0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYg
YXJyYXlTcGFjZSgpIHsgcmV0dXJuIGhlYXAuYXJyYXlTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIGJpZ0ludFNwYWNlKCkgeyByZXR1cm4gaGVhcC5iaWdJbnRTcGFjZTsg
fQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGNhbGxlZVNwYWNlKCkgeyByZXR1cm4g
aGVhcC5jYWxsZWVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGNsb25l
ZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5jbG9uZWRBcmd1bWVudHNTcGFjZTsgfQot
ICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGN1c3RvbUdldHRlclNldHRlclNwYWNlKCkg
eyByZXR1cm4gaGVhcC5jdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIGRhdGVJbnN0YW5jZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5kYXRlSW5z
dGFuY2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGRvbUF0dHJpYnV0
ZUdldHRlclNldHRlclNwYWNlKCkgeyByZXR1cm4gaGVhcC5kb21BdHRyaWJ1dGVHZXR0ZXJTZXR0
ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGV4Y2VwdGlvblNwYWNl
KCkgeyByZXR1cm4gaGVhcC5leGNlcHRpb25TcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNv
U3Vic3BhY2UmIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSgpIHsgcmV0dXJuIGhlYXAu
ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29T
dWJzcGFjZSYgZnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuZnVuY3Rpb25TcGFjZTsgfQot
ICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGdldHRlclNldHRlclNwYWNlKCkgeyByZXR1
cm4gaGVhcC5nZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3Bh
Y2UmIGdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlKCkgeyByZXR1cm4gaGVhcC5nbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2Um
IGludGVybmFsRnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuaW50ZXJuYWxGdW5jdGlvblNw
YWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYganNQcm94eVNwYWNlKCkgeyBy
ZXR1cm4gaGVhcC5qc1Byb3h5U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNl
JiBuYXRpdmVFeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLm5hdGl2ZUV4ZWN1dGFibGVT
cGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIG51bWJlck9iamVjdFNwYWNl
KCkgeyByZXR1cm4gaGVhcC5udW1iZXJPYmplY3RTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUg
SXNvU3Vic3BhY2UmIHBsYWluT2JqZWN0U3BhY2UoKSB7IHJldHVybiBoZWFwLnBsYWluT2JqZWN0
U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBwcm9taXNlU3BhY2UoKSB7
IHJldHVybiBoZWFwLnByb21pc2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3Bh
Y2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsgcmV0dXJuIGhlYXAucHJvcGVydHlO
YW1lRW51bWVyYXRvclNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgcHJv
cGVydHlUYWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5wcm9wZXJ0eVRhYmxlU3BhY2U7IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByZWdFeHBTcGFjZSgpIHsgcmV0dXJuIGhlYXAu
cmVnRXhwU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByZWdFeHBPYmpl
Y3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAucmVnRXhwT2JqZWN0U3BhY2U7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIElzb1N1YnNwYWNlJiByb3BlU3RyaW5nU3BhY2UoKSB7IHJldHVybiBoZWFwLnJvcGVT
dHJpbmdTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHNjb3BlZEFyZ3Vt
ZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5zY29wZWRBcmd1bWVudHNTcGFjZTsgfQotICAgIEFM
V0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSgpIHsgcmV0
dXJuIGhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSYgc3RyaW5nU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cmluZ1NwYWNlOyB9Ci0g
ICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RyaW5nT2JqZWN0U3BhY2UoKSB7IHJldHVy
biBoZWFwLnN0cmluZ09iamVjdFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFj
ZSYgc3RydWN0dXJlQ2hhaW5TcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3RydWN0dXJlQ2hhaW5TcGFj
ZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN0cnVjdHVyZVJhcmVEYXRhU3Bh
Y2UoKSB7IHJldHVybiBoZWFwLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2U7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIElzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVTcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3RydWN0
dXJlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBicmFuZGVkU3RydWN0
dXJlU3BhY2UoKSB7IHJldHVybiBoZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFjZTsgfQotICAgIEFM
V0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN5bWJvbFRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFw
LnN5bWJvbFRhYmxlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSYgYXJyYXlTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuYXJyYXlTcGFjZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBiaWdJbnRTcGFjZSgpIHsgcmV0
dXJuIGNsaWVudEhlYXAuYmlnSW50U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSYgY2FsbGVlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmNhbGxlZVNw
YWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGNsb25lZEFy
Z3VtZW50c1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5jbG9uZWRBcmd1bWVudHNTcGFjZTsg
fQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBjdXN0b21HZXR0ZXJT
ZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2U7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZGF0ZUluc3RhbmNl
U3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmRhdGVJbnN0YW5jZVNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbUF0dHJpYnV0ZUdldHRlclNldHRl
clNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5kb21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFj
ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBleGNlcHRpb25T
cGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZXhjZXB0aW9uU3BhY2U7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNw
YWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2U7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZnVuY3Rpb25TcGFj
ZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZnVuY3Rpb25TcGFjZTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBnZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGNs
aWVudEhlYXAuZ2V0dGVyU2V0dGVyU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSYgZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2UoKSB7IHJldHVybiBj
bGllbnRIZWFwLmdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlOyB9CisgICAgQUxXQVlTX0lO
TElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGludGVybmFsRnVuY3Rpb25TcGFjZSgpIHsgcmV0
dXJuIGNsaWVudEhlYXAuaW50ZXJuYWxGdW5jdGlvblNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGpzUHJveHlTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhl
YXAuanNQcm94eVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAubmF0aXZlRXhl
Y3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2Um
IG51bWJlck9iamVjdFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5udW1iZXJPYmplY3RTcGFj
ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBwbGFpbk9iamVj
dFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wbGFpbk9iamVjdFNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb21pc2VTcGFjZSgpIHsgcmV0dXJu
IGNsaWVudEhlYXAucHJvbWlzZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAucHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb3BlcnR5VGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAucHJvcGVydHlUYWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIHJlZ0V4cFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5yZWdFeHBTcGFj
ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiByZWdFeHBPYmpl
Y3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucmVnRXhwT2JqZWN0U3BhY2U7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcm9wZVN0cmluZ1NwYWNlKCkgeyBy
ZXR1cm4gY2xpZW50SGVhcC5yb3BlU3RyaW5nU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSYgc2NvcGVkQXJndW1lbnRzU3BhY2UoKSB7IHJldHVybiBjbGll
bnRIZWFwLnNjb3BlZEFyZ3VtZW50c1NwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UmIHN0cmluZ1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJp
bmdTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJp
bmdPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RyaW5nT2JqZWN0U3BhY2U7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc3RydWN0dXJlQ2hhaW5T
cGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RydWN0dXJlQ2hhaW5TcGFjZTsgfQorICAgIEFM
V0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVSYXJlRGF0YVNwYWNl
KCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cnVjdHVyZVNwYWNlKCkgeyByZXR1
cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlJiBicmFuZGVkU3RydWN0dXJlU3BhY2UoKSB7IHJldHVybiBjbGllbnRI
ZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiBzeW1ib2xUYWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zeW1i
b2xUYWJsZVNwYWNlOyB9CiAKICNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihuYW1lKSBcCiAgICAgdGVtcGxhdGU8U3Vic3BhY2VBY2Nlc3MgbW9kZT4gXAotICAgIEFM
V0FZU19JTkxJTkUgSXNvU3Vic3BhY2UqIG5hbWUoKSB7IHJldHVybiBoZWFwLm5hbWU8bW9kZT4o
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBuYW1lKCkgeyBy
ZXR1cm4gY2xpZW50SGVhcC5uYW1lPG1vZGU+KCk7IH0KIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2Jq
ZWN0U3BhY2UpCkBAIC00ODIsMjQgKzQ4MywxOCBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlKQog
I2VuZGlmCiAKLSN1bmRlZiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSCi0KICAg
ICBBTFdBWVNfSU5MSU5FIElzb0NlbGxTZXQmIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0
aENvbnN0cmFpbnRzKCkgeyByZXR1cm4gaGVhcC5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dp
dGhDb25zdHJhaW50czsgfQogICAgIEFMV0FZU19JTkxJTkUgSXNvQ2VsbFNldCYgZXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycygpIHsgcmV0dXJuIGhlYXAuZXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVyczsgfQogCi0jZGVmaW5lIERZTkFNSUNfU1BB
Q0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG5hbWUpIFwKLSAgICB0ZW1wbGF0ZTxTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBcCi0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSogbmFtZSgpIHsgcmV0
dXJuIGhlYXAubmFtZTxtb2RlPigpOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UmIGNvZGVCbG9ja1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5jb2RlQmxvY2tT
cGFjZTsgfQogCi0gICAgdXNpbmcgU3BhY2VBbmRTZXQgPSBIZWFwOjpTcGFjZUFuZFNldDsKLSAg
ICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiBjb2RlQmxvY2tTcGFjZSgpIHsgcmV0dXJuIGhl
YXAuY29kZUJsb2NrU3BhY2U7IH0KLQotICAgIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVf
TUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCi0gICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RF
RklORV9NRU1CRVIobW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNl
KQorI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIKIAotICAgIEFMV0FZ
U19JTkxJTkUgU3BhY2VBbmRTZXQmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4g
aGVhcC5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgU3BhY2VB
bmRTZXQmIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLnByb2dyYW1FeGVj
dXRhYmxlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiB1bmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC51bmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2Um
IGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5mdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2Um
IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7IH0KIAogICAgIFZNVHlwZSB2bVR5cGU7CiAg
ICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcg
KzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKGlzV2Vha01hcCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHZtLndlYWtNYXBTcGFjZTxtb2RlPigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShX
ZWFrTWFwUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVm
UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha09iamVjdFJlZlByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFs
T2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYWtPYmplY3RSZWZQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBl
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtTZXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoV2Vha1NldFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDYWxsZWU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gdm0uanNUb1dhc21JQ0NhbGxlZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTV2Vi
QXNzZW1ibHksIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlFeGNlcHRpb25T
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseUdsb2JhbFNwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53
ZWJBc3NlbWJseU1lbW9yeVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5TW9kdWxl
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlUYWJsZVNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWcuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFz
c2VtYmx5VGFnU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZTxtb2Rl
PigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5R2xvYmFsUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShXZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJs
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2Vi
QXNzZW1ibHlNb2R1bGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFi
bGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlUYWJsZVByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
CSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksNyBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9Db2xvckRhdGEuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmgK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTUNsaWVudElz
b1N1YnNwYWNlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9ET01Db25zdHJ1Y3RvcnMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvRE9NSXNvU3Vic3BhY2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0RPTUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApJbmRleDogU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0yMDU2LDYgKzIwNTYs
NyBAQCBKU19CSU5ESU5HU19TQ1JJUFRTID0gJChDT01NT05fQklORElOR1NfCiBTVVBQTEVNRU5U
QUxfREVQRU5ERU5DWV9GSUxFID0gU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLnR4dAogU1VQUExF
TUVOVEFMX01BS0VGSUxFX0RFUFMgPSBTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCiBJU09f
U1VCU1BBQ0VTX0hFQURFUl9GSUxFID0gRE9NSXNvU3Vic3BhY2VzLmgKK0NMSUVOVF9JU09fU1VC
U1BBQ0VTX0hFQURFUl9GSUxFID0gRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKIENPTlNUUlVDVE9S
U19IRUFERVJfRklMRSA9IERPTUNvbnN0cnVjdG9ycy5oCiBXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJ
TEUgPSBET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRsCiBXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJV
Q1RPUlNfRklMRSA9IFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbApAQCAtMjA3MSw2
ICsyMDcyLDcgQEAgSURMX0lOVEVSTUVESUFURV9GSUxFUyA9IFwKICAgICAkKFNVUFBMRU1FTlRB
TF9NQUtFRklMRV9ERVBTKSBcCiAgICAgJChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFKSBc
CiAgICAgJChJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSBcCisgICAgJChDTElFTlRfSVNPX1NV
QlNQQUNFU19IRUFERVJfRklMRSkgXAogICAgICQoQ09OU1RSVUNUT1JTX0hFQURFUl9GSUxFKSBc
CiAgICAgJChXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEUpIFwKICAgICAkKFdPUktFUkdMT0JBTFND
T1BFX0NPTlNUUlVDVE9SU19GSUxFKSBcCkBAIC0yMDg0LDcgKzIwODYsNyBAQCBJRExfSU5URVJN
RURJQVRFX1BBVFRFUk5TID0gJChzdWJzdCAuLCUsCiAKICQoSURMX0lOVEVSTUVESUFURV9QQVRU
RVJOUykgOiAkKFBSRVBST0NFU1NfSURMU19TQ1JJUFRTKSAkKElETF9BVFRSSUJVVEVTX0ZJTEUp
ICQoSlNfQklORElOR19JRExTKSAkKEZFQVRVUkVfQU5EX1BMQVRGT1JNX0RFRklORV9ERVBFTkRF
TkNJRVMpCiAJJChzaGVsbCBlY2hvICQoSlNfQklORElOR19JRExTKSB8IHRyICIgIiAiXG4iID4g
SURMRmlsZU5hbWVzTGlzdC50eHQpCi0JJChQRVJMKSAkKFdlYkNvcmUpL2JpbmRpbmdzL3Njcmlw
dHMvcHJlcHJvY2Vzcy1pZGxzLnBsIC0tZGVmaW5lcyAiJChGRUFUVVJFX0FORF9QTEFURk9STV9E
RUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWlkbEZpbGVOYW1lc0xpc3QgSURMRmlsZU5h
bWVzTGlzdC50eHQgLS1pZGxBdHRyaWJ1dGVzRmlsZSAkKElETF9BVFRSSUJVVEVTX0ZJTEUpIC0t
c3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUgJChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxF
KSAtLWlzb1N1YnNwYWNlc0hlYWRlckZpbGUgJChJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSAt
LWNvbnN0cnVjdG9yc0hlYWRlckZpbGUgJChDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEUpIC0td2lu
ZG93Q29uc3RydWN0b3JzRmlsZSAkKFdJTkRPV19DT05TVFJVQ1RPUlNfRklMRSkgLS13b3JrZXJH
bG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RP
UlNfRklMRSkgLS1kZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChE
RURJQ0FURURXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0VSVklDRVdPUktFUkdMT0JBTFNDT1BF
X0NPTlNUUlVDVE9SU19GSUxFKSAtLXNoYXJlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
RmlsZSAkKFNIQVJFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXdvcmts
ZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RS
VUNUT1JTX0ZJTEUpIC0tcGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQo
UEFJTlRXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tYXVkaW9Xb3JrbGV0
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoQVVESU9XT1JLTEVUR0xPQkFMU0NPUEVfQ09O
U1RSVUNUT1JTX0ZJTEUpIC0tc3VwcGxlbWVudGFsTWFrZWZpbGVEZXBzICQoU1VQUExFTUVOVEFM
X01BS0VGSUxFX0RFUFMpCisJJChQRVJMKSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvcHJl
cHJvY2Vzcy1pZGxzLnBsIC0tZGVmaW5lcyAiJChGRUFUVVJFX0FORF9QTEFURk9STV9ERUZJTkVT
KSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWlkbEZpbGVOYW1lc0xpc3QgSURMRmlsZU5hbWVzTGlz
dC50eHQgLS1pZGxBdHRyaWJ1dGVzRmlsZSAkKElETF9BVFRSSUJVVEVTX0ZJTEUpIC0tc3VwcGxl
bWVudGFsRGVwZW5kZW5jeUZpbGUgJChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFKSAtLWlz
b1N1YnNwYWNlc0hlYWRlckZpbGUgJChJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSAtLWNsaWVu
dElTT1N1YnNwYWNlc0hlYWRlckZpbGUgJChDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklM
RSkgLS1jb25zdHJ1Y3RvcnNIZWFkZXJGaWxlICQoQ09OU1RSVUNUT1JTX0hFQURFUl9GSUxFKSAt
LXdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgJChXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEUpIC0td29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RS
VUNUT1JTX0ZJTEUpIC0tZGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoREVESUNBVEVEV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNFUlZJQ0VXT1JLRVJHTE9CQUxT
Q09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zaGFyZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9yc0ZpbGUgJChTSEFSRURXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS13
b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoV09SS0xFVEdMT0JBTFNDT1BFX0NP
TlNUUlVDVE9SU19GSUxFKSAtLXBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmls
ZSAkKFBBSU5UV09SS0xFVEdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLWF1ZGlvV29y
a2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKEFVRElPV09SS0xFVEdMT0JBTFNDT1BF
X0NPTlNUUlVDVE9SU19GSUxFKSAtLXN1cHBsZW1lbnRhbE1ha2VmaWxlRGVwcyAkKFNVUFBMRU1F
TlRBTF9NQUtFRklMRV9ERVBTKQogCiAjCiAjIEVtaXQgdGhlIHJ1bGVzIHRvIGdlbmVyYXRlIGJp
bmRpbmdzIGZyb20gSURMIGZpbGVzLiBOb3RlIHRoYXQgdGhlcmUgYXJlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MSw3ICs2MSw3IEBAIEpTQzo6Vk0mIGNvbW1vblZNU2xvdygpCiAgICAgUnVuTG9vcCogcnVuTG9v
cCA9IG51bGxwdHI7CiAjZW5kaWYKIAotICAgIGF1dG8mIHZtID0gSlNDOjpWTTo6Y3JlYXRlKEpT
Qzo6TGFyZ2VIZWFwLCBydW5Mb29wKS5sZWFrUmVmKCk7CisgICAgYXV0byYgdm0gPSBKU0M6OlZN
OjpjcmVhdGUoSlNDOjpIZWFwVHlwZTo6TGFyZ2UsIHJ1bkxvb3ApLmxlYWtSZWYoKTsKIAogICAg
IGdfY29tbW9uVk1Pck51bGwgPSAmdm07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091
dHB1dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKK0RPTUdD
T3V0cHV0Q29uc3RyYWludDo6RE9NR0NPdXRwdXRDb25zdHJhaW50KFZNJiB2bSwgSlNIZWFwRGF0
YSYgaGVhcERhdGEpCiAgICAgOiBNYXJraW5nQ29uc3RyYWludCgiRG9tbyIsICJET00gT3V0cHV0
IiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwgQ29uc3RyYWludENvbmN1cnJl
bmN5OjpDb25jdXJyZW50LCBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQogICAgICwg
bV92bSh2bSkKLSAgICAsIG1fY2xpZW50RGF0YShjbGllbnREYXRhKQorICAgICwgbV9oZWFwRGF0
YShoZWFwRGF0YSkKICAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0uaGVhcC5tdXRhdG9y
RXhlY3V0aW9uVmVyc2lvbigpKQogewogfQpAQCAtNTksNyArNTksNyBAQCB2b2lkIERPTUdDT3V0
cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJCiAgICAgCiAgICAgbV9sYXN0RXhlY3V0aW9uVmVy
c2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKICAgICAKLSAgICBtX2NsaWVu
dERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICBtX2hlYXBEYXRhLmZvckVh
Y2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNl
KSB7CiAgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoVmlzaXRvciYgdmlzaXRvciwgSGVhcENl
bGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpET01HQ091
dHB1dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEy
ICszMywxMiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU1ZN
Q2xpZW50RGF0YTsKK2NsYXNzIEpTSGVhcERhdGE7CiAKIGNsYXNzIERPTUdDT3V0cHV0Q29uc3Ry
YWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYs
IEpTVk1DbGllbnREYXRhJik7CisgICAgRE9NR0NPdXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBK
U0hlYXBEYXRhJik7CiAgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVj
dGVkOgpAQCAtNDksNyArNDksNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+IHZvaWQgZXhlY3V0ZUltcGxJbXBsKFZpc2l0b3ImKTsKIAogICAgIEpTQzo6Vk0mIG1f
dm07Ci0gICAgSlNWTUNsaWVudERhdGEmIG1fY2xpZW50RGF0YTsKKyAgICBKU0hlYXBEYXRhJiBt
X2hlYXBEYXRhOwogICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZlcnNpb247CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFzeW5jSXRlcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFzeW5jSXRlcmF0b3Iu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01B
c3luY0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgog
ICAgIHVzaW5nIERPTVdyYXBwZWQgPSB0eXBlbmFtZSBKU1dyYXBwZXI6OkRPTVdyYXBwZWQ7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpT
RE9NQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQgSlNET01CdWls
dGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKIAogREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTRE9NQ29uc3Ry
dWN0b3JCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDZWxs
VHlwZSkgPT0gc2l6ZW9mKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSkpOwogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShDZWxsVHlwZSwgSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlKTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJik7CiAKICAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+
IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5jcHAJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAq
CkBAIC00Niw3ICs0Niw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsVGhyb3dUeXBl
RXIKICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc051bGwoKSk7CiB9CiAK
LUpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNET01Db25zdHJ1Y3Rv
ckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbUNvbnN0cnVjdG9yU3Bh
Y2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0
b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b25zdHJ1Y3RvckJhc2UuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzYsNyArMzYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSBmYWxzZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5
cGUpID09IHNpemVvZihKU0RPTUNvbnN0cnVjdG9yQmFzZSkpOwogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShDZWxsVHlwZSwgSlNET01Db25zdHJ1Y3RvckJhc2Up
OwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGwodm0pOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KEJhc2U6Omdsb2JhbE9iamVjdCgpKTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBnbG9iYWxPYmplY3QoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvck5v
dENhbGxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgcHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mLCBjb25z
dCBKU0RPTUdsb2JhbE9iamVjdCYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZSkp
OwogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShDZWxsVHlwZSwg
SlNET01Db25zdHJ1Y3Rvck5vdENhbGxhYmxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRE9NV3JhcHBlZCA9IHR5cGVuYW1lIEpTV3JhcHBl
cjo6RE9NV3JhcHBlZDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoSlNET01JdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM4LDcgKzEzOCw3IEBAIGJvb2wgSlNET01XaW5kb3dQ
cm9wZXJ0aWVzOjpkZWZpbmVPd25Qcm8KICAgICByZXR1cm4gdHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgIkRlZmluaW5nIGEgcHJvcGVydHkgb24gYSBX
aW5kb3dQcm9wZXJ0aWVzIG9iamVjdCBpcyBub3QgYWxsb3dlZC4iX3MpOwogfQogCi1KU0M6Oklz
b1N1YnNwYWNlKiBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmRvbVdpbmRvd1Byb3BlcnRpZXNTcGFj
ZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9w
ZXJ0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gZmFsc2U7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KENlbGxUeXBl
OjpkZXN0cm95ID09IEpTQzo6SlNDZWxsOjpkZXN0cm95LCAiSlNET01XaW5kb3dQcm9wZXJ0aWVz
IGlzIG5vdCBkZXN0cnVjdGlibGUgYWN0dWFsbHkiKTsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbCh2bSk7CkBAIC03Miw3ICs3Miw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NywyNyArNDcsMzkgQEAgY29uc3QgSlNDOjpDbGFzc0luZm8gSlNGaWxlU3lzdGVtRGlyZWN0
bwogdGVtcGxhdGU8PgogY29uc3QgSlNDOjpDbGFzc0luZm8gSlNGaWxlU3lzdGVtRGlyZWN0b3J5
SGFuZGxlSXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkRpcmVjdG9yeSBIYW5kbGUgSXRl
cmF0b3IiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yUHJvdG90eXBlKSB9OwogCi1J
c29TdWJzcGFjZSogSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I6OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKQogewotICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7CisgICAgSlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2
bSk7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNl
OwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I+IHx8ICFKU0ZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCi0gICAgICAgIGNsaWVudERhdGEu
c2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UobWFrZVVuaXF1ZTxJc29T
dWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlKCksIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKSk7Ci0g
ICAgZWxzZQotICAgICAgICBjbGllbnREYXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvclNwYWNlKG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxl
SXRlcmF0b3IpKTsKLSAgICBhdXRvKiBzcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnREYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkpCisgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IGhlYXBEYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvclNwYWNlKCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
cj4gfHwgIUpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCisg
ICAgICAgICAgICBzcGFjZSAgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcik7CisgICAgICAgIGhlYXBE
YXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpKTsKKwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0Zp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBhdXRvKiBjbGllbnRTcGFjZSA9
IG5ldyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UoKnNwYWNlKTsKKyAgICBjbGllbnREYXRhLnNldEZp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KGNsaWVudFNwYWNlKSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwogfQogCiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0ZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvcl9vblByb21pc2VTZXR0bGVkQm9keShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSosIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yKiBjYXN0ZWRUaGlzKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYs
MTMgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCB2b2lkIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6Zmlu
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi1Jc29TdWJzcGFjZSogSlNJREJT
ZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKQorR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpLT5pZGJTZXJpYWxpemF0aW9uU3BhY2UoKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXph
dGlvbkdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMTMgKzM2LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNJREJTZXJpYWxpemF0
aW9uR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPERP
TVdyYXBwZXJXb3JsZD4mJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09
IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5jcHAJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgV2luZG93UHJveHkqIEpTV2luZG93
UHJveHk6OnRvV3JhcHBlZChWTQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1KU0M6Oklzb1N1
YnNwYWNlKiBKU1dpbmRvd1Byb3h5OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXaW5kb3dQcm94eTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKS0+d2luZG93UHJveHlTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9
CkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNXaW5kb3dQcm94eShK
U0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUmLCBET01XcmFwcGVyV29ybGQmKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBBYnN0cmFjdERPTVdpbmRvdyYpOwotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAog
ICAgIFJlZjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIgogCiAjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisj
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgpAQCAtNTIsMTUgKzUzLDE0IEBACiAjaW5jbHVkZSAicnVudGltZV9h
cnJheS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAjaW5jbHVkZSAicnVudGltZV9v
YmplY3QuaCIKKyNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZNQ2xpZW50
RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQotICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZt
KQotICAgICwgbV9idWlsdGluTmFtZXModm0pCi0gICAgLCBtX3J1bnRpbWVBcnJheUhlYXBDZWxs
VHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxSdW50aW1lQXJyYXk+KCkpCitKU0hlYXBE
YXRhOjpKU0hlYXBEYXRhKEhlYXAmIGhlYXApCisgICAgOiBtX3J1bnRpbWVBcnJheUhlYXBDZWxs
VHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxSdW50aW1lQXJyYXk+KCkpCiAgICAgLCBt
X3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlND
OjpCaW5kaW5nczo6UnVudGltZU9iamVjdD4oKSkKICAgICAsIG1fd2luZG93UHJveHlIZWFwQ2Vs
bFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNXaW5kb3dQcm94eT4oKSkKICAgICAs
IG1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3coSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8
SlNET01XaW5kb3c+KCkpCkBAIC03OSwxOSArNzksNzQgQEAgSlNWTUNsaWVudERhdGE6OkpTVk1D
bGllbnREYXRhKFZNJiB2bSkKICAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRH
bG9iYWxTY29wZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0F1ZGlvV29ya2xldEdsb2Jh
bFNjb3BlPigpKQogI2VuZGlmCiAgICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXph
dGlvbkdsb2JhbE9iamVjdChKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0lEQlNlcmlhbGl6
YXRpb25HbG9iYWxPYmplY3Q+KCkpCi0gICAgLCBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNl
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlKQotICAgICwgbV9kb21Db25zdHJ1Y3RvclNwYWNlIElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01Db25zdHJ1
Y3RvckJhc2UpCi0gICAgLCBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01PYmplY3QpCi0gICAgLCBt
X2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5j
ZWxsSGVhcENlbGxUeXBlKCksIEpTRE9NV2luZG93UHJvcGVydGllcykKLSAgICAsIG1fcnVudGlt
ZUFycmF5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgbV9ydW50aW1lQXJyYXlIZWFw
Q2VsbFR5cGUsIFJ1bnRpbWVBcnJheSkKLSAgICAsIG1fcnVudGltZU1ldGhvZFNwYWNlIElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgUnVudGltZU1ldGhv
ZCkgLy8gSGFzaDoweGY3MGM0YTg1Ci0gICAgLCBtX3J1bnRpbWVPYmplY3RTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTQzo6Qmlu
ZGluZ3M6OlJ1bnRpbWVPYmplY3QpCi0gICAgLCBtX3dpbmRvd1Byb3h5U3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZSwgSlNXaW5kb3dQcm94
eSkKLSAgICAsIG1faWRiU2VyaWFsaXphdGlvblNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LCBKU0lE
QlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QpCisgICAgLCBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3Rv
clNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNE
T01CdWlsdGluQ29uc3RydWN0b3JCYXNlKQorICAgICwgbV9kb21Db25zdHJ1Y3RvclNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01Db25zdHJ1
Y3RvckJhc2UpCisgICAgLCBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01PYmplY3QpCisgICAgLCBtX2Rv
bVdpbmRvd1Byb3BlcnRpZXNTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTRE9NV2luZG93UHJvcGVydGllcykKKyAgICAsIG1fcnVudGltZUFycmF5
U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGUs
IFJ1bnRpbWVBcnJheSkKKyAgICAsIG1fcnVudGltZU1ldGhvZFNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgUnVudGltZU1ldGhvZCkgLy8gSGFzaDow
eGY3MGM0YTg1CisgICAgLCBtX3J1bnRpbWVPYmplY3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVP
YmplY3QpCisgICAgLCBtX3dpbmRvd1Byb3h5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
bV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZSwgSlNXaW5kb3dQcm94eSkKKyAgICAsIG1faWRiU2Vy
aWFsaXphdGlvblNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1faGVhcENlbGxUeXBlRm9y
SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxP
YmplY3QpCiAgICAgLCBtX3N1YnNwYWNlcyhtYWtlVW5pcXVlPERPTUlzb1N1YnNwYWNlcz4oKSkK
IHsKIH0KIAorSlNIZWFwRGF0YSogSlNIZWFwRGF0YTo6ZW5zdXJlSGVhcERhdGEoSGVhcCYgaGVh
cCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUdsb2JhbEdDKCkpCisgICAgICAgIHJldHVybiBu
ZXcgSlNIZWFwRGF0YShoZWFwKTsKKworICAgIHN0YXRpYyBKU0hlYXBEYXRhKiBzaW5nbGV0b24g
PSBudWxscHRyOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgWyZdIHsKKyAgICAgICAgc2luZ2xldG9uID0gbmV3IEpTSGVh
cERhdGEoaGVhcCk7CisgICAgfSk7CisgICAgcmV0dXJuIHNpbmdsZXRvbjsKK30KKworI2RlZmlu
ZSBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3Vic3BhY2UpIHN1YnNwYWNlKG1faGVhcERhdGEt
PnN1YnNwYWNlKQorCitKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQorICAg
IDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQorICAgICwgbV9idWlsdGluTmFtZXModm0pCisvLyAg
ICAsIG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdz
PFJ1bnRpbWVBcnJheT4oKSkKKy8vICAgICwgbV9ydW50aW1lT2JqZWN0SGVhcENlbGxUeXBlKEpT
Qzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q+KCkp
CisvLyAgICAsIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6
OkFyZ3M8SlNXaW5kb3dQcm94eT4oKSkKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdp
bmRvdyhKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0RPTVdpbmRvdz4oKSkKKy8vICAgICwg
bV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKEpTQzo6SXNvSGVh
cENlbGxUeXBlOjpBcmdzPEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU+KCkpCisvLyAgICAs
IG1faGVhcENlbGxUeXBlRm9ySlNSZW1vdGVET01XaW5kb3coSlNDOjpJc29IZWFwQ2VsbFR5cGU6
OkFyZ3M8SlNSZW1vdGVET01XaW5kb3c+KCkpCisvLyAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNX
b3JrZXJHbG9iYWxTY29wZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dvcmtlckdsb2Jh
bFNjb3BlPigpKQorLy8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNTaGFyZWRXb3JrZXJHbG9iYWxTY29w
ZT4oKSkKKy8vI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKy8vICAgICwgbV9oZWFwQ2VsbFR5
cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJn
czxKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oKSkKKy8vI2VuZGlmCisvLyAgICAsIG1faGVh
cENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFy
Z3M8SlNXb3JrbGV0R2xvYmFsU2NvcGU+KCkpCisvLyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQ
SSkKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlKEpT
Qzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU+KCkpCisv
LyNlbmRpZgorLy8jaWYgRU5BQkxFKFdFQl9BVURJTykKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVG
b3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpT
QXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU+KCkpCisvLyNlbmRpZgorLy8gICAgLCBtX2hlYXBDZWxs
VHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdChKU0M6Oklzb0hlYXBDZWxsVHlw
ZTo6QXJnczxKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q+KCkpCisKKyAgICAsIG1faGVh
cERhdGEoSlNIZWFwRGF0YTo6ZW5zdXJlSGVhcERhdGEodm0uaGVhcCkpCisgICAgLCBDTElFTlRf
SVNPX1NVQlNQQUNFX0lOSVQobV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSkKKyAgICAsIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbUNvbnN0cnVjdG9yU3BhY2UpCisgICAgLCBDTElF
TlRfSVNPX1NVQlNQQUNFX0lOSVQobV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZSkKKyAgICAsIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSkKKyAgICAs
IENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3J1bnRpbWVBcnJheVNwYWNlKQorICAgICwgQ0xJ
RU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGltZU1ldGhvZFNwYWNlKQorICAgICwgQ0xJRU5U
X0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGltZU9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lT
T19TVUJTUEFDRV9JTklUKG1fd2luZG93UHJveHlTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVChtX2lkYlNlcmlhbGl6YXRpb25TcGFjZSkKKworICAgICwgbV9jbGllbnRTdWJz
cGFjZXMobWFrZVVuaXF1ZTxET01DbGllbnRJc29TdWJzcGFjZXM+KCkpCit7Cit9CisKKyN1bmRl
ZiBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQKKwogSlNWTUNsaWVudERhdGE6On5KU1ZNQ2xpZW50
RGF0YSgpCiB7CiAgICAgQVNTRVJUKG1fd29ybGRTZXQuY29udGFpbnMobV9ub3JtYWxXb3JsZC5n
ZXQoKSkpOwpAQCAtMTQwLDcgKzE5NSw3IEBAIHZvaWQgSlNWTUNsaWVudERhdGE6OmluaXROb3Jt
YWxXb3JsZChWTSoKICAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG5ldyBKU1ZNQ2xp
ZW50RGF0YSgqdm0pOwogICAgIHZtLT5jbGllbnREYXRhID0gY2xpZW50RGF0YTsgLy8gflZNIGRl
bGV0ZXMgdGhpcyBwb2ludGVyLgogCi0gICAgdm0tPmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQo
bWFrZVVuaXF1ZTxET01HQ091dHB1dENvbnN0cmFpbnQ+KCp2bSwgKmNsaWVudERhdGEpKTsKKyAg
ICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChtYWtlVW5pcXVlPERPTUdDT3V0cHV0Q29u
c3RyYWludD4oKnZtLCBjbGllbnREYXRhLT5oZWFwRGF0YSgpKSk7CiAKICAgICBjbGllbnREYXRh
LT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoKnZtLCBET01XcmFwcGVy
V29ybGQ6OlR5cGU6Ok5vcm1hbCk7CiAgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBh
ZG9wdFJlZihuZXcgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKHR5cGUgPT0gV29ya2VyVGhy
ZWFkVHlwZTo6RGVkaWNhdGVkV29ya2VyIHx8IHR5cGUgPT0gV29ya2VyVGhyZWFkVHlwZTo6V29y
a2xldCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
U0NsaWVudERhdGEuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMyArMjUs
OTIgQEAKICNpbmNsdWRlICJXZWJDb3JlQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUpTQnVpbHRpbnMuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRUeXBlLmgiCisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworY2xhc3MgRE9NQ2xpZW50SXNvU3Vic3BhY2VzOwogY2xhc3MgRE9NSXNvU3Vic3BhY2VzOwog
Ci1jbGFzcyBKU1ZNQ2xpZW50RGF0YSA6IHB1YmxpYyBKU0M6OlZNOjpDbGllbnREYXRhIHsKK2Ns
YXNzIEpTSGVhcERhdGEgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTSGVhcERhdGEpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIGZyaWVuZCBjbGFzcyBKU1ZNQ2xpZW50
RGF0YTsKK3B1YmxpYzoKKyAgICBKU0hlYXBEYXRhKEhlYXAmKTsKKworICAgIHN0YXRpYyBKU0hl
YXBEYXRhKiBlbnN1cmVIZWFwRGF0YShIZWFwJik7CisKKyAgICBMb2NrJiBsb2NrKCkgeyByZXR1
cm4gbV9sb2NrOyB9CisgICAgRE9NSXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJldHVybiAq
bV9zdWJzcGFjZXMuZ2V0KCk7IH0KKworICAgIFZlY3RvcjxJc29TdWJzcGFjZSo+JiBvdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOyB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE91dHB1dENvbnN0
cmFpbnRTcGFjZShjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvKiBz
cGFjZSA6IG1fb3V0cHV0Q29uc3RyYWludFNwYWNlcykKKyAgICAgICAgICAgIGZ1bmMoKnNwYWNl
KTsKKyAgICB9CisKKyAgICBJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlLmdldCgpOyB9CisgICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBu
dWxscHRyKTsgfQorCitwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOworCisgICAgSXNvSGVhcENl
bGxUeXBlIG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlOworICAgIElzb0hlYXBDZWxsVHlwZSBt
X3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGU7CisgICAgSXNvSGVhcENlbGxUeXBlIG1fd2luZG93
UHJveHlIZWFwQ2VsbFR5cGU7CitwdWJsaWM6CisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENl
bGxUeXBlRm9ySlNET01XaW5kb3c7CisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBl
Rm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTsKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9o
ZWFwQ2VsbFR5cGVGb3JKU1JlbW90ZURPTVdpbmRvdzsKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9o
ZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlOworICAgIElzb0hlYXBDZWxsVHlwZSBt
X2hlYXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7CisjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQorICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlOworI2VuZGlmCisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVh
cENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGU7CisjaWYgRU5BQkxFKENTU19QQUlOVElO
R19BUEkpCisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZTsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgSXNvSGVh
cENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZTsKKyNl
bmRpZgorICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXph
dGlvbkdsb2JhbE9iamVjdDsKKworcHJpdmF0ZToKKyAgICBJc29TdWJzcGFjZSBtX2RvbUJ1aWx0
aW5Db25zdHJ1Y3RvclNwYWNlOworICAgIElzb1N1YnNwYWNlIG1fZG9tQ29uc3RydWN0b3JTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlOworICAgIElzb1N1
YnNwYWNlIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlOworICAgIElzb1N1YnNwYWNlIG1fcnVu
dGltZUFycmF5U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV9ydW50aW1lTWV0aG9kU3BhY2U7Cisg
ICAgSXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV93
aW5kb3dQcm94eVNwYWNlOworICAgIElzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5
SGFuZGxlSXRlcmF0b3JTcGFjZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxET01Jc29TdWJzcGFj
ZXM+IG1fc3Vic3BhY2VzOworICAgIFZlY3RvcjxJc29TdWJzcGFjZSo+IG1fb3V0cHV0Q29uc3Ry
YWludFNwYWNlczsKK307CisKKworY2xhc3MgSlNWTUNsaWVudERhdGEgOiBwdWJsaWMgVk06OkNs
aWVudERhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTVk1DbGllbnREYXRhKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgZnJpZW5kIGNsYXNzIFZNV29ybGRJdGVyYXRvcjsK
IAogcHVibGljOgotICAgIGV4cGxpY2l0IEpTVk1DbGllbnREYXRhKEpTQzo6Vk0mKTsKKyAgICBl
eHBsaWNpdCBKU1ZNQ2xpZW50RGF0YShWTSYpOwogCiAgICAgdmlydHVhbCB+SlNWTUNsaWVudERh
dGEoKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBpbml0Tm9ybWFsV29y
bGQoSlNDOjpWTSosIFdvcmtlclRocmVhZFR5cGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIGluaXROb3JtYWxXb3JsZChWTSosIFdvcmtlclRocmVhZFR5cGUpOwogCiAgICAgRE9N
V3JhcHBlcldvcmxkJiBub3JtYWxXb3JsZCgpIHsgcmV0dXJuICptX25vcm1hbFdvcmxkOyB9CiAK
QEAgLTU5LDMxICsxMjgsMzMgQEAgcHVibGljOgogICAgICAgICBtX3dvcmxkU2V0LnJlbW92ZSgm
d29ybGQpOwogICAgIH0KIAorICAgIEpTSGVhcERhdGEmIGhlYXBEYXRhKCkgeyByZXR1cm4gKm1f
aGVhcERhdGE7IH0KKwogICAgIFdlYkNvcmVCdWlsdGluTmFtZXMmIGJ1aWx0aW5OYW1lcygpIHsg
cmV0dXJuIG1fYnVpbHRpbk5hbWVzOyB9CiAgICAgSlNCdWlsdGluRnVuY3Rpb25zJiBidWlsdGlu
RnVuY3Rpb25zKCkgeyByZXR1cm4gbV9idWlsdGluRnVuY3Rpb25zOyB9CiAgICAgCi0gICAgSlND
OjpJc29TdWJzcGFjZSYgZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKSB7IHJldHVybiBtX2Rv
bUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgZG9tQ29u
c3RydWN0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZG9tQ29uc3RydWN0b3JTcGFjZTsgfQotICAgIEpT
Qzo6SXNvU3Vic3BhY2UmIGRvbU5hbWVzcGFjZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9kb21O
YW1lc3BhY2VPYmplY3RTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIGRvbVdpbmRvd1By
b3BlcnRpZXNTcGFjZSgpIHsgcmV0dXJuIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlOyB9Ci0g
ICAgSlNDOjpJc29TdWJzcGFjZSYgcnVudGltZUFycmF5U3BhY2UoKSB7IHJldHVybiBtX3J1bnRp
bWVBcnJheVNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgcnVudGltZU1ldGhvZFNwYWNl
KCkgeyByZXR1cm4gbV9ydW50aW1lTWV0aG9kU3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNl
JiBydW50aW1lT2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVPYmplY3RTcGFjZTsgfQot
ICAgIEpTQzo6SXNvU3Vic3BhY2UmIHdpbmRvd1Byb3h5U3BhY2UoKSB7IHJldHVybiBtX3dpbmRv
d1Byb3h5U3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBpZGJTZXJpYWxpemF0aW9uU3Bh
Y2UoKSB7IHJldHVybiBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vi
c3BhY2UqIGZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkgeyByZXR1cm4g
bV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZS5nZXQoKTsgfQotICAgIHZv
aWQgc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVf
cHRyPEpTQzo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQotCi0gICAg
VmVjdG9yPEpTQzo6SXNvU3Vic3BhY2UqPiYgb3V0cHV0Q29uc3RyYWludFNwYWNlcygpIHsgcmV0
dXJuIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsgfQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSYgZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UoKSB7IHJldHVybiBtX2RvbUJ1aWx0aW5Db25z
dHJ1Y3RvclNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBkb21Db25zdHJ1Y3Rv
clNwYWNlKCkgeyByZXR1cm4gbV9kb21Db25zdHJ1Y3RvclNwYWNlOyB9CisgICAgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiBkb21OYW1lc3BhY2VPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fZG9tTmFt
ZXNwYWNlT2JqZWN0U3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbVdpbmRv
d1Byb3BlcnRpZXNTcGFjZSgpIHsgcmV0dXJuIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlOyB9
CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBydW50aW1lQXJyYXlTcGFjZSgpIHsgcmV0dXJu
IG1fcnVudGltZUFycmF5U3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRp
bWVNZXRob2RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU1ldGhvZFNwYWNlOyB9CisgICAgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlJiBydW50aW1lT2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX3J1bnRp
bWVPYmplY3RTcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgd2luZG93UHJveHlT
cGFjZSgpIHsgcmV0dXJuIG1fd2luZG93UHJveHlTcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSYgaWRiU2VyaWFsaXphdGlvblNwYWNlKCkgeyByZXR1cm4gbV9pZGJTZXJpYWxpemF0
aW9uU3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIGZpbGVTeXN0ZW1EaXJlY3Rv
cnlIYW5kbGVJdGVyYXRvclNwYWNlKCkgeyByZXR1cm4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3JTcGFjZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0RmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4gc3BhY2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0
ZDo6ZXhjaGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9CisKKy8vICAgIFZlY3RvcjxJc29TdWJzcGFj
ZSo+JiBvdXRwdXRDb25zdHJhaW50U3BhY2VzKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50
U3BhY2VzOyB9CisvLworLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKy8vICAgIHZvaWQg
Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25zdCBGdW5jJiBmdW5jKQorLy8gICAgewor
Ly8gICAgICAgIGZvciAoYXV0byogc3BhY2UgOiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXMpCisv
LyAgICAgICAgICAgIGZ1bmMoKnNwYWNlKTsKKy8vICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKGNvbnN0IEZ1
bmMmIGZ1bmMpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8qIHNwYWNlIDogbV9vdXRwdXRDb25z
dHJhaW50U3BhY2VzKQotICAgICAgICAgICAgZnVuYygqc3BhY2UpOwotICAgIH0KLQotICAgIERP
TUlzb1N1YnNwYWNlcyYgc3Vic3BhY2VzKCkgeyByZXR1cm4gKm1fc3Vic3BhY2VzLmdldCgpOyB9
CisgICAgRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBjbGllbnRTdWJzcGFjZXMoKSB7IHJldHVybiAq
bV9jbGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBIYXNoU2V0PERPTVdy
YXBwZXJXb3JsZCo+IG1fd29ybGRTZXQ7CkBAIC05Miw0MCArMTYzLDQzIEBAIHByaXZhdGU6CiAg
ICAgSlNCdWlsdGluRnVuY3Rpb25zIG1fYnVpbHRpbkZ1bmN0aW9uczsKICAgICBXZWJDb3JlQnVp
bHRpbk5hbWVzIG1fYnVpbHRpbk5hbWVzOwogCi0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9y
dW50aW1lQXJyYXlIZWFwQ2VsbFR5cGU7Ci0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9ydW50
aW1lT2JqZWN0SGVhcENlbGxUeXBlOwotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1fd2luZG93
UHJveHlIZWFwQ2VsbFR5cGU7Ci1wdWJsaWM6Ci0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9o
ZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdzsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hl
YXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7Ci0gICAgSlNDOjpJc29I
ZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1JlbW90ZURPTVdpbmRvdzsKLSAgICBKU0M6
Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGU7Ci0g
ICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckds
b2JhbFNjb3BlOwotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBKU0M6Oklzb0hlYXBD
ZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwotI2Vu
ZGlmCi0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRH
bG9iYWxTY29wZTsKLSNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKLSAgICBKU0M6Oklzb0hl
YXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU7Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1f
aGVhcENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZTsKLSNlbmRpZgotICAgIEpT
Qzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xv
YmFsT2JqZWN0OwotCi1wcml2YXRlOgotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9kb21CdWlsdGlu
Q29uc3RydWN0b3JTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fZG9tQ29uc3RydWN0b3JT
cGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2U7Ci0g
ICAgSlNDOjpJc29TdWJzcGFjZSBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZTsKLSAgICBKU0M6
Oklzb1N1YnNwYWNlIG1fcnVudGltZUFycmF5U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBt
X3J1bnRpbWVNZXRob2RTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVj
dFNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwotICAgIEpT
Qzo6SXNvU3Vic3BhY2UgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEpTQzo6SXNvU3Vic3BhY2U+IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERPTUlzb1N1YnNwYWNlcz4gbV9zdWJzcGFjZXM7
Ci0gICAgVmVjdG9yPEpTQzo6SXNvU3Vic3BhY2UqPiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXM7
CisgICAgSlNIZWFwRGF0YSogbV9oZWFwRGF0YTsKKy8vICAgIElzb0hlYXBDZWxsVHlwZSBtX3J1
bnRpbWVBcnJheUhlYXBDZWxsVHlwZTsKKy8vICAgIElzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVP
YmplY3RIZWFwQ2VsbFR5cGU7CisvLyAgICBJc29IZWFwQ2VsbFR5cGUgbV93aW5kb3dQcm94eUhl
YXBDZWxsVHlwZTsKKy8vcHVibGljOgorLy8gICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxU
eXBlRm9ySlNET01XaW5kb3c7CisvLyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVG
b3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOworLy8gICAgSXNvSGVhcENlbGxUeXBlIG1f
aGVhcENlbGxUeXBlRm9ySlNSZW1vdGVET01XaW5kb3c7CisvLyAgICBJc29IZWFwQ2VsbFR5cGUg
bV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlOworLy8gICAgSXNvSGVhcENlbGxU
eXBlIG1faGVhcENlbGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTsKKy8vI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKKy8vICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlw
ZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOworLy8jZW5kaWYKKy8vICAgIElzb0hlYXBD
ZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2JhbFNjb3BlOworLy8jaWYgRU5B
QkxFKENTU19QQUlOVElOR19BUEkpCisvLyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5
cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOworLy8jZW5kaWYKKy8vI2lmIEVOQUJMRShX
RUJfQVVESU8pCisvLyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlv
V29ya2xldEdsb2JhbFNjb3BlOworLy8jZW5kaWYKKy8vICAgIElzb0hlYXBDZWxsVHlwZSBtX2hl
YXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDsKKy8vCisvL3ByaXZh
dGU6CisKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9kb21CdWlsdGluQ29uc3RydWN0b3JT
cGFjZTsKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9kb21Db25zdHJ1Y3RvclNwYWNlOwor
ICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlOworICAg
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZTsKKyAgICBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lQXJyYXlTcGFjZTsKKyAgICBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UgbV9ydW50aW1lTWV0aG9kU3BhY2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlIG1fcnVudGltZU9iamVjdFNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3dp
bmRvd1Byb3h5U3BhY2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXph
dGlvblNwYWNlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4g
bV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8RE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2NsaWVudFN1YnNwYWNlczsKKy8vICAgIFZl
Y3RvcjxJc29TdWJzcGFjZSo+IG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5
KQpAQCAtMzA1NSwxMyArMzA1NSwxMyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKVxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29u
Y3VycmVudGx5KVxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgICAgIHJl
dHVybiBudWxscHRyO1xuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIH1cbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7XG4iKTsKKyAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTtcbiIpOwogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgog
ICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7CkBAIC00ODQwLDM3ICs0ODQwLDUwIEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJsZURlZmlu
aXRpb24oJGludGVyZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAKKyAgICBBZGRUb0lt
cGxJbmNsdWRlcygiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29y
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPiIpOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoVk0mIHZt
KVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
JiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpO1xuIik7Ci0gICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVy
ZmFjZU5hbWV9LmdldCgpKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiBzcGFjZTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7XG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCkpXG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlO1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9O1xuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBN
b2RlLmdldCgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFzcGFjZSkg
e1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwO1xuIik7CisKICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVy
ZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfSwgJHtjbGFzc05h
bWV9KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2Vs
bFR5cGVGb3Ike2NsYXNzTmFtZX0sICR7Y2xhc3NOYW1lfSk7XG4iKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xh
c3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgJHtjbGFzc05hbWV9KTtcbiIpOwotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBlbHNlXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2Vs
bFR5cGUoKSwgJHtjbGFzc05hbWV9KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+IHx8ICEke2NsYXNzTmFtZX06Om5lZWRzRGVzdHJ1Y3Rp
b24pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NO
YW1lfT4pXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgJHtjbGFzc05hbWV9KTtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgZWxzZVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCAke2NsYXNzTmFtZX0pO1xuIik7CiAgICAg
fQotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpXG4iKTsKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNh
bC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
JHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cztcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpXG4iKTsKLSMgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCYke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKVxuIik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpO1xuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBzcGFjZTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IH1cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKworICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VO
YW1lfSA9IG1ha2VVbmlxdWU8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpO1xuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7CkBAIC02NzIx
LDI5ICs2NzM0LDQwIEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gJHtpdGVyYXRvck5hbWV9
QmFzZTsKICAgICBERUNMQVJFX0lORk87CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgICAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgICAgICBp
ZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQo
KSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+
IHx8ICEke2l0ZXJhdG9yTmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRl
cmF0b3JOYW1lfT4pCi0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JO
YW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCAke2l0ZXJhdG9yTmFtZX0pOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JO
YW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgJHtpdGVyYXRvck5hbWV9KTsKLSAgICAgICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsKKyAgICAg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAg
ICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7CisKKyAgICAgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Cisg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgICAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICAgICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7CisgICAgICAg
IGlmICghc3BhY2UpIHsKKyAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+IHx8ICEke2l0ZXJhdG9yTmFtZX06Om5lZWRzRGVzdHJ1
Y3Rpb24pOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+KQorICAgICAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAke2l0ZXJhdG9yTmFtZX0pOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgJHtpdGVyYXRvck5hbWV9KTsK
KyAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1
bnJlYWNoYWJsZS1jb2RlXCIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZVwiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtpdGVyYXRvck5hbWV9Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSAke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKKyAgICAgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICAgICAgcmV0dXJuIHNwYWNlOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBtYWtlVW5pcXVlPEdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOwogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03
NTI2LDcgKzc1NTAsNyBAQCBzdWIgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbgogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBERUNMQVJFX0lORk87XG4iKTsKIAogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFj
ZUFjY2Vzcz5cbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pXG4iKTsKKyAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB7XG4i
KTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKCR7cHJvdG90eXBlQ2xhc3NOYW1lfSwgQmFzZSk7XG4iKTsKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
O1xuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3Mt
aWRscy5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3By
ZXByb2Nlc3MtaWRscy5wbAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYg
KzQxLDcgQEAgbXkgJGlkbEZpbGVOYW1lc0xpc3Q7CiBteSAkdGVzdEdsb2JhbENvbnRleHROYW1l
OwogbXkgJHN1cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlOwogbXkgJGlzb1N1YnNwYWNlc0hlYWRl
ckZpbGU7CitteSAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZTsKIG15ICRjb25zdHJ1Y3Rv
cnNIZWFkZXJGaWxlOwogbXkgJHdpbmRvd0NvbnN0cnVjdG9yc0ZpbGU7CiBteSAkd29ya2VyR2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlOwpAQCAtNzksNiArODAsNyBAQCBHZXRPcHRpb25zKCdk
ZWZpbmVzPXMnID0+IFwkZGVmaW5lcywKICAgICAgICAgICAgJ3Rlc3RHbG9iYWxDb250ZXh0TmFt
ZT1zJyA9PiBcJHRlc3RHbG9iYWxDb250ZXh0TmFtZSwKICAgICAgICAgICAgJ3N1cHBsZW1lbnRh
bERlcGVuZGVuY3lGaWxlPXMnID0+IFwkc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUsCiAgICAg
ICAgICAgICdpc29TdWJzcGFjZXNIZWFkZXJGaWxlPXMnID0+IFwkaXNvU3Vic3BhY2VzSGVhZGVy
RmlsZSwKKyAgICAgICAgICAgJ2NsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGU9cycgPT4gXCRj
bGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlLAogICAgICAgICAgICAnY29uc3RydWN0b3JzSGVh
ZGVyRmlsZT1zJyA9PiBcJGNvbnN0cnVjdG9yc0hlYWRlckZpbGUsCiAgICAgICAgICAgICd3aW5k
b3dDb25zdHJ1Y3RvcnNGaWxlPXMnID0+IFwkd2luZG93Q29uc3RydWN0b3JzRmlsZSwKICAgICAg
ICAgICAgJ3dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZT1zJyA9PiBcJHdvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSwKQEAgLTExMCw2ICsxMTIsNyBAQCBkaWUoJ011c3Qg
c3BlY2lmeSBJREwgYXR0cmlidXRlcyBmaWxlIHVzCiAKICRzdXBwbGVtZW50YWxEZXBlbmRlbmN5
RmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUpOwog
JGlzb1N1YnNwYWNlc0hlYWRlckZpbGUgPSBDeWd3aW5QYXRoSWZOZWVkZWQoJGlzb1N1YnNwYWNl
c0hlYWRlckZpbGUpOworJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUgPSBDeWd3aW5QYXRo
SWZOZWVkZWQoJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUpOwogJGNvbnN0cnVjdG9yc0hl
YWRlckZpbGUgPSBDeWd3aW5QYXRoSWZOZWVkZWQoJGNvbnN0cnVjdG9yc0hlYWRlckZpbGUpOwog
JHdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgPSBDeWd3aW5QYXRoSWZOZWVkZWQoJHdpbmRvd0NvbnN0
cnVjdG9yc0ZpbGUpOwogJHdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSA9IEN5Z3dp
blBhdGhJZk5lZWRlZCgkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlKTsKQEAgLTE2
OSw2ICsxNzIsNyBAQCBteSAkaXNvU3Vic3BhY2VzSGVhZGVyQ29kZSA9IDw8RU5EOwogI3ByYWdt
YSBvbmNlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIGNs
YXNzIERPTUlzb1N1YnNwYWNlcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRE9NSXNvU3Vi
c3BhY2VzKTsKQEAgLTE3Nyw2ICsxODEsMjIgQEAgcHVibGljOgogICAgIERPTUlzb1N1YnNwYWNl
cygpID0gZGVmYXVsdDsKIEVORAogCitteSAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSA9
IDw8RU5EOworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBu
YW1lc3BhY2UgSlNDOworCitjbGFzcyBET01DbGllbnRJc29TdWJzcGFjZXMgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERPTUNsaWVudElzb1N1YnNwYWNlcyk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQoRE9NQ2xpZW50SXNvU3Vic3BhY2VzKTsKK3B1YmxpYzoKKyAgICBET01DbGll
bnRJc29TdWJzcGFjZXMoKSA9IGRlZmF1bHQ7CitFTkQKKwogbXkgQGNvbnN0cnVjdG9ycyA9ICgp
OwogbXkgJGNvbnN0cnVjdG9yc0hlYWRlckNvZGUgPSA8PEVORDsKICNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgpAQCAtMjQyLDkgKzI2MiwxMSBAQCBmb3JlYWNoIG15ICRpZGxGaWxlTmFtZSAo
c29ydCBrZXlzICVpZGxGCiAKICAgICBteSAkaXNDYWxsYmFja0ludGVyZmFjZSA9IGlzQ2FsbGJh
Y2tJbnRlcmZhY2VGcm9tSURMKCRpZGxGaWxlKTsKICAgICBpZiAoISRpc0NhbGxiYWNrSW50ZXJm
YWNlKSB7Ci0gICAgICAgICRpc29TdWJzcGFjZXNIZWFkZXJDb2RlIC49ICIgICAgc3RkOjp1bmlx
dWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IG1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9O1xu
IjsKKyAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+IG1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9O1xuIjsKKyAgICAg
ICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1l
fTtcbiI7CiAgICAgICAgIGlmIChjb250YWluc0l0ZXJhYmxlSW50ZXJmYWNlRnJvbUlETCgkaWRs
RmlsZSkpIHsKLSAgICAgICAgICAgICRpc29TdWJzcGFjZXNIZWFkZXJDb2RlIC49ICIgICAgc3Rk
Ojp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IG1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5h
bWV9SXRlcmF0b3I7XG4iOworICAgICAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUgLj0g
IiAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+IG1fc3Vic3BhY2VGb3Ike2ludGVyZmFj
ZU5hbWV9SXRlcmF0b3I7XG4iOworICAgICAgICAgICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRl
ckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2Ns
aWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfUl0ZXJhdG9yO1xuIjsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMzE3LDYgKzMzOSwxMiBAQCBpZiAoJGlzb1N1YnNwYWNlc0hlYWRlckZpbGUp
IHsKICAgICBXcml0ZUZpbGVJZkNoYW5nZWQoJGlzb1N1YnNwYWNlc0hlYWRlckZpbGUsICRpc29T
dWJzcGFjZXNIZWFkZXJDb2RlKTsKIH0KIAoraWYgKCRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJG
aWxlKSB7CisgICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIn07XG4iOworICAg
ICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJDb2RlIC49ICJ9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
XG4iOworICAgIFdyaXRlRmlsZUlmQ2hhbmdlZCgkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmls
ZSwgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUpOworfQorCiBpZiAoJGNvbnN0cnVjdG9y
c0hlYWRlckZpbGUpIHsKICAgICBteSAkY29uc3RydWN0b3JzTGVuZ3RoID0gQGNvbnN0cnVjdG9y
czsKICAgICAkY29uc3RydWN0b3JzSGVhZGVyQ29kZSAuPSAifTtcbiI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw3ICsxNjEsNyBAQCBib29sIFJ1bnRpbWVBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBSdW50aW1lQXJyYXk6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBS
dW50aW1lQXJyYXk6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4g
JnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPnJ1bnRpbWVBcnJh
eVNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQpAQCAtODgsNyArODgsNyBAQCBwcml2
YXRlOgogICAgIFJ1bnRpbWVBcnJheShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBCaW5kaW5nczo6QXJyYXkqKTsKIAotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIEJpbmRp
bmdzQXJyYXkqIG1fYXJyYXk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9tZXRob2QuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIGJvb2wg
UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEoKICAgICByZXR1cm4gSW50ZXJuYWxG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLUlzb1N1YnNwYWNlKiBSdW50aW1lTWV0aG9kOjpzdWJzcGFjZUZvcklt
cGwoVk0mIHZtKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBSdW50aW1lTWV0aG9kOjpzdWJzcGFj
ZUZvckltcGwoVk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKS0+cnVudGltZU1ldGhvZFNwYWNlKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoUnVudGltZU1ldGhvZCksICJSdW50aW1lTWV0aG9kIHN1
YmNsYXNzZXMgdGhhdCBhZGQgZmllbGRzIG5lZWQgdG8gb3ZlcnJpZGUgc3Vic3BhY2VGb3I8Pigp
Iik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2VsbFR5cGU6OmRlc3Ryb3kgPT0gSlNDOjpKU0Nl
bGw6OmRlc3Ryb3kpOwpAQCAtNzQsNyArNzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CiAKICAgICBCaW5kaW5nczo6TWV0aG9kKiBtX21ldGhv
ZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw3ICszMTMsNyBAQCBFeGNlcHRpb24qIHRocm93UnVu
dGltZU9iamVjdEludmFsaWRBY2NlCiAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVHJ5aW5nIHRvIGFjY2VzcyBvYmplY3QgZnJvbSBkZXN0cm95ZWQgcGx1Zy1pbi4iKSk7
CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIFJ1bnRpbWVPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBSdW50aW1lT2JqZWN0Ojpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5ydW50aW1lT2JqZWN0U3BhY2UoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KENlbGxUeXBlKSA9PSBzaXplb2YoUnVudGltZU9iamVjdCksICJSdW50aW1lT2JqZWN0IHN1YmNs
YXNzZXMgdGhhdCBhZGQgZmllbGRzIG5lZWQgdG8gb3ZlcnJpZGUgc3Vic3BhY2VGb3I8PigpIik7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2VsbFR5cGU6OmRlc3Ryb3kgPT0gUnVudGltZU9iamVj
dDo6ZGVzdHJveSk7CkBAIC04Niw3ICs4Niw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoVk0mKTsKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoVk0mKTsKIAogICAgIFJlZlB0cjxJbnN0YW5jZT4gbV9pbnN0YW5jZTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsKHZtKTsKICAgICB9CkBAIC0xMzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgdG9Cb29sZWFuKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7IC8vIEZJWE1FOiBDdXJy
ZW50bHkgdGhpcyBpcyBicm9rZW4gYmVjYXVzZSBub25lIG9mIHRoZSBzdXBlcmNsYXNzZXMgYXJl
IG1hcmtlZCB2aXJ0dWFsLiBXZSBuZWVkIHRvIHNvbHZlIHRoaXMgaW4gdGhlIGxvbmdlciB0ZXJt
LgogCi0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKIAogICAg
IFJlZlB0cjxPYmpjSW5zdGFuY2U+IF9pbnN0YW5jZTsKICAgICBTdHJpbmcgbV9pdGVtOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzIsMTMgKzMzMiwxMyBAQCBib29sIE9iamNGYWxsYmFja09iamVj
dEltcDo6dG9Cb29sZWFuKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU0M6Oklzb1N1YnNw
YWNlKiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
K0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlND
OjpJc29TdWJzcGFjZVBlclZNPiBwZXJWTShbXSAoSlNDOjpWTSYgdm0pIHsKLSAgICAgICAgcmV0
dXJuIElTT19TVUJTUEFDRV9QQVJBTUVURVJTKHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSgpLCBPYmpjRmFsbGJhY2tPYmplY3RJbXApOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxKU0M6Oklzb1N1YnNwYWNlUGVyVk0+IHBlclZNKFtdIChKU0M6OkhlYXAmIGhlYXApIHsKKyAg
ICAgICAgcmV0dXJuIElTT19TVUJTUEFDRV9QQVJBTUVURVJTKGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBPYmpjRmFsbGJhY2tPYmplY3RJbXApOwogICAgIH0pOwotICAgIHJl
dHVybiAmcGVyVk0uZ2V0KCkuZm9yVk0odm0pOworICAgIHJldHVybiAmcGVyVk0uZ2V0KCkuY2xp
ZW50SXNvU3Vic3BhY2Vmb3JWTSh2bSk7CiB9CiAKLX0KLX0KK30gLy8gbmFtZXNwYWNlIEJpbmRp
bmdzCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
SmF2YVNjcmlwdENvcmUvRGlzYWxsb3dWTUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL0Rpc2FsbG93Vk1FbnRyeS5jcHAJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENv
cmUvRGlzYWxsb3dWTUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogdXNpbmcgSlNDOjpEaXNhbGxvd1ZNRW50cnk7CiB1c2lu
ZyBKU0M6OkpTTG9ja0hvbGRlcjsKLXVzaW5nIEpTQzo6TGFyZ2VIZWFwOwordXNpbmcgSlNDOjpI
ZWFwVHlwZTsKIHVzaW5nIEpTQzo6Vk07CiAKIHN0YXRpYyB2b2lkIGVudGVyU2NvcGUoVk0mIHZt
LCB1bnNpZ25lZCBlbnRyeUNvdW50LCB1bnNpZ25lZCByZW1haW5pbmdFbnRyaWVzKQpAQCAtNTEs
NyArNTEsNyBAQCBURVNUKEphdmFTY3JpcHRDb3JlX0Rpc2FsbG93Vk1FbnRyeSwgTmVzCiAgICAg
V1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0g
ICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0g
PSBWTTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSkubGVha1JlZigpOwogICAgIHsKICAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZN
RW50cnlDb3VudCwgMHUpOwpAQCAtNjUsNyArNjUsNyBAQCBURVNUKEphdmFTY3JpcHRDb3JlX0Rp
c2FsbG93Vk1FbnRyeSwgQ29wCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAg
IEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0gICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXAp
LmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSkubGVh
a1JlZigpOwogICAgIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAg
IEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZNRW50cnlDb3VudCwgMHUpOwpAQCAtODksNyArODksNyBA
QCBURVNUKEphdmFTY3JpcHRDb3JlX0Rpc2FsbG93Vk1FbnRyeSwgQ29wCiAgICAgV1RGOjppbml0
aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0gICAgVk0mIHZt
ID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6Y3Jl
YXRlKEhlYXBUeXBlOjpMYXJnZSkubGVha1JlZigpOwogICAgIHsKICAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZNRW50cnlDb3Vu
dCwgMHUpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9Q
cm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
SmF2YVNjcmlwdENvcmUvUHJvcGVydHlTbG90LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAog
dXNpbmcgSlNDOjpKU0xvY2tIb2xkZXI7Ci11c2luZyBKU0M6OkxhcmdlSGVhcDsKK3VzaW5nIEpT
Qzo6SGVhcFR5cGU7CiB1c2luZyBKU0M6OlByb3BlcnR5U2xvdDsKIHVzaW5nIEpTQzo6Vk07CiB1
c2luZyBKU0M6OmpzVW5kZWZpbmVkOwpAQCAtNDIsNyArNDIsNyBAQCBURVNUKEphdmFTY3JpcHRD
b3JlX1Byb3BlcnR5U2xvdCwgRGlzYWxsCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgp
OwogICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0gICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJn
ZUhlYXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJn
ZSkubGVha1JlZigpOwogICAgIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAg
ICAgICAgIEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZNRW50cnlDb3VudCwgMHUpOwpAQCAtNzgsNyAr
NzgsNyBAQCBURVNUKEphdmFTY3JpcHRDb3JlX1Byb3BlcnR5U2xvdCwgVk1JbnF1CiAgICAgV1RG
Ojppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0gICAg
Vk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBW
TTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSkubGVha1JlZigpOwogICAgIHsKICAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZNRW50
cnlDb3VudCwgMHUpOwpAQCAtMTAyLDcgKzEwMiw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfUHJv
cGVydHlTbG90LCBDb3B5QXMKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAg
SlNDOjppbml0aWFsaXplKCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCku
bGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFr
UmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAg
RVhQRUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7Cg==
</data>
<flag name="commit-queue"
          id="471370"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446051</attachid>
            <date>2021-12-06 10:33:09 -0800</date>
            <delta_ts>2021-12-06 11:11:25 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-233878.patch</filename>
            <type>text/plain</type>
            <size>245670</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkx
LDcgKzkxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSBXVEZfSUdOTwogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAot
ICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0mIHZt
ID0gVk06OmNyZWF0ZShIZWFwVHlwZTo6TGFyZ2UpLmxlYWtSZWYoKTsKICAgICB7CiAgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1ODgsNyArMzU4OCw3IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUm
IG9wdGlvbnMsIGIKIHsKICAgICBXb3JrZXIgd29ya2VyKFdvcmtlcnM6OnNpbmdsZXRvbigpKTsK
ICAgICAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAg
IFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgaWYg
KCFpc1dvcmtlciAmJiBvcHRpb25zLm1fY2FuQmxvY2tJc0ZhbHNlKQogICAgICAgICB2bS5tX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IEpTQzo6U2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIoZmFsc2UpKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYs
NyBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFs
TWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgVk0qIHZtID0gJlZNOjpjcmVhdGUo
TGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0qIHZtID0gJlZNOjpjcmVhdGUoSGVhcFR5cGU6
OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBD
b21tYW5kTGluZSBvcHRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uYXBpR2xvYmFsT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXBpVmFsdWVXcmFwcGVy
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw3ICsxMzksNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbklt
CiBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwg
SlNBUElXcmFwcGVyT2JqZWN0KTsKIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1
YnNwYWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNj
ZXNzOjpPbk1haW5UaHJlYWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5jYWxsYmFja0NvbnN0cnVjdG9yU3BhY2U8
bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3
LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmNhbGxiYWNrRnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0cnVjdHVyZSogSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamUKIH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJz
cGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6
Ok9uTWFpblRocmVhZDoKQEAgLTEzMyw3ICsxMzMsNyBAQCBJc29TdWJzcGFjZSogSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsCiB9CiAKIHRlbXBsYXRlIDw+Ci1Jc29TdWJzcGFjZSogSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNw
YWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtLCBtb2RlKTsKICAgICB9CkBA
IC0xOTksNyArMTk5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mLCBTdWJzcGFjZUFjY2Vzcyk7CisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJiwgU3Vic3Bh
Y2VBY2Nlc3MpOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMX0FUVFJJ
QlVURVMgY3VzdG9tVG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRl
cm5hbEZ1bmN0aW9uIEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ub2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg5LDcgKzkwLDcgQEAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgSlNDYWxsYmFja09iagog
fQogCiB0ZW1wbGF0ZSA8PgotSXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFw
cGVyR2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdy
YXBwZXJPYmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTAzLDcgKzEwMyw3IEBAIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIEpTQ2FsbGJhY2tPYmoK
IH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUp
CitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxs
YmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzY0NhbGxiYWNrRnVu
Y3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI3Nyw3ICsyMjc3LDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFsbG9jYXRp
bmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoKS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworLy8gICAgICAgICAgICAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCkuYWxsb2Nh
dG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAg
ICAgICAgICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UoKS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxs
b2NhdGUoc2NyYXRjaEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzgsNyAr
MTA3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHYKICAgICBz
dHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIHN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIAotICAgIFZNOjpT
cGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CisgICAgSGVhcDo6U3Bh
Y2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMTY2OCw3ICsxNjY4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgIH07CiAgICAgdXBkYXRlQWN0aXZpdHkoKTsKIAot
ICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5yZW1vdmUodGhpcyk7Cisg
ICAgSGVhcDo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOwog
CiAgICAgLy8gSW4gQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUg
ZGVjaWRlZCB0byBza2lwIHZpc2l0aW5nIHRoaXMKICAgICAvLyBjb2RlQmxvY2suIEJ5IHRoZSB0
aW1lIHdlIGdldCBoZXJlLCB3ZSdyZSBkb25lIHdpdGggdGhlIHZlcmlmaWVyIEdDLiBTbywgbGV0
J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxv
Y2suaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V2YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6
CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJu
ICZ2bS5jb2RlQmxvY2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBFdmFsQ29kZUJsb2Nr
KiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1
cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0
aW9uQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCw5IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOwor
ICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1
bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAgICAgREVD
TEFSRV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5jb2Rl
QmxvY2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2smIG90aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5
ICs0MCw5IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNl
OworICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3Rh
dGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywg
UHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRFdmFsQ29kZUJsb2Nr
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9ja1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTEsNyArMjUxLDcgQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdAog
ICAgICAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LnNldCh2bSwgdGhpcywgcmVz
dWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHZtLnVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlU3BhY2UoKS5zZXQuYWRkKHRoaXMpOworICAgIHZtLmhlYXAudW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQuYWRkKHRoaXMpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpmaW5hbGl6CiAgICAgICAgIGNsZWFySWZEZWFkKG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxs
KTsKICAgICAgICAgY2xlYXJJZkRlYWQobV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7
CiAgICAgICAgIGlmIChpc0NsZWFyZWQgJiYgIWlzU3RpbGxWYWxpZCkKLSAgICAgICAgICAgIHZt
LnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKS5zZXQucmVtb3ZlKHRoaXMpOworICAg
ICAgICAgICAgdm0uaGVhcC51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNl
dC5yZW1vdmUodGhpcyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS51bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAmdm0udW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQg
dW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwg
SlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+
IHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBzdGQ6Om9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJv
bm1lbnQ+IHBhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQsIERlcml2ZWRDb250ZXh0VHlwZSBk
ZXJpdmVkQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NG
aWVsZEluaXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCBwcml2YXRlQnJhbmRSZXF1
aXJlbWVudCwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGZhbHNlKQpA
QCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fdW5saW5rZWRDb2Rl
QmxvY2tGb3JDYWxsLmNsZWFyKCk7CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuY2xlYXIoKTsKLSAgICAgICAgdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFj
ZSgpLnNldC5yZW1vdmUodGhpcyk7CisgICAgICAgIHZtLmhlYXAudW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQucmVtb3ZlKHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQg
cmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBMZXhpY2FsU2NvcGVGZWF0dXJlcyBs
ZXhpY2FsU2NvcGVGZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2tTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2tTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5kZWJ1Z2dlclNjb3BlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVT
dWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE2ICs0NSw2IEBAIENvbXBsZXRlU3Vi
c3BhY2U6On5Db21wbGV0ZVN1YnNwYWNlKCkKIHsKIH0KIAotQWxsb2NhdG9yIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQot
ewotICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1vZGUpOwotfQotCi12
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVm
ZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci19Ci0KIEFsbG9jYXRvciBDb21wbGV0ZVN1YnNw
YWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBpbmRleCA9
IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpOwpAQCAtMTIzLDkgKzExMyw5IEBA
IHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgdm0udmVy
aWZ5Q2FuR0MoKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7Ci0gICAgCi0gICAgaWYg
KEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSh2
bS5oZWFwLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVs
bCk7CisKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKSkKKyAgICAgIHJldHVy
biBhbGxvY2F0b3IuYWxsb2NhdGUodm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIAogICAgIGlmIChzaXplIDw9IE9wdGlvbnM6
OnByZWNpc2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFj
ZTo6bGFyZ2VDdXRvZmYpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBs
ZXRlU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5
LDggQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgc3Vic3BhY2VzIHNw
ZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMiLCBidXQgdGhhdCdzIHRlbXBv
cmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgx
NTU5Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUp
IGZpbmFsOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxs
b2NhdG9yRm9yTW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoVk0mLCBzaXplX3QsIEdD
RGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBmaW5hbDsKICAgICB2b2lk
KiBhbGxvY2F0ZU5vblZpcnR1YWwoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICB2b2lkKiByZWFsbG9jYXRlUHJlY2lzZUFsbG9jYXRp
b25Ob25WaXJ0dWFsKFZNJiwgSGVhcENlbGwqLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICAKQEAgLTYyLDYgKzYwLDIxIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMb2NhbEFsbG9jYXRvcj4+IG1fbG9jYWxBbGxv
Y2F0b3JzOwogfTsKIAorLy9jbGFzcyBDb21wbGV0ZVN1YnNwYWNlIHsKKy8vcHVibGljOgorLy8g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGxldGVTdWJzcGFjZShDb21wbGV0ZVN1YnNwYWNlJik7
CisvLyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29tcGxldGVTdWJzcGFjZSgpOworLy8KKy8vICAg
IEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9k
ZSk7CisvLworLy8gICAgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0Rl
ZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisvLworLy9wcml2YXRlOgor
Ly8gICAgQ29tcGxldGVTdWJzcGFjZSYgbV9zZXJ2ZXI7CisvLy8vICAgIExvY2FsQWxsb2NhdG9y
IG1fbG9jYWxBbGxvY2F0b3I7CisvL307CisKKwogQUxXQVlTX0lOTElORSBBbGxvY2F0b3IgQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZSBtb2RlKQogewogICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1
dG9mZikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIklzb0lubGluZWRIZWFwQ2VsbFR5cGVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSXNvU3Vic3BhY2VQZXJWTS5oIgogI2luY2x1ZGUgIkpJVFN0
dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgpAQCAtMTEzLDcgKzExNCw3IEBAIGRvdWJsZSBt
YXhQYXVzZU1TKGRvdWJsZSB0aGlzUGF1c2VNUykKIAogc2l6ZV90IG1pbkhlYXBTaXplKEhlYXBU
eXBlIGhlYXBUeXBlLCBzaXplX3QgcmFtU2l6ZSkKIHsKLSAgICBpZiAoaGVhcFR5cGUgPT0gTGFy
Z2VIZWFwKSB7CisgICAgaWYgKGhlYXBUeXBlID09IEhlYXBUeXBlOjpMYXJnZSkgewogICAgICAg
ICBkb3VibGUgcmVzdWx0ID0gc3RkOjptaW4oCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KE9wdGlvbnM6OmxhcmdlSGVhcFNpemUoKSksCiAgICAgICAgICAgICByYW1TaXplICogT3B0
aW9uczo6c21hbGxIZWFwUkFNRnJhY3Rpb24oKSk7CkBAIC0zOTMsMTAgKzM5NCwxMCBAQCBIZWFw
OjpIZWFwKFZNJiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBzeW1ib2xUYWJsZVNwYWNl
IElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBT
eW1ib2xUYWJsZSkgLy8gSGFzaDoweGM1MjE1YWZkCiAgICAgLCBleGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlc1dpdGhDb25zdHJhaW50cyhleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCiAg
ICAgLCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJzKGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VTcGFjZSkKLSAgICAsIGNvZGVCbG9ja1NwYWNlIElTT19TVUJTUEFDRV9J
TklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBDb2RlQmxvY2spIC8vIEhh
c2g6MHg3N2U2NmVjOQotICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEZ1bmN0aW9uRXhlY3V0
YWJsZSkgLy8gSGFzaDoweDVkMTU4ZjMKLSAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFByb2dy
YW1FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NTI3Yzc3ZTcKLSAgICAsIHVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxI
ZWFwQ2VsbFR5cGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4ZjZiODI4
ZDkKKyAgICAsIGNvZGVCbG9ja1NwYWNlQW5kU2V0IElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBDb2RlQmxvY2spIC8vIEhhc2g6MHg3N2U2NmVj
OQorICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lOSVQo
KnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZSkg
Ly8gSGFzaDoweDVkMTU4ZjMKKyAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFByb2dy
YW1FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NTI3Yzc3ZTcKKyAgICAsIHVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJs
ZUNlbGxIZWFwQ2VsbFR5cGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4
ZjZiODI4ZDkKIAogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKQEAgLTQ0Nyw2ICs0NDgs
OSBAQCBIZWFwOjp+SGVhcCgpCiAgICAgCiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrIDogbV9s
b2dpY2FsbHlFbXB0eVdlYWtCbG9ja3MpCiAgICAgICAgIFdlYWtCbG9jazo6ZGVzdHJveSgqdGhp
cywgYmxvY2spOworCisgICAgZm9yIChhdXRvKiBwZXJWTUlzb1N1YnNwYWNlIDogcGVyVk1Jc29T
dWJzcGFjZXMpCisgICAgICAgIHBlclZNSXNvU3Vic3BhY2UtPnJlbGVhc2VJc29TdWJzcGFjZSgq
dGhpcyk7CiB9CiAKIGJvb2wgSGVhcDo6aXNQYWdlZE91dCgpCkBAIC02OTEsNyArNjk1LDcgQEAg
dm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZQogewogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxG
dW5jdGlvbkV4ZWN1dGFibGU+KGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNwYWNlKTsKKyAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1bmN0aW9uRXhlY3V0YWJsZT4o
ZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc3BhY2UpOwogICAgIGZpbmFsaXplTWFya2Vk
VW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3ltYm9sVGFibGU+KHN5bWJvbFRhYmxlU3BhY2UpOwog
ICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZT4oZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyk7IC8v
IFdlIHJ1biB0aGlzIGJlZm9yZSBDb2RlQmxvY2sncyB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBz
aW5jZSBDb2RlQmxvY2sgbG9va3MgYXQgdGhlIG93bmVyIGV4ZWN1dGFibGUncyBpbnN0YWxsZWQg
Q29kZUJsb2NrIGluIGl0cyBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseS4KICAgICBmb3JFYWNoQ29k
ZUJsb2NrU3BhY2UoCkBAIC02OTksNyArNzAzLDcgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxGaW5hbGl6ZQogICAgICAgICAgICAgdGhpcy0+ZmluYWxpemVNYXJrZWRVbmNvbmRp
dGlvbmFsRmluYWxpemVyczxDb2RlQmxvY2s+KHNwYWNlLnNldCk7CiAgICAgICAgIH0pOwogICAg
IGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3RydWN0dXJlUmFyZURhdGE+
KHN0cnVjdHVyZVJhcmVEYXRhU3BhY2UpOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25h
bEZpbmFsaXplcnM8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3BhY2Uuc2V0KTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZVNwYWNlQW5kU2V0LnNldCk7CiAgICAgaWYgKG1fd2Vha1NldFNwYWNlKQogICAgICAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha1NldD4oKm1fd2Vha1Nl
dFNwYWNlKTsKICAgICBpZiAobV93ZWFrTWFwU3BhY2UpCkBAIC0xMDU4LDcgKzEwNjIsNyBAQCB2
b2lkIEhlYXA6OmRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcyhECiAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fY29sbGVjdGlvblNjb3BlKTsKIAogICAgIEhlYXBJdGVyYXRpb25TY29wZSBoZWFwSXRl
cmF0aW9uU2NvcGUoKnRoaXMpOwotICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uu
c2V0LmZvckVhY2hMaXZlQ2VsbCgKKyAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
QW5kU2V0LnNldC5mb3JFYWNoTGl2ZUNlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGws
IEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4o
Y2VsbCk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGUodm0pOwpAQCAtMzMwMyw0
ICszMzA3LDE5NyBAQCBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCiAK
ICN1bmRlZiBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCiAKKworbmFt
ZXNwYWNlIEdDQ2xpZW50IHsKKworI2RlZmluZSBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3Vi
c3BhY2UpIHN1YnNwYWNlKGhlYXAuc3Vic3BhY2UpCisjZGVmaW5lIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQoc3Vic3BhY2UpIHN1YnNwYWNlKGhlYXAuc3Vic3Bh
Y2UjI0FuZFNldC5zcGFjZSkKKworSGVhcDo6SGVhcChKU0M6OkhlYXAmIGhlYXApCisgICAgOiBt
X3NlcnZlcihoZWFwKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGFycmF5U3BhY2Up
CisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoYmlnSW50U3BhY2UpCisgICAgLCBDTElF
TlRfSVNPX1NVQlNQQUNFX0lOSVQoY2FsbGVlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVQoY2xvbmVkQXJndW1lbnRzU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoZGF0ZUluc3RhbmNlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQo
ZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoZXhjZXB0aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9J
TklUKGZ1bmN0aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZ2V0dGVy
U2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZ2xvYmFsTGV4aWNh
bEVudmlyb25tZW50U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoaW50ZXJu
YWxGdW5jdGlvblNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGpzUHJveHlT
cGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChuYXRpdmVFeGVjdXRhYmxlU3Bh
Y2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobnVtYmVyT2JqZWN0U3BhY2UpCisg
ICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQocGxhaW5PYmplY3RTcGFjZSkKKyAgICAsIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwcm9taXNlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NV
QlNQQUNFX0lOSVQocHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlKQorICAgICwgQ0xJRU5UX0lT
T19TVUJTUEFDRV9JTklUKHByb3BlcnR5VGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVChyZWdFeHBTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChy
ZWdFeHBPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChyb3BlU3Ry
aW5nU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc2NvcGVkQXJndW1lbnRz
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3BhcnNlQXJyYXlWYWx1ZU1h
cFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cmluZ1NwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cmluZ09iamVjdFNwYWNlKQorICAgICwgQ0xJ
RU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cnVjdHVyZUNoYWluU3BhY2UpCisgICAgLCBDTElFTlRf
SVNPX1NVQlNQQUNFX0lOSVQoc3RydWN0dXJlUmFyZURhdGFTcGFjZSkKKyAgICAsIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChzdHJ1Y3R1cmVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChicmFuZGVkU3RydWN0dXJlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoc3ltYm9sVGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9G
Uk9NX1NQQUNFX0FORF9TRVQoY29kZUJsb2NrU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVRfRlJPTV9TUEFDRV9BTkRfU0VUKGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChwcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0Vf
QU5EX1NFVCh1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQoreworfQorCitIZWFwOjp+
SGVhcCgpCit7CisgICAgZm9yIChhdXRvKiBwZXJWTUlzb1N1YnNwYWNlIDogcGVyVk1Jc29TdWJz
cGFjZXMpCisgICAgICAgIHBlclZNSXNvU3Vic3BhY2UtPnJlbGVhc2VDbGllbnRJc29TdWJzcGFj
ZSh2bSgpKTsKK30KKworI3VuZGVmIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVAorI3VuZGVmIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQKKworCisjZGVmaW5lIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhuYW1lKSBcCisgICAgSXNvU3Vi
c3BhY2UqIEhlYXA6Om5hbWUjI1Nsb3coKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghbV8j
I25hbWUpOyBcCisgICAgICAgIExvY2tlciBsb2NrZXIgeyBzZXJ2ZXIoKS5tX2xvY2sgfTsgXAor
ICAgICAgICBKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXJTcGFjZSA9ICpzZXJ2ZXIoKS5uYW1lPFN1
YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ+KCk7IFwKKyAgICAgICAgYXV0byBzcGFjZSA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+KHNlcnZlclNwYWNlKTsgXAorICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOyBcCisgICAgICAgIG1fIyNuYW1lID0gV1RGTW92ZShzcGFjZSk7IFwKKyAg
ICAgICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgfQorCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpR2xvYmFsT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpVmFsdWVXcmFwcGVyU3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXJyYXlCdWZmZXJTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcnJheUl0ZXJhdG9yU3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXN5bmNHZW5lcmF0b3JT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhiaWdJbnQ2NEFy
cmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYmlnSW50
T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYmln
VWludDY0QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyhib29sZWFuT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coYm91bmRGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGNhbGxiYWNrQ29uc3RydWN0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja0dsb2JhbE9iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja09iamVjdFNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGN1c3RvbUdldHRlckZ1
bmN0aW9uU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY3Vz
dG9tU2V0dGVyRnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhkYXRhVmlld1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGRlYnVnZ2VyU2NvcGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhlcnJvckluc3RhbmNlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coZmxvYXQzMkFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coZmxvYXQ2NEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coZnVuY3Rpb25SYXJlRGF0YVNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGdlbmVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGdsb2JhbE9iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGluamVjdGVkU2NyaXB0SG9zdFNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludDhBcnJheVNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludDE2QXJyYXlTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnQzMkFycmF5U3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coamF2YVNjcmlwdENhbGxG
cmFtZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzTW9k
dWxlUmVjb3JkU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
bWFwQnVja2V0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
bWFwSXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhtYXBTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhtb2R1
bGVOYW1lc3BhY2VPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHByb3h5T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cocHJveHlSZXZva2VTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoZXJT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzZXRCdWNrZXRT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzZXRJdGVyYXRv
clNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNldFNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNoYWRvd1JlYWxtU3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3RyaWN0RXZhbEFj
dGl2YXRpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhz
dHJpbmdJdGVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKHNvdXJjZUNvZGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhzeW1ib2xTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhzeW1ib2xPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbENhbGVuZGFyU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxEdXJhdGlvblNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsSW5zdGFudFNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsUGxhaW5UaW1l
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxU
aW1lWm9uZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVp
bnQ4QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1
aW50OENsYW1wZWRBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHVpbnQxNkFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1codWludDMyQXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh1bmxpbmtlZEV2YWxDb2RlQmxvY2tTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyh1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1codW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cod2Vha01hcFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHdlYWtTZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyh3ZWFrT2JqZWN0UmVmU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cod2l0aFNjb3BlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coZmluYWxpemF0aW9uUmVnaXN0cnlTcGFjZSkKKyNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGFw
aVdyYXBwZXJPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQorI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJf
QVBJX0VOQUJMRUQKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlX
cmFwcGVyT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1coanNjQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGNhbGxiYWNrQVBJV3JhcHBlckdsb2JhbE9iamVjdFNwYWNlKQorI2VuZGlm
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bENvbGxhdG9yU3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bERhdGVUaW1l
Rm9ybWF0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50
bERpc3BsYXlOYW1lc1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGludGxMaXN0Rm9ybWF0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coaW50bExvY2FsZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGludGxOdW1iZXJGb3JtYXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhpbnRsUGx1cmFsUnVsZXNTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRJdGVyYXRvclNw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50
ZXJTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2Vn
bWVudHNTcGFjZSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRp
b25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3Nl
bWJseUZ1bmN0aW9uU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1cod2ViQXNzZW1ibHlHbG9iYWxTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNZW1vcnlTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseU1vZHVsZVNwYWNlKQorRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNz
ZW1ibHlUYWJsZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KHdlYkFzc2VtYmx5VGFnU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKKyNlbmRpZgorCisjdW5kZWYg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XCisKKyNkZWZpbmUgRFlOQU1J
Q19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVJfU0xPVyhuYW1lKSBcCisgICAgSXNvU3Vic3Bh
Y2UqIEhlYXA6Om5hbWUjI1Nsb3coKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghbV8jI25h
bWUpOyBcCisgICAgICAgIExvY2tlciBsb2NrZXIgeyBzZXJ2ZXIoKS5tX2xvY2sgfTsgXAorICAg
ICAgICBKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXJTcGFjZSA9ICpzZXJ2ZXIoKS5uYW1lPFN1YnNw
YWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ+KCk7IFwKKyAgICAgICAgYXV0byBzcGFjZSA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+KHNlcnZlclNwYWNlKTsgXAorICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOyBcCisgICAgICAgIG1fIyNuYW1lID0gV1RGTW92ZShzcGFjZSk7IFwKKyAgICAg
ICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgfQorCitEWU5BTUlDX1NQQUNFX0FORF9T
RVRfREVGSU5FX01FTUJFUl9TTE9XKGV2YWxFeGVjdXRhYmxlU3BhY2UpCitEWU5BTUlDX1NQQUNF
X0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XKG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2Up
CisKKyN1bmRlZiBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCisKK30g
Ly8gbmFtZXNwYWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIGNsYXNz
IEhlYXA7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBIZWFwVmVyaWZpZXI7CiBjbGFzcyBJ
bmNyZW1lbnRhbFN3ZWVwZXI7CitjbGFzcyBJc29TdWJzcGFjZVBlclZNOwogY2xhc3MgSklUU3R1
YlJvdXRpbmU7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKQEAgLTEw
NiwxMCArMTA3LDE0IEBAIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiB9
CiAKK25hbWVzcGFjZSBHQ0NsaWVudCB7CitjbGFzcyBIZWFwOworfQorCiB0eXBlZGVmIEhhc2hD
b3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsKIHR5cGVkZWYgSGFzaENvdW50ZWRT
ZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNldDsKIAotZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVh
cCwgTGFyZ2VIZWFwIH07CitlbnVtIGNsYXNzIEhlYXBUeXBlIDogdWludDhfdCB7IFNtYWxsLCBM
YXJnZSB9OwogCiBjbGFzcyBIZWFwVXRpbDsKIApAQCAtMzg5LDYgKzM5NCw4IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNNYXJraW5nRm9yR0NWZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNN
YXJraW5nRm9yR0NWZXJpZmllcjsgfQogCisgICAgTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9j
azsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CiAgICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTQyMCw2ICs0MjcsOCBAQCBwcml2YXRlOgogICAg
IGNsYXNzIEhlYXBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBUaHJlYWQ7CiAKKyAgICBm
cmllbmQgY2xhc3MgR0NDbGllbnQ6OkhlYXA7CisKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBtaW5FeHRyYU1lbW9yeSA9IDI1NjsKICAgICAKICAgICBjbGFzcyBDRmluYWxpemVyT3duZXIg
ZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKQEAgLTU3MCw2ICs1NzksNyBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgdmVyaWZ5R0MoKTsKIAorICAgIExvY2sgbV9sb2NrOwogICAg
IGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0YXRvclN0
YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6
ZTsKQEAgLTg3Myw3ICs4ODMsNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNv
U3Vic3BhY2UqIG5hbWUjI1Nsb3coKTsgXAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4gbV8jI25hbWU7CiAKLQogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCiAgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNl
KQpAQCAtMTAxNywzNSArMTAyNiwyMTYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKICAg
ICAKLSAgICBTcGFjZUFuZFNldCBjb2RlQmxvY2tTcGFjZTsKKyAgICBTcGFjZUFuZFNldCBjb2Rl
QmxvY2tTcGFjZUFuZFNldDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBmb3JFYWNoQ29kZUJsb2NrU3BhY2UoY29uc3QgRnVuYyYgZnVuYykKICAgICB7CiAgICAgICAg
IC8vIFRoaXMgc2hvdWxkIG5vdCBpbmNsdWRlIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UgYmVj
YXVzZSB0aGlzIGlzIGFib3V0IHN1YnNjbGFzc2VzIG9mCiAgICAgICAgIC8vIEpTQzo6Q29kZUJs
b2NrLgotICAgICAgICBmdW5jKGNvZGVCbG9ja1NwYWNlKTsKKyAgICAgICAgZnVuYyhjb2RlQmxv
Y2tTcGFjZUFuZFNldCk7CiAgICAgfQogCiAgICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklO
RV9NRU1CRVIoZXZhbEV4ZWN1dGFibGVTcGFjZSkKICAgICBEWU5BTUlDX1NQQUNFX0FORF9TRVRf
REVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQotICAgIFNwYWNlQW5k
U2V0IGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOwotICAgIFNwYWNlQW5kU2V0IHByb2dyYW1FeGVj
dXRhYmxlU3BhY2U7CisgICAgU3BhY2VBbmRTZXQgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRT
ZXQ7CisgICAgU3BhY2VBbmRTZXQgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZUFuZFNldDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2NyaXB0RXhlY3V0YWJs
ZVNwYWNlKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewogICAgICAgICBpZiAobV9ldmFsRXhlY3V0
YWJsZVNwYWNlKQogICAgICAgICAgICAgZnVuYygqbV9ldmFsRXhlY3V0YWJsZVNwYWNlKTsKLSAg
ICAgICAgZnVuYyhmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSk7CisgICAgICAgIGZ1bmMoZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2VBbmRTZXQpOwogICAgICAgICBpZiAobV9tb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlKQogICAgICAgICAgICAgZnVuYygqbV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZVNwYWNlKTsKLSAgICAgICAgZnVuYyhwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKTsKKyAgICAgICAg
ZnVuYyhwcm9ncmFtRXhlY3V0YWJsZVNwYWNlQW5kU2V0KTsKICAgICB9CiAKLSAgICBTcGFjZUFu
ZFNldCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIFNwYWNlQW5kU2V0IHVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQ7CiAKKyAgICBWZWN0b3I8SXNvU3Vi
c3BhY2VQZXJWTSo+IHBlclZNSXNvU3Vic3BhY2VzOwogI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5E
X1NFVF9ERUZJTkVfTUVNQkVSCiB9OwogCituYW1lc3BhY2UgR0NDbGllbnQgeworCitjbGFzcyBI
ZWFwIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwKTsKK3B1YmxpYzoKKyAgICBIZWFw
KEpTQzo6SGVhcCYpOworICAgIH5IZWFwKCk7CisKKyAgICBWTSYgdm0oKSBjb25zdDsKKyAgICBK
U0M6OkhlYXAmIHNlcnZlcigpIHsgcmV0dXJuIG1fc2VydmVyOyB9CisKK3ByaXZhdGU6CisgICAg
SlNDOjpIZWFwJiBtX3NlcnZlcjsKKworICAgIElzb1N1YnNwYWNlIGFycmF5U3BhY2U7CisgICAg
SXNvU3Vic3BhY2UgYmlnSW50U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgY2FsbGVlU3BhY2U7Cisg
ICAgSXNvU3Vic3BhY2UgY2xvbmVkQXJndW1lbnRzU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgY3Vz
dG9tR2V0dGVyU2V0dGVyU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZGF0ZUluc3RhbmNlU3BhY2U7
CisgICAgSXNvU3Vic3BhY2UgZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2U7CisgICAgSXNv
U3Vic3BhY2UgZXhjZXB0aW9uU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uU3BhY2U7CisgICAgSXNv
U3Vic3BhY2UgZ2V0dGVyU2V0dGVyU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZ2xvYmFsTGV4aWNh
bEVudmlyb25tZW50U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgaW50ZXJuYWxGdW5jdGlvblNwYWNl
OworICAgIElzb1N1YnNwYWNlIGpzUHJveHlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBuYXRpdmVF
eGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbnVtYmVyT2JqZWN0U3BhY2U7CisgICAg
SXNvU3Vic3BhY2UgcGxhaW5PYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwcm9taXNlU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2UgcHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOworICAgIElz
b1N1YnNwYWNlIHByb3BlcnR5VGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSByZWdFeHBTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSByZWdFeHBPYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBy
b3BlU3RyaW5nU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc2NvcGVkQXJndW1lbnRzU3BhY2U7Cisg
ICAgSXNvU3Vic3BhY2Ugc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOworICAgIElzb1N1YnNwYWNl
IHN0cmluZ1NwYWNlOworICAgIElzb1N1YnNwYWNlIHN0cmluZ09iamVjdFNwYWNlOworICAgIElz
b1N1YnNwYWNlIHN0cnVjdHVyZUNoYWluU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RydWN0dXJl
UmFyZURhdGFTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzdHJ1Y3R1cmVTcGFjZTsKKyAgICBJc29T
dWJzcGFjZSBicmFuZGVkU3RydWN0dXJlU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3ltYm9sVGFi
bGVTcGFjZTsKKworI2RlZmluZSBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5h
bWUpIFwKKyAgICB0ZW1wbGF0ZTxTdWJzcGFjZUFjY2VzcyBtb2RlPiBcCisgICAgSXNvU3Vic3Bh
Y2UqIG5hbWUoKSBcCisgICAgeyBcCisgICAgICAgIGlmIChtXyMjbmFtZSB8fCBtb2RlID09IFN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpIFwKKyAgICAgICAgICAgIHJldHVybiBtXyMjbmFt
ZS5nZXQoKTsgXAorICAgICAgICByZXR1cm4gbmFtZSMjU2xvdygpOyBcCisgICAgfSBcCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UqIG5hbWUjI1Nsb3coKTsgXAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV8jI25hbWU7CisKKyNpZiBKU0NfT0JKQ19BUElfRU5B
QkxFRAorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXBpV3JhcHBlck9i
amVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25TcGFjZSkKKyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVE
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc2NDYWxsYmFj
a0Z1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihj
YWxsYmFja0FQSVdyYXBwZXJHbG9iYWxPYmplY3RTcGFjZSkKKyNlbmRpZgorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXBpR2xvYmFsT2JqZWN0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlWYWx1ZVdyYXBwZXJTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFycmF5QnVmZmVyU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcnJheUl0ZXJhdG9yU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhc3luY0dlbmVyYXRvclNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50NjRBcnJh
eVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50T2Jq
ZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdVaW50
NjRBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYm9v
bGVhbk9iamVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
Ym91bmRGdW5jdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoY2FsbGJhY2tDb25zdHJ1Y3RvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoY2FsbGJhY2tHbG9iYWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrT2JqZWN0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY3VzdG9tU2V0dGVyRnVu
Y3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGRhdGFW
aWV3U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihkZWJ1Z2dl
clNjb3BlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihlcnJv
ckluc3RhbmNlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihm
bG9hdDMyQXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KGZsb2F0NjRBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoZnVuY3Rpb25SYXJlRGF0YVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoZ2VuZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihnbG9iYWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKGluamVjdGVkU2NyaXB0SG9zdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoaW50OEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnQxNkFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnQzMkFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc01vZHVsZVJlY29yZFNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobWFwQnVja2V0U3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtYXBJdGVyYXRvclNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVOYW1lc3BhY2VPYmplY3RTcGFjZSkKKyAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50
c1RhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3Jp
cHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHNldEJ1Y2tldFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoc2V0SXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHNldFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc2hhZG93UmVhbG1TcGFjZSk7CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihzdHJpY3RFdmFsQWN0aXZhdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoc3RyaW5nSXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHNvdXJjZUNvZGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHN5bWJvbFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoc3ltYm9sT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUih0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsQ2FsZW5kYXJTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsRHVyYXRpb25TcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsSW5zdGFu
dFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxQ
bGFpblRpbWVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRl
bXBvcmFsVGltZVpvbmVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHVpbnQ4QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHVpbnQ4Q2xhbXBlZEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih1aW50MTZBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIodWludDMyQXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHVubGlua2VkRXZhbENvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1NwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Uih1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGZpbmFsaXphdGlvblJlZ2lzdHJ5U3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWFrT2JqZWN0UmVmU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWFrU2V0U3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWFrTWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUih3aXRoU2NvcGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxDb2xsYXRvclNwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bERhdGVUaW1lRm9ybWF0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsRGlzcGxheU5hbWVzU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsTGlzdEZvcm1hdFNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bExvY2FsZVNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bE51bWJlckZvcm1h
dFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFBsdXJh
bFJ1bGVzU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRs
UmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihpbnRsU2VnbWVudEl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudGVyU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudHNTcGFjZSkKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlD
Q2FsbGVlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJB
c3NlbWJseUNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1lbW9y
eVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlNb2R1bGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKKyNl
bmRpZgorCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihldmFsRXhlY3V0
YWJsZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKKworI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIKKworICAgIElzb1N1YnNwYWNlIGNvZGVCbG9ja1NwYWNlOworICAgIElzb1N1
YnNwYWNlIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIHByb2dyYW1F
eGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGVTcGFjZTsKKworLy8gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4+IGlz
b1N1YnNwYWNlc05lZWRpbmdEZXN0cnVjdGlvbjsKK3B1YmxpYzoKKyAgICBWZWN0b3I8SXNvU3Vi
c3BhY2VQZXJWTSo+IHBlclZNSXNvU3Vic3BhY2VzOworCisgICAgZnJpZW5kIGNsYXNzIEpTQzo6
Vk07Cit9OworCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcwLDQgKzI3MCwxMyBAQCB2b2lkIEhlYXA6OmZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jCiAgICAgICAgIGZ1bmMoKnZpc2l0b3IpOwogfQogCituYW1lc3BhY2Ug
R0NDbGllbnQgeworCitBTFdBWVNfSU5MSU5FIFZNJiBIZWFwOjp2bSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICpiaXR3aXNlX2Nhc3Q8Vk0qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzKSAt
IE9CSkVDVF9PRkZTRVRPRihWTSwgY2xpZW50SGVhcCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBH
Q0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIElzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxsVHlwZSYgaGVhcENlbGxUeXBlLCBzaXpl
X3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9wdHI8
SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4mJiBhbGxvY2F0b3IpCiAgICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwKQogICAgICwgbV9kaXJlY3RvcnkoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtl
ZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkpCi0gICAgLCBtX2xvY2FsQWxsb2NhdG9yKCZtX2RpcmVj
dG9yeSkKICAgICAsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGxvY2F0b3IgPyBXVEZN
b3ZlKGFsbG9jYXRvcikgOiBtYWtlVW5pcXVlPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KG5h
bWUpKQogewogICAgIG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50ID0gbnVtYmVyT2ZMb3dl
clRpZXJDZWxsczsKQEAgLTU2LDE2ICs1NSw2IEBAIElzb1N1YnNwYWNlOjp+SXNvU3Vic3BhY2Uo
KQogewogfQogCi1BbGxvY2F0b3IgSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQotewotICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIG1vZGUpOwotfQotCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoVk0m
IHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIHJldHVybiBhbGxvY2F0ZU5v
blZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwotfQotCiB2
b2lkIElzb1N1YnNwYWNlOjpkaWRSZXNpemVCaXRzKHVuc2lnbmVkIGJsb2NrSW5kZXgpCiB7CiAg
ICAgbV9jZWxsU2V0cy5mb3JFYWNoKApAQCAtMTI5LDUgKzExOCwxNCBAQCB2b2lkIElzb1N1YnNw
YWNlOjpkZXN0cm95TG93ZXJUaWVyRnJlZUxpCiAgICAgfSk7CiB9CiAKK25hbWVzcGFjZSBHQ0Ns
aWVudCB7CisKK0lzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2
ZXIpCisgICAgOiBtX2xvY2FsQWxsb2NhdG9yKCZzZXJ2ZXIubV9kaXJlY3RvcnkpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJc29DZWxsU2V0
OwogCituYW1lc3BhY2UgR0NDbGllbnQgeworY2xhc3MgSXNvU3Vic3BhY2U7Cit9CisKIGNsYXNz
IElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBjb25zdCBIZWFwQ2VsbFR5
cGUmLCBzaXplX3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVu
aXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4mJiA9IG51bGxwdHIpOwpAQCAtNDIsMTIg
KzQ2LDYgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4gbV9kaXJl
Y3RvcnkuY2VsbFNpemUoKTsgfQogCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7Ci0KLSAgICB2b2lkKiBhbGxvY2F0
ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
IG92ZXJyaWRlOwotICAgIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotCiAgICAgdm9pZCBzd2Vl
cExvd2VyVGllckNlbGwoUHJlY2lzZUFsbG9jYXRpb24qKTsKICAgICB2b2lkIGNsZWFySXNvQ2Vs
bFNldEJpdChQcmVjaXNlQWxsb2NhdGlvbiopOwogCkBAIC02MCwyNCArNTgsNTUgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIGZyaWVuZCBj
bGFzcyBHQ0NsaWVudDo6SXNvU3Vic3BhY2U7CiAgICAgCiAgICAgdm9pZCBkaWRSZXNpemVCaXRz
KHVuc2lnbmVkIG5ld1NpemUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2sodW5z
aWduZWQgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9G
cmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgCisKKyAgICBzdGF0
aWMgSXNvU3Vic3BhY2UmIGZyb21CbG9ja0RpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSYpOworCiAg
ICAgQmxvY2tEaXJlY3RvcnkgbV9kaXJlY3Rvcnk7Ci0gICAgTG9jYWxBbGxvY2F0b3IgbV9sb2Nh
bEFsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4g
bV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQcmVj
aXNlQWxsb2NhdGlvbiwgUGFja2VkUmF3U2VudGluZWxOb2RlPFByZWNpc2VBbGxvY2F0aW9uPj4g
bV9sb3dlclRpZXJGcmVlTGlzdDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwg
UGFja2VkUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+PiBtX2NlbGxTZXRzOwogfTsKIAorQUxX
QVlTX0lOTElORSBJc29TdWJzcGFjZSYgSXNvU3Vic3BhY2U6OmZyb21CbG9ja0RpcmVjdG9yeShC
bG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PElz
b1N1YnNwYWNlKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmRpcmVjdG9yeSkgLSBPQkpFQ1Rf
T0ZGU0VUT0YoSXNvU3Vic3BhY2UsIG1fZGlyZWN0b3J5KSk7Cit9CisKK25hbWVzcGFjZSBHQ0Ns
aWVudCB7CisKK2NsYXNzIElzb1N1YnNwYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
c29TdWJzcGFjZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoSlNDOjpJc29TdWJzcGFjZSYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5Jc29TdWJzcGFjZSgpID0gZGVmYXVsdDsKKyAgICAvLyBtbGFtIEZJ
WE1FIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcmVsaW5xdWlzaCB0aGUgTG9jYWxBbGxvY2F0
b3IgdG8gdGhlIHNlcnZlciBvbiBkZXN0cnVjdGlvbi4KKworICAgIHNpemVfdCBjZWxsU2l6ZSgp
IHsgcmV0dXJuIG1fbG9jYWxBbGxvY2F0b3IuY2VsbFNpemUoKTsgfQorCisgICAgQWxsb2NhdG9y
IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKworICAg
IHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQq
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCisgICAgSlNDOjpJc29TdWJzcGFjZSYgc2VydmVy
KCk7CisKK3ByaXZhdGU6CisgICAgTG9jYWxBbGxvY2F0b3IgbV9sb2NhbEFsbG9jYXRvcjsKK307
CisKIEFMV0FZU19JTkxJTkUgQWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUp
ID09IGNlbGxTaXplKCkpOwogICAgIHJldHVybiBBbGxvY2F0b3IoJm1fbG9jYWxBbGxvY2F0b3Ip
OwogfQogCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiAjZGVmaW5lIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXBDZWxsVHlwZSwgdHlwZSkgKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2Ui
LCAoaGVhcCksIChoZWFwQ2VsbFR5cGUpLCBzaXplb2YodHlwZSksIHR5cGU6Om51bWJlck9mTG93
ZXJUaWVyQ2VsbHMpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVz
cGFjZSBHQ0NsaWVudCB7CisKIEFMV0FZU19JTkxJTkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9j
YXRlTm9uVmlydHVhbChWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9t
U2l6ZT4oc2l6ZSkgPT0gY2VsbFNpemUoKSk7CkBAIC0zNSw2ICszNyw4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit9
IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiBpbmxpbmUgdm9pZCBJc29TdWJzcGFjZTo6Y2xlYXJJ
c29DZWxsU2V0Qml0KFByZWNpc2VBbGxvY2F0aW9uKiBwcmVjaXNlQWxsb2NhdGlvbikKIHsKICAg
ICB1bnNpZ25lZCBsb3dlclRpZXJJbmRleCA9IHByZWNpc2VBbGxvY2F0aW9uLT5sb3dlclRpZXJJ
bmRleCgpOwpAQCAtNjAsNSArNjQsMTUgQEAgdm9pZCBJc29TdWJzcGFjZTo6Zm9yRWFjaExvd2Vy
VGllckZyZWVMaQogICAgIG1fbG93ZXJUaWVyRnJlZUxpc3QuZm9yRWFjaChmdW5jKTsKIH0KIAor
bmFtZXNwYWNlIEdDQ2xpZW50IHsKKworLy8gbWxhbSBGSVhNRSBkbyB3ZSBuZWVkIHRoaXM/IERl
bGV0ZSBpZiBub3QgdXNlZC4KK2lubGluZSBKU0M6Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZTo6
c2VydmVyKCkKK3sKKyAgICByZXR1cm4gSlNDOjpJc29TdWJzcGFjZTo6ZnJvbUJsb2NrRGlyZWN0
b3J5KG1fbG9jYWxBbGxvY2F0b3IuZGlyZWN0b3J5KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBH
Q0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwyNSArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSXNv
U3Vic3BhY2VQZXJWTTo6QXV0b3JlbW92aW5nSXNvU3Vic3BhY2UgZmluYWwgOiBwdWJsaWMgSXNv
U3Vic3BhY2UgewotcHVibGljOgotICAgIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKElzb1N1YnNw
YWNlUGVyVk0mIHBlclZNLCBDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxs
VHlwZSYgaGVhcENlbGxUeXBlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBJc29TdWJzcGFjZShu
YW1lLCBoZWFwLCBoZWFwQ2VsbFR5cGUsIHNpemUsIC8qIG51bWJlck9mTG93ZXJUaWVyQ2VsbHMg
Ki8gMCkKLSAgICAgICAgLCBtX3BlclZNKHBlclZNKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
fkF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyBtX3BlclZNLm1fbG9jayB9OwotICAgICAgICBtX3BlclZNLm1fc3Vic3BhY2VQZXJW
TS5yZW1vdmUoJnNwYWNlKCkuaGVhcCgpLnZtKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJ
c29TdWJzcGFjZVBlclZNJiBtX3BlclZNOwotfTsKLQotSXNvU3Vic3BhY2VQZXJWTTo6SXNvU3Vi
c3BhY2VQZXJWTShGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoVk0mKT4gc3Vic3BhY2VQYXJh
bWV0ZXJzKQorSXNvU3Vic3BhY2VQZXJWTTo6SXNvU3Vic3BhY2VQZXJWTShGdW5jdGlvbjxTdWJz
cGFjZVBhcmFtZXRlcnMoSGVhcCYpPiBzdWJzcGFjZVBhcmFtZXRlcnMpCiAgICAgOiBtX3N1YnNw
YWNlUGFyYW1ldGVycyhXVEZNb3ZlKHN1YnNwYWNlUGFyYW1ldGVycykpCiB7CiB9CkBAIC01OSwx
NiArNDEsNTkgQEAgSXNvU3Vic3BhY2VQZXJWTTo6fklzb1N1YnNwYWNlUGVyVk0oKQogICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQogCi1Jc29TdWJzcGFjZSYgSXNvU3Vic3BhY2VQ
ZXJWTTo6Zm9yVk0oVk0mIHZtKQorSXNvU3Vic3BhY2UmIElzb1N1YnNwYWNlUGVyVk06Omlzb1N1
YnNwYWNlZm9ySGVhcChIZWFwJiBoZWFwKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sg
fTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc3Vic3BhY2VQZXJIZWFwLmFkZCgmaGVhcCwgbnVsbHB0
cik7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIFN1YnNwYWNlUGFyYW1l
dGVycyBwYXJhbXMgPSBtX3N1YnNwYWNlUGFyYW1ldGVycyhoZWFwKTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBJc29TdWJzcGFjZShwYXJhbXMubmFtZSwgaGVhcCwgKnBh
cmFtcy5oZWFwQ2VsbFR5cGUsIHBhcmFtcy5zaXplLCAwKTsKKworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcC5sb2NrKCkgfTsKKyAgICAgICAgaGVhcC5wZXJWTUlzb1N1YnNwYWNlcy5hcHBl
bmQodGhpcyk7CisgICAgfQorICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30K
KworR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZVBlclZNOjpjbGllbnRJc29TdWJz
cGFjZWZvclZNKFZNJiB2bSkKIHsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xv
Y2sgfTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2NsaWVudFN1YnNwYWNlUGVyVk0uYWRkKCZ2
bSwgbnVsbHB0cik7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAg
ICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgSXNvU3Vic3Bh
Y2UmIHN1YnNwYWNlID0gaXNvU3Vic3BhY2Vmb3JIZWFwKHZtLmhlYXApOworCiAgICAgTG9ja2Vy
IGxvY2tlciB7IG1fbG9jayB9OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zdWJzcGFjZVBlclZNLmFk
ZCgmdm0sIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gbV9jbGllbnRTdWJzcGFjZVBlclZN
LmFkZCgmdm0sIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICBTdWJzcGFjZVBhcmFtZXRlcnMgcGFyYW1zID0gbV9zdWJzcGFjZVBhcmFtZXRlcnModm0pOwot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IEF1dG9yZW1vdmluZ0lzb1N1YnNw
YWNlKCp0aGlzLCBwYXJhbXMubmFtZSwgdm0uaGVhcCwgKnBhcmFtcy5oZWFwQ2VsbFR5cGUsIHBh
cmFtcy5zaXplKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2Uoc3Vic3BhY2UpOworICAgICAgICB2bS5jbGllbnRIZWFwLnBlclZNSXNv
U3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuICpyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogfQogCit2b2lkIElzb1N1YnNwYWNlUGVyVk06OnJlbGVhc2VJc29TdWJzcGFj
ZShIZWFwJiBoZWFwKQoreworICAgIElzb1N1YnNwYWNlKiBzdWJzcGFjZTsKKyAgICB7CisgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgc3Vic3BhY2UgPSBtX3N1YnNw
YWNlUGVySGVhcC50YWtlKCZoZWFwKTsKKyAgICB9CisgICAgZGVsZXRlIHN1YnNwYWNlOworfQor
Cit2b2lkIElzb1N1YnNwYWNlUGVyVk06OnJlbGVhc2VDbGllbnRJc29TdWJzcGFjZShWTSYgdm0p
Cit7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBjbGllbnRTdWJzcGFjZTsKKyAgICB7Cisg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgY2xpZW50U3Vic3BhY2Ug
PSBtX2NsaWVudFN1YnNwYWNlUGVyVk0udGFrZSgmdm0pOworICAgIH0KKyAgICBkZWxldGUgY2xp
ZW50U3Vic3BhY2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhl
YXA7CitjbGFzcyBWTTsKKwogLy8gVGhpcyBpcyBhbiBhcHByb3ByaWF0ZSB3YXkgdG8gc3Rhc2gg
SXNvU3Vic3BhY2VzIGZvciByYXJlbHktdXNlZCBjbGFzc2VzIG9yIGNsYXNzZXMgdGhhdCBhcmUg
bW9zdGx5CiAvLyBzdXJlIHRvIGJlIG1haW4tdGhyZWFkLW9ubHkuIEJ1dCBpZiBhIGNsYXNzIHR5
cGljYWxseSBnZXRzIGluc3RhbnRpYXRlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQKIC8vIG9u
Y2UsIHRoZW4gdGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgY29uY3VycmVudCBhbGxvY2F0aW9u
cyB3aWxsIHByb2JhYmx5IGNvbnRlbmQgb24gdGhpcyB0aGluZydzCkBAIC01MywxOCArNTYsMjAg
QEAgcHVibGljOgogICAgICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKICAgICB9OwogICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlUGVyVk0oRnVuY3Rpb248U3Vic3BhY2VQYXJh
bWV0ZXJzKFZNJik+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZVBlclZNKEZ1
bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhIZWFwJik+KTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB+SXNvU3Vic3BhY2VQZXJWTSgpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1
YnNwYWNlJiBmb3JWTShWTSYpOworICAgIElzb1N1YnNwYWNlJiBpc29TdWJzcGFjZWZvckhlYXAo
SGVhcCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY2xp
ZW50SXNvU3Vic3BhY2Vmb3JWTShWTSYpOwogCi1wcml2YXRlOgotICAgIGNsYXNzIEF1dG9yZW1v
dmluZ0lzb1N1YnNwYWNlOwotICAgIGZyaWVuZCBjbGFzcyBBdXRvcmVtb3ZpbmdJc29TdWJzcGFj
ZTsKKyAgICB2b2lkIHJlbGVhc2VJc29TdWJzcGFjZShIZWFwJik7CisgICAgdm9pZCByZWxlYXNl
Q2xpZW50SXNvU3Vic3BhY2UoVk0mKTsKIAorcHJpdmF0ZToKICAgICBMb2NrIG1fbG9jazsKLSAg
ICBIYXNoTWFwPFZNKiwgSXNvU3Vic3BhY2UqPiBtX3N1YnNwYWNlUGVyVk0gV1RGX0dVQVJERURf
QllfTE9DSyhtX2xvY2spOwotICAgIEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhWTSYpPiBt
X3N1YnNwYWNlUGFyYW1ldGVyczsKKyAgICBIYXNoTWFwPEhlYXAqLCBJc29TdWJzcGFjZSo+IG1f
c3Vic3BhY2VQZXJIZWFwIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBIYXNoTWFw
PFZNKiwgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKj4gbV9jbGllbnRTdWJzcGFjZVBlclZNIFdURl9H
VUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMo
SGVhcCYpPiBtX3N1YnNwYWNlUGFyYW1ldGVyczsKIH07CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNF
X1BBUkFNRVRFUlMoaGVhcENlbGxUeXBlLCB0eXBlKSA6OkpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6
U3Vic3BhY2VQYXJhbWV0ZXJzKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcENlbGxU
eXBlKSwgc2l6ZW9mKHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9j
YWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiAr
MTM0LDkgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoSAogICAgIGlm
IChMSUtFTFkocmVzdWx0ICE9IG51bGxwdHIpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCisg
ICAgLy8gbWxhbSBGSVhNRSBJIHRoaW5rIHdlIG5lZWQgdG8gc3luY2hyb25pemUgaGVyZSB0byBw
cmV2ZW50IGRpZmZlcmVudCBWTQorICAgIC8vIG1haW4gdGhyZWFkcyBmcm9tIHJhY2luZy4KKwog
ICAgIFN1YnNwYWNlKiBzdWJzcGFjZSA9IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlOwogICAgIGlm
IChzdWJzcGFjZS0+aXNJc29TdWJzcGFjZSgpKSB7CiAgICAgICAgIGlmICh2b2lkKiByZXN1bHQg
PSBzdGF0aWNfY2FzdDxJc29TdWJzcGFjZSo+KHN1YnNwYWNlKS0+dHJ5QWxsb2NhdGVGcm9tTG93
ZXJUaWVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgTG9j
YWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNSYXdTZQogICAgIAogcHVibGljOgogICAgIExvY2Fs
QWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7Ci0gICAgfkxvY2FsQWxsb2NhdG9yKCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkxvY2FsQWxsb2NhdG9yKCk7CiAgICAgCiAgICAgdm9pZCogYWxs
b2NhdGUoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsK
ICAgICAKQEAgLTU2LDcgKzU2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDZWxsU2l6ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2
b2lkKikgY29uc3Q7Ci0gICAgCisKKyAgICBCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gKm1fZGlyZWN0b3J5OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEJsb2NrRGlyZWN0b3J5OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TXV0YXRvclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TXV0YXRvclN0YXRlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL011dGF0b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLWVudW0gY2xhc3MgTXV0YXRvclN0YXRlIHsKK2VudW0gY2xhc3MgTXV0
YXRvclN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gVGhlIG11dGF0b3IgaXMgcnVubmluZyB3aGVu
IGl0J3Mgbm90IGluc2lkZSBhIEhlYXAgc2xvdyBwYXRoLgogICAgIFJ1bm5pbmcsCiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDkgKzU2LDYgQEAgcHVibGljOgogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7
CiAKLSAgICB2aXJ0dWFsIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JG
b3JNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKLSAgICAKICAgICB2
b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCiAgICAgdm9pZCBkaWRDcmVhdGVGaXJz
dERpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSB7IG1fZGlyZWN0b3J5Rm9yRW1w
dHlBbGxvY2F0aW9uID0gZGlyZWN0b3J5OyB9CkBAIC0xMTUsMTMgKzExMiwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZmlyc3REaXJlY3RvcnkgeyBudWxscHRyIH07CiAg
ICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0
ciB9OyAvLyBVc2VzIHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCiAgICAg
U2VudGluZWxMaW5rZWRMaXN0PFByZWNpc2VBbGxvY2F0aW9uLCBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8UHJlY2lzZUFsbG9jYXRpb24+PiBtX3ByZWNpc2VBbGxvY2F0aW9uczsKLSAgICBTdWJzcGFj
ZSogbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07Ci0K
LSAgICBDU3RyaW5nIG1fbmFtZTsKIAogICAgIGJvb2wgbV9pc0lzb1N1YnNwYWNlIHsgZmFsc2Ug
fTsKLXByb3RlY3RlZDoKICAgICB1aW50OF90IG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50
IHsgMCB9OworCisgICAgU3Vic3BhY2UqIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yIHsgbnVsbHB0ciB9OworCisgICAgQ1N0cmluZyBtX25hbWU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS5pbmplY3RlZFNjcmlwdEhvc3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uamF2YVNj
cmlwdENhbGxGcmFtZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBK
U0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BZ2dyZWdhdGVFcnJvclByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FnZ3JlZ2F0ZUVycm9yUHJvdG90
eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBFcnJvclByb3RvdHlwZUJhc2U7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
SXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90
b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5j
dGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVy
YXRvckZ1bmN0aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0dl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3lu
Y0dlbmVyYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5
bmNHZW5lcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jSXRl
cmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXRvbWljc09iamVjdCwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLmJpZ0ludE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0lu
dFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEJpZ0ludFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmJvb2xlYW5P
YmplY3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CcmFuZGVkU3RydWN0dXJlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBCcmFuZGVkU3RydWN0dXJlIGZpbmFsIDogcHVi
bGljIFN0CiBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuICZ2bS5icmFuZGVkU3RydWN0dXJlU3BhY2UoKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xv
bmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93
blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghQ2Vs
bFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5jbG9uZWRB
cmd1bWVudHNTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnNvbGVPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShDb25zb2xlT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEN1c3RvbVNl
dHRlciA9IFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uY3VzdG9tR2V0dGVy
U2V0dGVyU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9ET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9ET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVy
U2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBDdXN0b21HZXR0ZXJTZXR0ZXI7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5kb21BdHRyaWJ1dGVHZXR0ZXJT
ZXR0ZXJTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVJbnN0YW5jZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5kYXRlSW5zdGFuY2VTcGFjZSgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShEYXRlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5lcnJvckluc3RhbmNlU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoRXJyb3JQcm90b3R5cGVCYXNlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5ldmFsRXhlY3V0YWJs
ZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gJnZtLmV4Y2VwdGlvblNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaW5hbGl6YXRpb25SZWdpc3Ry
eVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GaW5hbGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShGaW5hbGl6YXRpb25SZWdpc3RyeVBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVybiAmdm0uZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5mdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUq
IGNyZWF0ZShWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5r
ZWRFeGVjdXRhYmxlLCBJbnRyaW5zaWMgaW50cmluc2ljLCBib29sIGlzSW5zaWRlT3JkaW5hcnlG
dW5jdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLmZ1bmN0aW9uUmFyZURhdGFTcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoR2VuZXJhdG9yRnVu
Y3Rpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
YXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShHZW5lcmF0b3JQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
JnZtLmdldHRlclNldHRlclNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsg
Ly8gVGhpcyBpcyBuZXZlciBhY2Nlc3NlZCBkaXJlY3RseSwgc2luY2UgdGhhdCB3b3VsZCBicmVh
ayBsaW5rYWdlIG9uIHNvbWUgY29tcGlsZXJzLgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChUeXBlID09IEhhc2hU
YWJsZVR5cGU6OktleSkKICAgICAgICAgICAgIHJldHVybiB2bS5zZXRCdWNrZXRTcGFjZTxtb2Rl
PigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBJbXBsZW1lbnRz
RGVmYXVsdEhhc0luc3RhbmNlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoQ2VsbFR5cGUpID09IHNpemVvZihJbnRlcm5hbEZ1bmN0aW9uKSwgIkludGVybmFsRnVuY3Rp
b24gc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVycmlkZSBzdWJzcGFjZUZv
cjw+KCkiKTsKICAgICAgICAgcmV0dXJuICZ2bS5pbnRlcm5hbEZ1bmN0aW9uU3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZp
c2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLmludGxDb2xsYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEludGxDb2xsYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
aW50bERhdGVUaW1lRm9ybWF0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bERhdGVUaW1lRm9ybWF0UHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGlzcGxheU5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5pbnRsRGlzcGxheU5hbWVzU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lc1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bERpc3BsYXlOYW1l
c1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1h
dC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uaW50bExpc3RGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RG
b3JtYXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJs
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsTGlzdEZvcm1hdFByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50
bExvY2FsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKElu
dGxMb2NhbGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2
NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bE51bWJlckZvcm1hdFNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShJbnRsT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsUGx1cmFsUnVsZXNTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShJbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LmludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRp
dmVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsU2VnbWVu
dEl0ZXJhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0uaW50bFNlZ21lbnRlclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJQcm90b3R5cGUuaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEludGxTZWdtZW50ZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICBy
ZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxTZWdtZW50c1NwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRzUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRzUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50c1Byb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxTZWdt
ZW50c1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRv
clByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0u
YXJyYXlTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmFycmF5QnVmZmVyU3BhY2U8
bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hcnJheUl0ZXJhdG9yU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3lu
Y0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hc3luY0dlbmVyYXRvclNwYWNlPG1vZGU+KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiAmdm0uYmlnSW50U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHN0YXRp
Y19hc3NlcnQoU3RydWN0dXJlRmxhZ3MgJiBJbXBsZW1lbnRzSGFzSW5zdGFuY2UsICIiKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS5ib3VuZEZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5j
ZSB8IEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5jYWxsZWVTcGFjZSgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5jdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLmN1c3RvbVNldHRlckZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lv
biAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgVHlwZWRBcnJheUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gVHlwZWRBcnJheUNvbnRl
bnRUeXBlOjpOb25lOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmRhdGFWaWV3U3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1By
b3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNEYXRhVmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6
YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uZmluYWxpemF0aW9uUmVnaXN0cnlTcGFjZTxtb2RlPigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgcmFyZURhdGFUYWcgPSAweDE7CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZnVuY3Rp
b25TcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmdlbmVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAsNyArMjYwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoQWRhcHRvcjo6dHlwZVZh
bHVlKSB7CiAgICAgICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZ2xvYmFs
TGV4aWNhbEVudmlyb25tZW50U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYxNiw3ICs2MTYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmdsb2JhbE9iamVjdFNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLm1hcFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGludGVybmFsRmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6
OmludGVybmFsRmllbGQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2
bS5tYXBJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTTW9kdWxlTG9h
ZGVyLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0ubW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uanNNb2R1bGVSZWNvcmRTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLm5hdGl2ZVN0
ZEZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNPTk9iamVjdCwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDwyPjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiAmdm0ucHJvbWlzZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKEpTUHJvbWlzZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8PCAx
KSAtIDE7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gJnZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc1B1dCB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2Vs
bFR5cGUpID09IHNpemVvZihKU1Byb3h5KSk7CiAgICAgICAgIHJldHVybiAmdm0uanNQcm94eVNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNo
UGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y3JpcHRGZXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc2NyaXB0RmV0Y2hlclNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLnNldFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGludGVybmFsRmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6Omlu
dGVybmFsRmllbGQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5z
ZXRJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLnNvdXJjZUNvZGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcg
KzEwOSw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzcGVjaWFsaXplIHRoZSBzdHJpbmcgc3Vic3Bh
Y2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHN3ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAg
ICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5nIGRpZG4ndCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdT
cGFjZSgpOwogICAgIH0KQEAgLTI2OCw3ICsyNjgsNyBAQCBjbGFzcyBKU1JvcGVTdHJpbmcgZmlu
YWwgOiBwdWJsaWMgSlNTdHJpCiAgICAgZnJpZW5kIGNsYXNzIEpTU3RyaW5nOwogcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnJvcGVT
dHJpbmdTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnN0cmluZ0l0ZXJhdG9y
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmgJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2Vha09iamVj
dFJlZlNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTY29wZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53aXRo
U2NvcGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTWFw
SXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3Rv
dHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoTWFwUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKE1hdGhPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEVycm9yUHJvdG90eXBlQmFzZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTmF0
aXZlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2
bS5uYXRpdmVFeGVjdXRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmpl
Y3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gJnZtLm51bWJlck9iamVjdFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBJc0ltbXV0
YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShPYmplY3RQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCw3IEBAIGJvb2wgY2Fu
VXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgXAogICAgIHYoR0NMb2dMZXZlbCwgbG9n
R0MsIEdDTG9nZ2luZzo6Tm9uZSwgTm9ybWFsLCAiZGVidWdnaW5nIG9wdGlvbiB0byBsb2cgR0Mg
YWN0aXZpdHkgKDAgPSBOb25lLCAxID0gQmFzaWMsIDIgPSBWZXJib3NlKSIpIFwKICAgICB2KEJv
b2wsIHVzZUdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUdsb2Jh
bEdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBnY0F0RW5kLCBmYWxz
ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIGpzYyBDTEkgd2lsbCBkbyBhIEdDIGJlZm9yZSBleGl0
aW5nIikgXAogICAgIHYoQm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1hbCwgIklm
IHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24gdGhlaXIg
c2xvdyBwYXRocy4iKSBcCiAgICAgdihCb29sLCBmb3JjZURpZERlZmVyR0NXb3JrLCBmYWxzZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgRGVmZXJHQyBkZXN0cnVjdGlvbnMg
dG8gcGVyZm9ybSBhIEdDLiIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAgICAg
ICByZXR1cm4gJnZtLnByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0
dXJuICZ2bS5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIFBy
b2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5VGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcs
NyArMTI3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICZ2bS5wcm9wZXJ0eVRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90
b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ucHJveHlPYmplY3RTcGFjZTxtb2RlPigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2Uu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLnByb3h5UmV2b2tlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5oCShyZXZp
c2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoUmVmbGVjdE9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnJlZ0V4cFNwYWNl
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
IUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uLCAiIik7CiAgICAgICAgIHJldHVybiAmdm0ucmVn
RXhwT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKFJlZ0V4cFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAy
ODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBTdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKFJlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCFD
ZWxsVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiwgIiIpOwogICAgICAgICByZXR1cm4gJnZtLnNjb3Bl
ZEFyZ3VtZW50c1NwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zY29wZWRBcmd1bWVudHNU
YWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVh
ckNvZGUoSXNvQ2VsbAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoJlZNOjpT
cGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNldCk7Cisg
ICAgQVNTRVJUKCZIZWFwOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xl
YXJhYmxlQ29kZVNldCk7CiAgICAgY2xlYXJhYmxlQ29kZVNldC5yZW1vdmUodGhpcyk7CiB9CiAK
QEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZN
JiB2CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8mIGNsZWFyYWJsZUNvZGVTZXQg
PSBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSk7CisgICAgYXV0byYgY2xlYXJh
YmxlQ29kZVNldCA9IEhlYXA6OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpOwogICAg
IGlmIChoYXNDbGVhcmFibGVDb2RlKHZtKSkKICAgICAgICAgY2xlYXJhYmxlQ29kZVNldC5hZGQo
dGhpcyk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25G
aW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTZXRJdGVyYXRvclBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShTZXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93
UmVhbG1PYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2hhZG93UmVhbG1PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNoYWRvd1JlYWxtU3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dS
ZWFsbVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NoYWRvd1JlYWxtUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2hhZG93UmVhbG1Qcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3Bh
cnNlQXJyYXlWYWx1ZU1hcFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAy
ODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNTY29wZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zdHJpY3RFdmFsQWN0aXZhdGlvblNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFN0cmlu
Z0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdPYmplY3RTcGFj
ZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAg
ICB+U3RydWN0dXJlKCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3RydWN0dXJlU3BhY2UoKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJ1Y3R1cmVDaGFpblNwYWNlKCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0u
c3RydWN0dXJlUmFyZURhdGFTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2wuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLnN5bWJvbFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFw
cGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLnN5bWJvbE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFN5bWJvbFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNyArNDU0LDcgQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgV1RGOjpJdGVyYXRvclJhbmdlPHR5cGVuYW1lIFByaXZhdGVOYW1lRW52
aXJvbm1lbnQ6Oml0ZXJhdG9yPiBQcml2YXRlTmFtZUl0ZXJhdG9yUmFuZ2U7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zeW1i
b2xUYWJsZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxDYWxlbmRhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXIuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS50ZW1wb3JhbENhbGVuZGFyU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxDYWxlbmRhclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxDYWxlbmRh
clByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVy
YXRpb24uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1w
b3JhbER1cmF0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbEluc3RhbnRTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5z
dGFudFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsSW5zdGFudFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnRQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3Jh
bEluc3RhbnRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsTm93
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxO
b3cuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxOb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShUZW1wb3JhbE5vdywgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbE9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsT2JqZWN0LCBCYXNlKTsKICAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsUGxhaW5UaW1lU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBs
YWluVGltZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
VGVtcG9yYWxQbGFpblRpbWVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsVGltZVpvbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbFRpbWVab25lLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0udGVtcG9yYWxUaW1lWm9uZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGlt
ZVpvbmVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsVGltZVpvbmVQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA5LDYgKzIwOSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwK
ICAgICAsIG1fcmFuZG9tKE9wdGlvbnM6OnNlZWRPZlZNUmFuZG9tRm9yRnV6emVyKCkgPyBPcHRp
b25zOjpzZWVkT2ZWTVJhbmRvbUZvckZ1enplcigpIDogY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIoKSkKICAgICAsIG1faW50ZWdyaXR5UmFuZG9tKCp0aGlzKQogICAgICwgaGVhcCgqdGhp
cywgaGVhcFR5cGUpCisgICAgLCBjbGllbnRIZWFwKGhlYXApCiAgICAgLCB2bVR5cGUodm1UeXBl
KQogICAgICwgY2xpZW50RGF0YShudWxscHRyKQogICAgICwgdG9wRW50cnlGcmFtZShudWxscHRy
KQpAQCAtNTU1LDcgKzU1Niw3IEBAIFZNJiBWTTo6c2hhcmVkSW5zdGFuY2UoKQogICAgIEdsb2Jh
bEpTTG9jayBnbG9iYWxMb2NrOwogICAgIFZNKiYgaW5zdGFuY2UgPSBzaGFyZWRJbnN0YW5jZUlu
dGVybmFsKCk7CiAgICAgaWYgKCFpbnN0YW5jZSkKLSAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJl
ZihuZXcgVk0oQVBJU2hhcmVkLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CisgICAgICAgIGluc3Rh
bmNlID0gYWRvcHRSZWYobmV3IFZNKEFQSVNoYXJlZCwgSGVhcFR5cGU6OlNtYWxsKSkubGVha1Jl
ZigpOwogICAgIHJldHVybiAqaW5zdGFuY2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDkgKzI1Myw5IEBAIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBzaGFyZWRJbnN0YW5jZUV4aXN0cygpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBWTSYgc2hhcmVkSW5zdGFuY2UoKTsKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8Vk0+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxs
SGVhcCwgV1RGOjpSdW5Mb29wKiA9IG51bGxwdHIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBSZWZQdHI8Vk0+IHRyeUNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCwgV1RGOjpSdW5M
b29wKiA9IG51bGxwdHIpOwotICAgIHN0YXRpYyBSZWY8Vk0+IGNyZWF0ZUNvbnRleHRHcm91cChI
ZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxW
TT4gY3JlYXRlKEhlYXBUeXBlID0gSGVhcFR5cGU6OlNtYWxsLCBXVEY6OlJ1bkxvb3AqID0gbnVs
bHB0cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxWTT4gdHJ5Q3JlYXRl
KEhlYXBUeXBlID0gSGVhcFR5cGU6OlNtYWxsLCBXVEY6OlJ1bkxvb3AqID0gbnVsbHB0cik7Cisg
ICAgc3RhdGljIFJlZjxWTT4gY3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlID0gSGVhcFR5cGU6
OlNtYWxsKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+Vk0oKTsKIAogICAgIFdhdGNoZG9nJiBl
bnN1cmVXYXRjaGRvZygpOwpAQCAtMzI2LDYgKzMyNiw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoK
ICAgICBIZWFwIGhlYXA7CisgICAgR0NDbGllbnQ6OkhlYXAgY2xpZW50SGVhcDsKIAogICAgIGNv
bnN0IEhlYXBDZWxsVHlwZSYgY2VsbEhlYXBDZWxsVHlwZSgpIHsgcmV0dXJuIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZTsgfQogICAgIGNvbnN0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
JiBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSB7IHJldHVybiBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZTsgfTsKQEAgLTM0Miw0MiArMzQzLDQyIEBAIHB1YmxpYzoK
ICAgICBBTFdBWVNfSU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIHZhcmlhYmxlU2l6ZWRDZWxsU3Bh
Y2UoKSB7IHJldHVybiBoZWFwLnZhcmlhYmxlU2l6ZWRDZWxsU3BhY2U7IH0KICAgICBBTFdBWVNf
SU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCkgeyByZXR1
cm4gaGVhcC5kZXN0cnVjdGlibGVPYmplY3RTcGFjZTsgfQogCi0gICAgQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSYgYXJyYXlTcGFjZSgpIHsgcmV0dXJuIGhlYXAuYXJyYXlTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGJpZ0ludFNwYWNlKCkgeyByZXR1cm4gaGVhcC5i
aWdJbnRTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGNhbGxlZVNwYWNl
KCkgeyByZXR1cm4gaGVhcC5jYWxsZWVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vi
c3BhY2UmIGNsb25lZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5jbG9uZWRBcmd1bWVu
dHNTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGN1c3RvbUdldHRlclNl
dHRlclNwYWNlKCkgeyByZXR1cm4gaGVhcC5jdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGRhdGVJbnN0YW5jZVNwYWNlKCkgeyByZXR1cm4g
aGVhcC5kYXRlSW5zdGFuY2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2Um
IGRvbUF0dHJpYnV0ZUdldHRlclNldHRlclNwYWNlKCkgeyByZXR1cm4gaGVhcC5kb21BdHRyaWJ1
dGVHZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGV4
Y2VwdGlvblNwYWNlKCkgeyByZXR1cm4gaGVhcC5leGNlcHRpb25TcGFjZTsgfQotICAgIEFMV0FZ
U19JTkxJTkUgSXNvU3Vic3BhY2UmIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSgpIHsg
cmV0dXJuIGhlYXAuZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlOyB9Ci0gICAgQUxXQVlT
X0lOTElORSBJc29TdWJzcGFjZSYgZnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuZnVuY3Rp
b25TcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGdldHRlclNldHRlclNw
YWNlKCkgeyByZXR1cm4gaGVhcC5nZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIGdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlKCkgeyByZXR1cm4g
aGVhcC5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUg
SXNvU3Vic3BhY2UmIGludGVybmFsRnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuaW50ZXJu
YWxGdW5jdGlvblNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYganNQcm94
eVNwYWNlKCkgeyByZXR1cm4gaGVhcC5qc1Byb3h5U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5F
IElzb1N1YnNwYWNlJiBuYXRpdmVFeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLm5hdGl2
ZUV4ZWN1dGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIG51bWJl
ck9iamVjdFNwYWNlKCkgeyByZXR1cm4gaGVhcC5udW1iZXJPYmplY3RTcGFjZTsgfQotICAgIEFM
V0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHBsYWluT2JqZWN0U3BhY2UoKSB7IHJldHVybiBoZWFw
LnBsYWluT2JqZWN0U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBwcm9t
aXNlU3BhY2UoKSB7IHJldHVybiBoZWFwLnByb21pc2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsgcmV0dXJuIGhl
YXAucHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29T
dWJzcGFjZSYgcHJvcGVydHlUYWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5wcm9wZXJ0eVRhYmxl
U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByZWdFeHBTcGFjZSgpIHsg
cmV0dXJuIGhlYXAucmVnRXhwU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNl
JiByZWdFeHBPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAucmVnRXhwT2JqZWN0U3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByb3BlU3RyaW5nU3BhY2UoKSB7IHJldHVy
biBoZWFwLnJvcGVTdHJpbmdTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2Um
IHNjb3BlZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5zY29wZWRBcmd1bWVudHNTcGFj
ZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBT
cGFjZSgpIHsgcmV0dXJuIGhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RyaW5nU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cmlu
Z1NwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RyaW5nT2JqZWN0U3Bh
Y2UoKSB7IHJldHVybiBoZWFwLnN0cmluZ09iamVjdFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElO
RSBJc29TdWJzcGFjZSYgc3RydWN0dXJlQ2hhaW5TcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3RydWN0
dXJlQ2hhaW5TcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN0cnVjdHVy
ZVJhcmVEYXRhU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVTcGFjZSgpIHsgcmV0dXJu
IGhlYXAuc3RydWN0dXJlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBi
cmFuZGVkU3RydWN0dXJlU3BhY2UoKSB7IHJldHVybiBoZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFj
ZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN5bWJvbFRhYmxlU3BhY2UoKSB7
IHJldHVybiBoZWFwLnN5bWJvbFRhYmxlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSYgYXJyYXlTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuYXJyYXlT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBiaWdJbnRT
cGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuYmlnSW50U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY2FsbGVlU3BhY2UoKSB7IHJldHVybiBjbGllbnRI
ZWFwLmNhbGxlZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGNsb25lZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5jbG9uZWRBcmd1
bWVudHNTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBj
dXN0b21HZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuY3VzdG9tR2V0dGVy
U2V0dGVyU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYg
ZGF0ZUluc3RhbmNlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmRhdGVJbnN0YW5jZVNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbUF0dHJpYnV0
ZUdldHRlclNldHRlclNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5kb21BdHRyaWJ1dGVHZXR0
ZXJTZXR0ZXJTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBleGNlcHRpb25TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZXhjZXB0aW9uU3BhY2U7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5leGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYg
ZnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZnVuY3Rpb25TcGFjZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBnZXR0ZXJTZXR0ZXJTcGFjZSgp
IHsgcmV0dXJuIGNsaWVudEhlYXAuZ2V0dGVyU2V0dGVyU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2Uo
KSB7IHJldHVybiBjbGllbnRIZWFwLmdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGludGVybmFsRnVuY3Rpb25T
cGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuaW50ZXJuYWxGdW5jdGlvblNwYWNlOyB9CisgICAg
QUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGpzUHJveHlTcGFjZSgpIHsgcmV0
dXJuIGNsaWVudEhlYXAuanNQcm94eVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UmIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhl
YXAubmF0aXZlRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIG51bWJlck9iamVjdFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5udW1i
ZXJPYmplY3RTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBwbGFpbk9iamVjdFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wbGFpbk9iamVjdFNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb21pc2VTcGFj
ZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucHJvbWlzZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAucHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb3BlcnR5VGFibGVTcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAucHJvcGVydHlUYWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJlZ0V4cFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5yZWdFeHBTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiByZWdFeHBPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucmVnRXhwT2JqZWN0U3Bh
Y2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcm9wZVN0cmlu
Z1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5yb3BlU3RyaW5nU3BhY2U7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc2NvcGVkQXJndW1lbnRzU3BhY2UoKSB7
IHJldHVybiBjbGllbnRIZWFwLnNjb3BlZEFyZ3VtZW50c1NwYWNlOyB9CisgICAgQUxXQVlTX0lO
TElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9CisgICAgQUxXQVlT
X0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cmluZ1NwYWNlKCkgeyByZXR1cm4gY2xp
ZW50SGVhcC5zdHJpbmdTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlJiBzdHJpbmdPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RyaW5nT2Jq
ZWN0U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc3Ry
dWN0dXJlQ2hhaW5TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RydWN0dXJlQ2hhaW5TcGFj
ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVS
YXJlRGF0YVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cnVjdHVyZVNw
YWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19J
TkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBicmFuZGVkU3RydWN0dXJlU3BhY2UoKSB7IHJl
dHVybiBjbGllbnRIZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzeW1ib2xUYWJsZVNwYWNlKCkgeyByZXR1cm4gY2xp
ZW50SGVhcC5zeW1ib2xUYWJsZVNwYWNlOyB9CiAKICNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihuYW1lKSBcCiAgICAgdGVtcGxhdGU8U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gXAotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UqIG5hbWUoKSB7IHJldHVybiBoZWFw
Lm5hbWU8bW9kZT4oKTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBuYW1lKCkgeyByZXR1cm4gY2xpZW50SGVhcC5uYW1lPG1vZGU+KCk7IH0KIAogI2lmIEpTQ19P
QkpDX0FQSV9FTkFCTEVECiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihh
cGlXcmFwcGVyT2JqZWN0U3BhY2UpCkBAIC00ODIsMjQgKzQ4MywxOCBAQCBwdWJsaWM6CiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvblNwYWNlKQogI2VuZGlmCiAKLSN1bmRlZiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSCi0KICAgICBBTFdBWVNfSU5MSU5FIElzb0NlbGxTZXQmIGV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKCkgeyByZXR1cm4gaGVhcC5leGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlc1dpdGhDb25zdHJhaW50czsgfQogICAgIEFMV0FZU19JTkxJTkUgSXNvQ2VsbFNl
dCYgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycygpIHsgcmV0dXJuIGhl
YXAuZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVyczsgfQogCi0jZGVmaW5l
IERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG5hbWUpIFwKLSAgICB0ZW1wbGF0
ZTxTdWJzcGFjZUFjY2VzcyBtb2RlPiBcCi0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSog
bmFtZSgpIHsgcmV0dXJuIGhlYXAubmFtZTxtb2RlPigpOyB9CisgICAgQUxXQVlTX0lOTElORSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIGNvZGVCbG9ja1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5jb2RlQmxvY2tTcGFjZTsgfQogCi0gICAgdXNpbmcgU3BhY2VBbmRTZXQgPSBIZWFwOjpTcGFj
ZUFuZFNldDsKLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiBjb2RlQmxvY2tTcGFjZSgp
IHsgcmV0dXJuIGhlYXAuY29kZUJsb2NrU3BhY2U7IH0KLQotICAgIERZTkFNSUNfU1BBQ0VfQU5E
X1NFVF9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCi0gICAgRFlOQU1JQ19TUEFD
RV9BTkRfU0VUX0RFRklORV9NRU1CRVIobW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlKQorI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIK
IAotICAgIEFMV0FZU19JTkxJTkUgU3BhY2VBbmRTZXQmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
KCkgeyByZXR1cm4gaGVhcC5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19J
TkxJTkUgU3BhY2VBbmRTZXQmIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFw
LnByb2dyYW1FeGVjdXRhYmxlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0
JiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC51bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBj
bGllbnRIZWFwLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7IH0KIAogICAgIFZNVHlw
ZSB2bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKGlzV2Vh
a01hcCgpKQogICAgICAgICAgICAgcmV0dXJuIHZtLndlYWtNYXBTcGFjZTxtb2RlPigpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a01hcFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShXZWFrTWFwUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrT2JqZWN0UmVmUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYWtP
YmplY3RSZWZQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
U2V0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2Vha1NldFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlND
YWxsZWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uanNUb1dhc21JQ0NhbGxlZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKEpTV2ViQXNzZW1ibHksIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFz
c2VtYmx5Q29kZUJsb2NrU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1i
bHlFeGNlcHRpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseUdsb2JhbFNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS53ZWJBc3NlbWJseU1lbW9yeVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFz
c2VtYmx5TW9kdWxlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlUYWJsZVNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWcuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLndlYkFzc2VtYmx5VGFnU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RnVuY3Rp
b25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlH
bG9iYWxQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5
cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlMaW5rRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNZW1vcnlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseU1vZHVs
ZVJlY29yZFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDU0LDYgKzIwNTQsNyBAQCBzZXQo
TUFLRV9OQU1FU19ERVBFTkRFTkNJRVMKICkKIHNldChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9G
SUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9zdXBwbGVtZW50YWxfZGVwZW5kZW5j
eS50bXApCiBzZXQoSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSAke1dlYkNvcmVfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vRE9NSXNvU3Vic3BhY2VzLmgpCitzZXQoQ0xJRU5UX0lTT19TVUJTUEFDRVNf
SEVBREVSX0ZJTEUgJHtXZWJDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0RPTUNsaWVudElzb1N1
YnNwYWNlcy5oKQogc2V0KENPTlNUUlVDVE9SU19IRUFERVJfRklMRSAke1dlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vRE9NQ29uc3RydWN0b3JzLmgpCiBzZXQoV0lORE9XX0NPTlNUUlVDVE9S
U19GSUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9ET01XaW5kb3dDb25zdHJ1Y3Rv
cnMuaWRsKQogc2V0KFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFICR7V2ViQ29y
ZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Xb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMt
b3V0cHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBAICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvbG9yRGF0YS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvdW50UXVldWluZ1N0
cmF0ZWd5QnVpbHRpbnMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL0RPTUNvbnN0cnVjdG9ycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01Jc29TdWJzcGFjZXMuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NSklUQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTIwNTYsNiArMjA1Niw3IEBAIEpTX0JJTkRJTkdTX1NDUklQVFMgPSAkKENPTU1PTl9CSU5E
SU5HU18KIFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUgPSBTdXBwbGVtZW50YWxEZXBlbmRl
bmNpZXMudHh0CiBTVVBQTEVNRU5UQUxfTUFLRUZJTEVfREVQUyA9IFN1cHBsZW1lbnRhbERlcGVu
ZGVuY2llcy5kZXAKIElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUgPSBET01Jc29TdWJzcGFjZXMu
aAorQ0xJRU5UX0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUgPSBET01DbGllbnRJc29TdWJzcGFj
ZXMuaAogQ09OU1RSVUNUT1JTX0hFQURFUl9GSUxFID0gRE9NQ29uc3RydWN0b3JzLmgKIFdJTkRP
V19DT05TVFJVQ1RPUlNfRklMRSA9IERPTVdpbmRvd0NvbnN0cnVjdG9ycy5pZGwKIFdPUktFUkdM
T0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFID0gV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnMuaWRsCkBAIC0yMDcxLDYgKzIwNzIsNyBAQCBJRExfSU5URVJNRURJQVRFX0ZJTEVTID0gXAog
ICAgICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpIFwKICAgICAkKFNVUFBMRU1FTlRBTF9E
RVBFTkRFTkNZX0ZJTEUpIFwKICAgICAkKElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUpIFwKKyAg
ICAkKENMSUVOVF9JU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSBcCiAgICAgJChDT05TVFJVQ1RP
UlNfSEVBREVSX0ZJTEUpIFwKICAgICAkKFdJTkRPV19DT05TVFJVQ1RPUlNfRklMRSkgXAogICAg
ICQoV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIFwKQEAgLTIwODQsNyArMjA4
Niw3IEBAIElETF9JTlRFUk1FRElBVEVfUEFUVEVSTlMgPSAkKHN1YnN0IC4sJSwKIAogJChJRExf
SU5URVJNRURJQVRFX1BBVFRFUk5TKSA6ICQoUFJFUFJPQ0VTU19JRExTX1NDUklQVFMpICQoSURM
X0FUVFJJQlVURVNfRklMRSkgJChKU19CSU5ESU5HX0lETFMpICQoRkVBVFVSRV9BTkRfUExBVEZP
Uk1fREVGSU5FX0RFUEVOREVOQ0lFUykKIAkkKHNoZWxsIGVjaG8gJChKU19CSU5ESU5HX0lETFMp
IHwgdHIgIiAiICJcbiIgPiBJRExGaWxlTmFtZXNMaXN0LnR4dCkKLQkkKFBFUkwpICQoV2ViQ29y
ZSkvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwgLS1kZWZpbmVzICIkKEZFQVRV
UkVfQU5EX1BMQVRGT1JNX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0taWRsRmlsZU5h
bWVzTGlzdCBJRExGaWxlTmFtZXNMaXN0LnR4dCAtLWlkbEF0dHJpYnV0ZXNGaWxlICQoSURMX0FU
VFJJQlVURVNfRklMRSkgLS1zdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSAkKFNVUFBMRU1FTlRB
TF9ERVBFTkRFTkNZX0ZJTEUpIC0taXNvU3Vic3BhY2VzSGVhZGVyRmlsZSAkKElTT19TVUJTUEFD
RVNfSEVBREVSX0ZJTEUpIC0tY29uc3RydWN0b3JzSGVhZGVyRmlsZSAkKENPTlNUUlVDVE9SU19I
RUFERVJfRklMRSkgLS13aW5kb3dDb25zdHJ1Y3RvcnNGaWxlICQoV0lORE9XX0NPTlNUUlVDVE9S
U19GSUxFKSAtLXdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFdPUktFUkdMT0JB
TFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLWRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3JzRmlsZSAkKERFRElDQVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19G
SUxFKSAtLXNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChTRVJWSUNF
V09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc2hhcmVkV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0hBUkVEV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNU
T1JTX0ZJTEUpIC0td29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFdPUktMRVRH
TE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1wYWludFdvcmtsZXRHbG9iYWxTY29wZUNv
bnN0cnVjdG9yc0ZpbGUgJChQQUlOVFdPUktMRVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklM
RSkgLS1hdWRpb1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChBVURJT1dPUktM
RVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zdXBwbGVtZW50YWxNYWtlZmlsZURl
cHMgJChTVVBQTEVNRU5UQUxfTUFLRUZJTEVfREVQUykKKwkkKFBFUkwpICQoV2ViQ29yZSkvYmlu
ZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwgLS1kZWZpbmVzICIkKEZFQVRVUkVfQU5E
X1BMQVRGT1JNX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0taWRsRmlsZU5hbWVzTGlz
dCBJRExGaWxlTmFtZXNMaXN0LnR4dCAtLWlkbEF0dHJpYnV0ZXNGaWxlICQoSURMX0FUVFJJQlVU
RVNfRklMRSkgLS1zdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSAkKFNVUFBMRU1FTlRBTF9ERVBF
TkRFTkNZX0ZJTEUpIC0taXNvU3Vic3BhY2VzSGVhZGVyRmlsZSAkKElTT19TVUJTUEFDRVNfSEVB
REVSX0ZJTEUpIC0tY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSAkKENMSUVOVF9JU09fU1VC
U1BBQ0VTX0hFQURFUl9GSUxFKSAtLWNvbnN0cnVjdG9yc0hlYWRlckZpbGUgJChDT05TVFJVQ1RP
UlNfSEVBREVSX0ZJTEUpIC0td2luZG93Q29uc3RydWN0b3JzRmlsZSAkKFdJTkRPV19DT05TVFJV
Q1RPUlNfRklMRSkgLS13b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChXT1JLRVJH
TE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1kZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9yc0ZpbGUgJChERURJQ0FURURXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RP
UlNfRklMRSkgLS1zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0VS
VklDRVdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNoYXJlZFdvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNIQVJFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNU
UlVDVE9SU19GSUxFKSAtLXdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChXT1JL
TEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tcGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnNGaWxlICQoUEFJTlRXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JT
X0ZJTEUpIC0tYXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoQVVESU9X
T1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc3VwcGxlbWVudGFsTWFrZWZp
bGVEZXBzICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpCiAKICMKICMgRW1pdCB0aGUgcnVs
ZXMgdG8gZ2VuZXJhdGUgYmluZGluZ3MgZnJvbSBJREwgZmlsZXMuIE5vdGUgdGhhdCB0aGVyZSBh
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDcgQEAgSlNDOjpWTSYgY29tbW9uVk1TbG93KCkKICAg
ICBSdW5Mb29wKiBydW5Mb29wID0gbnVsbHB0cjsKICNlbmRpZgogCi0gICAgYXV0byYgdm0gPSBK
U0M6OlZNOjpjcmVhdGUoSlNDOjpMYXJnZUhlYXAsIHJ1bkxvb3ApLmxlYWtSZWYoKTsKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Vk06OmNyZWF0ZShKU0M6OkhlYXBUeXBlOjpMYXJnZSwgcnVuTG9vcCku
bGVha1JlZigpOwogCiAgICAgZ19jb21tb25WTU9yTnVsbCA9ICZ2bTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3Bw
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ET01HQ091dHB1dENv
bnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludChWTSYgdm0sIEpTVk1DbGllbnREYXRhJiBj
bGllbnREYXRhKQorRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQo
Vk0mIHZtLCBKU0hlYXBEYXRhJiBoZWFwRGF0YSkKICAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJE
b21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLCBD
b25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWwpCiAgICAgLCBtX3ZtKHZtKQotICAgICwgbV9jbGllbnREYXRhKGNsaWVudERhdGEp
CisgICAgLCBtX2hlYXBEYXRhKGhlYXBEYXRhKQogICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lv
bih2bS5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkpCiB7CiB9CkBAIC01OSw3ICs1OSw3
IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbEkKICAgICAKICAgICBt
X2xhc3RFeGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOwog
ICAgIAotICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAg
IG1faGVhcERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAgWyZdIChT
dWJzcGFjZSYgc3Vic3BhY2UpIHsKICAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChWaXNpdG9y
JiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAg
ICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1h
cmtSZWFzb246OkRPTUdDT3V0cHV0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEyIEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEpTVk1DbGllbnREYXRhOworY2xhc3MgSlNIZWFwRGF0YTsKIAogY2xhc3Mg
RE9NR0NPdXRwdXRDb25zdHJhaW50IDogcHVibGljIEpTQzo6TWFya2luZ0NvbnN0cmFpbnQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIERPTUdDT3V0cHV0Q29u
c3RyYWludChKU0M6OlZNJiwgSlNWTUNsaWVudERhdGEmKTsKKyAgICBET01HQ091dHB1dENvbnN0
cmFpbnQoSlNDOjpWTSYsIEpTSGVhcERhdGEmKTsKICAgICB+RE9NR0NPdXRwdXRDb25zdHJhaW50
KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRvciYpOwog
CiAgICAgSlNDOjpWTSYgbV92bTsKLSAgICBKU1ZNQ2xpZW50RGF0YSYgbV9jbGllbnREYXRhOwor
ICAgIEpTSGVhcERhdGEmIG1faGVhcERhdGE7CiAgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9u
VmVyc2lvbjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXN5
bmNJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQXN5bmNJdGVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUFzeW5jSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRE9NV3JhcHBlZCA9IHR5cGVuYW1lIEpTV3JhcHBl
cjo6RE9NV3JhcHBlZDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoSlNET01Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5j
cHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0QwogCiBERUZJTkVfVklT
SVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKIAotSlNDOjpJc29TdWJz
cGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWlsdGluQ29uc3Ry
dWN0b3JTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNET01Db25zdHJ1Y3RvckJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlKSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKENlbGxU
eXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOwpAQCAtNDgsNyArNDgsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNG
dW5jdGlvbiYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIEpTQzo6V3JpdGVCYXJyaWVy
PEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmNwcAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25z
dHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNh
bUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWlj
aGFlbEA2OGsub3JnPgogICoKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGNhbGxUaHJvd1R5cGVFcgogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6
OmpzTnVsbCgpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNET01Db25zdHJ1Y3RvckJhc2U6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU0RPTUNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewog
ICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+
ZG9tQ29uc3RydWN0b3JTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
Q2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpTRE9NQ29uc3RydWN0b3JCYXNlKSk7CiAg
ICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKENlbGxUeXBlLCBKU0RP
TUNvbnN0cnVjdG9yQmFzZSk7CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIEpTQzo6anNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oQmFzZTo6Z2xvYmFsT2JqZWN0KCkpOyB9CiAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGds
b2JhbE9iamVjdCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JOb3RDYWxs
YWJsZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUoSlNDOjpWTSYsIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoSlNET01Db25zdHJ1
Y3Rvck5vdENhbGxhYmxlKSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKENlbGxUeXBlLCBKU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBET01XcmFwcGVkID0g
dHlwZW5hbWUgSlNXcmFwcGVyOjpET01XcmFwcGVkOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0RPTUl0ZXJhdG9yUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5j
cHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93UHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzgsNyArMTM4LDcgQEAg
Ym9vbCBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OmRlZmluZU93blBybwogICAgIHJldHVybiB0eXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCAiRGVmaW5pbmcg
YSBwcm9wZXJ0eSBvbiBhIFdpbmRvd1Byb3BlcnRpZXMgb2JqZWN0IGlzIG5vdCBhbGxvd2VkLiJf
cyk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NV2luZG93UHJvcGVydGllczo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRE9N
V2luZG93UHJvcGVydGllczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tV2lu
ZG93UHJvcGVydGllc1NwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoQ2VsbFR5cGU6OmRlc3Ryb3kgPT0gSlNDOjpKU0NlbGw6OmRlc3Ryb3ksICJKU0RP
TVdpbmRvd1Byb3BlcnRpZXMgaXMgbm90IGRlc3RydWN0aWJsZSBhY3R1YWxseSIpOwogICAgICAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmKTsK
LSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGly
ZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDI3ICs0NywzOSBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBK
U0ZpbGVTeXN0ZW1EaXJlY3RvCiB0ZW1wbGF0ZTw+CiBjb25zdCBKU0M6OkNsYXNzSW5mbyBKU0Zp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiRGly
ZWN0b3J5IEhhbmRsZSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JQ
cm90b3R5cGUpIH07CiAKLUlzb1N1YnNwYWNlKiBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I6OnN1YnNwYWNlRm9ySW1wbChWTSYg
dm0pCiB7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgYXBpTG9ja2VyKHZtKTsKKyAgICBKU0xvY2tI
b2xkZXIgYXBpTG9ja2VyKHZtKTsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0g
Y2xpZW50RGF0YS5maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpKQotICAg
ICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvcj4gfHwgIUpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yPikKLSAg
ICAgICAgY2xpZW50RGF0YS5zZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFj
ZShtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3IpKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UobWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0ZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcikpOwotICAgIGF1dG8qIHNwYWNlID0gY2xpZW50RGF0
YS5maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpOworICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yU3BhY2UoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OworCisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gaGVhcERhdGEuZmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yPiB8fCAhSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yPikKKyAgICAgICAgICAgIHNwYWNlICA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
KTsKKyAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSkpOworCiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5E
CiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGF1
dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xpZW50OjpJc29TdWJzcGFjZSgqc3BhY2UpOworICAg
IGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3Rk
Ojp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4oY2xpZW50U3BhY2UpKTsKKyAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7CiB9CiAKIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yX29uUHJvbWlzZVNldHRsZWRCb2R5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiwgSlNGaWxlU3lzdGVtRGly
ZWN0b3J5SGFuZGxlSXRlcmF0b3IqIGNhc3RlZFRoaXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEzICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNj
ZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgSlNJREJTZXJpYWxpemF0aW9u
R2xvYmFsT2JqZWN0OjpmaW4KICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLUlz
b1N1YnNwYWNlKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTSURCU2VyaWFsaXphdGlvbkdsb2Jh
bE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmlkYlNlcmlhbGl6YXRpb25TcGFj
ZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0
aW9uR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsMTMgQEAgcHVibGljOgogICAgIHN0YXRp
YyBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QqIGNyZWF0ZShKU0M6OlZNJiwgSlNDOjpT
dHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBj
b25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwo
dm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJik7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1By
b3h5LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXaW5kb3dQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBXaW5k
b3dQcm94eSogSlNXaW5kb3dQcm94eTo6dG9XcmFwcGVkKFZNCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTV2luZG93UHJveHk6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1dpbmRvd1Byb3h5Ojpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT53aW5kb3dQcm94eVNwYWNlKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oCShyZXZpc2lv
biAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBKU1dpbmRvd1Byb3h5KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSYsIERPTVdyYXBwZXJXb3Js
ZCYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEFic3RyYWN0RE9NV2luZG93
Jik7Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
Jik7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYpOwogCiAgICAgUmVmPERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKICNpbmNsdWRlICJET01HQ091dHB1
dENvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0F1ZGlvV29ya2xldEdsb2JhbFNj
b3BlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC01MiwxNSArNTMsMTQgQEAKICNp
bmNsdWRlICJydW50aW1lX2FycmF5LmgiCiAjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIKICNp
bmNsdWRlICJydW50aW1lX29iamVjdC5oIgorI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLUpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCi0gICAgOiBtX2J1
aWx0aW5GdW5jdGlvbnModm0pCi0gICAgLCBtX2J1aWx0aW5OYW1lcyh2bSkKLSAgICAsIG1fcnVu
dGltZUFycmF5SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPFJ1bnRpbWVB
cnJheT4oKSkKK0pTSGVhcERhdGE6OkpTSGVhcERhdGEoSGVhcCYgaGVhcCkKKyAgICA6IG1fcnVu
dGltZUFycmF5SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPFJ1bnRpbWVB
cnJheT4oKSkKICAgICAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBD
ZWxsVHlwZTo6QXJnczxKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0PigpKQogICAgICwgbV93
aW5kb3dQcm94eUhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dpbmRv
d1Byb3h5PigpKQogICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdyhKU0M6Oklzb0hl
YXBDZWxsVHlwZTo6QXJnczxKU0RPTVdpbmRvdz4oKSkKQEAgLTc5LDE5ICs3OSw3NCBAQCBKU1ZN
Q2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgICwgbV9oZWFwQ2VsbFR5cGVG
b3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpT
QXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU+KCkpCiAjZW5kaWYKICAgICAsIG1faGVhcENlbGxUeXBl
Rm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KEpTQzo6SXNvSGVhcENlbGxUeXBlOjpB
cmdzPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4oKSkKLSAgICAsIG1fZG9tQnVpbHRp
bkNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZSgpLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpCi0gICAgLCBtX2RvbUNvbnN0
cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlw
ZSgpLCBKU0RPTUNvbnN0cnVjdG9yQmFzZSkKLSAgICAsIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0RP
TU9iamVjdCkKLSAgICAsIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlIElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01XaW5kb3dQcm9wZXJ0aWVz
KQotICAgICwgbV9ydW50aW1lQXJyYXlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBt
X3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZSwgUnVudGltZUFycmF5KQotICAgICwgbV9ydW50aW1l
TWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlw
ZSgpLCBSdW50aW1lTWV0aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUKLSAgICAsIG1fcnVudGltZU9i
amVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIG1fcnVudGltZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkKLSAgICAsIG1fd2luZG93UHJv
eHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3dpbmRvd1Byb3h5SGVhcENlbGxU
eXBlLCBKU1dpbmRvd1Byb3h5KQotICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25H
bG9iYWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKKyAgICAsIG1fZG9t
QnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpCisgICAgLCBtX2RvbUNv
bnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU0RPTUNvbnN0cnVjdG9yQmFzZSkKKyAgICAsIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0RPTU9i
amVjdCkKKyAgICAsIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01XaW5kb3dQcm9wZXJ0aWVzKQorICAg
ICwgbV9ydW50aW1lQXJyYXlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3J1bnRpbWVB
cnJheUhlYXBDZWxsVHlwZSwgUnVudGltZUFycmF5KQorICAgICwgbV9ydW50aW1lTWV0aG9kU3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBSdW50aW1l
TWV0aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUKKyAgICAsIG1fcnVudGltZU9iamVjdFNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNDOjpC
aW5kaW5nczo6UnVudGltZU9iamVjdCkKKyAgICAsIG1fd2luZG93UHJveHlTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBtX3dpbmRvd1Byb3h5SGVhcENlbGxUeXBlLCBKU1dpbmRvd1Byb3h5
KQorICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
bV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIEpTSURCU2Vy
aWFsaXphdGlvbkdsb2JhbE9iamVjdCkKICAgICAsIG1fc3Vic3BhY2VzKG1ha2VVbmlxdWU8RE9N
SXNvU3Vic3BhY2VzPigpKQogewogfQogCitKU0hlYXBEYXRhKiBKU0hlYXBEYXRhOjplbnN1cmVI
ZWFwRGF0YShIZWFwJiBoZWFwKQoreworICAgIGlmICghT3B0aW9uczo6dXNlR2xvYmFsR0MoKSkK
KyAgICAgICAgcmV0dXJuIG5ldyBKU0hlYXBEYXRhKGhlYXApOworCisgICAgc3RhdGljIEpTSGVh
cERhdGEqIHNpbmdsZXRvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0geworICAgICAgICBzaW5n
bGV0b24gPSBuZXcgSlNIZWFwRGF0YShoZWFwKTsKKyAgICB9KTsKKyAgICByZXR1cm4gc2luZ2xl
dG9uOworfQorCisjZGVmaW5lIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzdWJzcGFjZSkgc3Vi
c3BhY2UobV9oZWFwRGF0YS0+c3Vic3BhY2UpCisKK0pTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50
RGF0YShWTSYgdm0pCisgICAgOiBtX2J1aWx0aW5GdW5jdGlvbnModm0pCisgICAgLCBtX2J1aWx0
aW5OYW1lcyh2bSkKKy8vICAgICwgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGUoSlNDOjpJc29I
ZWFwQ2VsbFR5cGU6OkFyZ3M8UnVudGltZUFycmF5PigpKQorLy8gICAgLCBtX3J1bnRpbWVPYmpl
Y3RIZWFwQ2VsbFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNDOjpCaW5kaW5nczo6
UnVudGltZU9iamVjdD4oKSkKKy8vICAgICwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZShKU0M6
Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dpbmRvd1Byb3h5PigpKQorLy8gICAgLCBtX2hlYXBD
ZWxsVHlwZUZvckpTRE9NV2luZG93KEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTRE9NV2lu
ZG93PigpKQorLy8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZT4oKSkKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU1JlbW90ZURPTVdpbmRvdyhKU0M6
Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1JlbW90ZURPTVdpbmRvdz4oKSkKKy8vICAgICwgbV9o
ZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpB
cmdzPEpTV29ya2VyR2xvYmFsU2NvcGU+KCkpCisvLyAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNT
aGFyZWRXb3JrZXJHbG9iYWxTY29wZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1NoYXJl
ZFdvcmtlckdsb2JhbFNjb3BlPigpKQorLy8jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorLy8g
ICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKEpTQzo6SXNv
SGVhcENlbGxUeXBlOjpBcmdzPEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlPigpKQorLy8jZW5k
aWYKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZShKU0M6Oklz
b0hlYXBDZWxsVHlwZTo6QXJnczxKU1dvcmtsZXRHbG9iYWxTY29wZT4oKSkKKy8vI2lmIEVOQUJM
RShDU1NfUEFJTlRJTkdfQVBJKQorLy8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZT4oKSkKKy8vI2VuZGlmCisvLyNpZiBFTkFCTEUoV0VCX0FVRElPKQorLy8gICAg
LCBtX2hlYXBDZWxsVHlwZUZvckpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGUoSlNDOjpJc29IZWFw
Q2VsbFR5cGU6OkFyZ3M8SlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZT4oKSkKKy8vI2VuZGlmCisv
LyAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KEpT
Qzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4o
KSkKKworICAgICwgbV9oZWFwRGF0YShKU0hlYXBEYXRhOjplbnN1cmVIZWFwRGF0YSh2bS5oZWFw
KSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbUJ1aWx0aW5Db25zdHJ1Y3Rv
clNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fZG9tQ29uc3RydWN0b3JT
cGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbU5hbWVzcGFjZU9iamVj
dFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fZG9tV2luZG93UHJvcGVy
dGllc1NwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGltZUFycmF5
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50aW1lTWV0aG9kU3Bh
Y2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50aW1lT2JqZWN0U3BhY2Up
CisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV93aW5kb3dQcm94eVNwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1faWRiU2VyaWFsaXphdGlvblNwYWNlKQorCisg
ICAgLCBtX2NsaWVudFN1YnNwYWNlcyhtYWtlVW5pcXVlPERPTUNsaWVudElzb1N1YnNwYWNlcz4o
KSkKK3sKK30KKworI3VuZGVmIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVAorCiBKU1ZNQ2xpZW50
RGF0YTo6fkpTVk1DbGllbnREYXRhKCkKIHsKICAgICBBU1NFUlQobV93b3JsZFNldC5jb250YWlu
cyhtX25vcm1hbFdvcmxkLmdldCgpKSk7CkBAIC0xNDAsNyArMTk1LDcgQEAgdm9pZCBKU1ZNQ2xp
ZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnRE
YXRhID0gbmV3IEpTVk1DbGllbnREYXRhKCp2bSk7CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGll
bnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAKLSAgICB2bS0+aGVhcC5hZGRN
YXJraW5nQ29uc3RyYWludChtYWtlVW5pcXVlPERPTUdDT3V0cHV0Q29uc3RyYWludD4oKnZtLCAq
Y2xpZW50RGF0YSkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KG1ha2VVbmlx
dWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sIGNsaWVudERhdGEtPmhlYXBEYXRhKCkpKTsK
IAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0
ZSgqdm0sIERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6Tm9ybWFsKTsKICAgICB2bS0+bV90eXBlZEFy
cmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIo
dHlwZSA9PSBXb3JrZXJUaHJlYWRUeXBlOjpEZWRpY2F0ZWRXb3JrZXIgfHwgdHlwZSA9PSBXb3Jr
ZXJUaHJlYWRUeXBlOjpXb3JrbGV0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDIzICsyNSw5MiBAQAogI2luY2x1ZGUgIldlYkNvcmVCdWlsdGluTmFtZXMuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGlucy5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZFR5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOworCitjbGFzcyBET01DbGllbnRJc29TdWJzcGFjZXM7CiBjbGFzcyBE
T01Jc29TdWJzcGFjZXM7CiAKLWNsYXNzIEpTVk1DbGllbnREYXRhIDogcHVibGljIEpTQzo6Vk06
OkNsaWVudERhdGEgeworY2xhc3MgSlNIZWFwRGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSlNIZWFwRGF0YSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5k
IGNsYXNzIEpTVk1DbGllbnREYXRhOworcHVibGljOgorICAgIEpTSGVhcERhdGEoSGVhcCYpOwor
CisgICAgc3RhdGljIEpTSGVhcERhdGEqIGVuc3VyZUhlYXBEYXRhKEhlYXAmKTsKKworICAgIExv
Y2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKyAgICBET01Jc29TdWJzcGFjZXMmIHN1YnNw
YWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNlcy5nZXQoKTsgfQorCisgICAgVmVjdG9yPElzb1N1
YnNwYWNlKj4mIG91dHB1dENvbnN0cmFpbnRTcGFjZXMoKSB7IHJldHVybiBtX291dHB1dENvbnN0
cmFpbnRTcGFjZXM7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBm
b3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAg
ICAgICBmb3IgKGF1dG8qIHNwYWNlIDogbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzKQorICAgICAg
ICAgICAgZnVuYygqc3BhY2UpOworICAgIH0KKworICAgIElzb1N1YnNwYWNlKiBmaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4g
c3BhY2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6
ZXhjaGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9CisKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7
CisKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGU7CisgICAg
SXNvSGVhcENlbGxUeXBlIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZTsKKyAgICBJc29IZWFw
Q2VsbFR5cGUgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZTsKK3B1YmxpYzoKKyAgICBJc29IZWFw
Q2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdzsKKyAgICBJc29IZWFwQ2VsbFR5
cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOworICAgIElz
b0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUmVtb3RlRE9NV2luZG93OworICAgIElz
b0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGU7CisgICAg
SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJHbG9iYWxTY29w
ZTsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVh
cENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7CisjZW5kaWYKKyAgICBJc29I
ZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZTsKKyNpZiBF
TkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5
cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOworI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xl
dEdsb2JhbFNjb3BlOworI2VuZGlmCisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBl
Rm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OworCitwcml2YXRlOgorICAgIElzb1N1
YnNwYWNlIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV9k
b21Db25zdHJ1Y3RvclNwYWNlOworICAgIElzb1N1YnNwYWNlIG1fZG9tTmFtZXNwYWNlT2JqZWN0
U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV9kb21XaW5kb3dQcm9wZXJ0aWVzU3BhY2U7CisgICAg
SXNvU3Vic3BhY2UgbV9ydW50aW1lQXJyYXlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtX3J1bnRp
bWVNZXRob2RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtX3J1bnRpbWVPYmplY3RTcGFjZTsKKyAg
ICBJc29TdWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV9pZGJT
ZXJpYWxpemF0aW9uU3BhY2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPiBtX2Zp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPERPTUlzb1N1YnNwYWNlcz4gbV9zdWJzcGFjZXM7CisgICAgVmVjdG9yPElzb1N1YnNwYWNl
Kj4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOworfTsKKworCitjbGFzcyBKU1ZNQ2xpZW50RGF0
YSA6IHB1YmxpYyBWTTo6Q2xpZW50RGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNW
TUNsaWVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQgY2xhc3Mg
Vk1Xb3JsZEl0ZXJhdG9yOwogCiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNWTUNsaWVudERhdGEo
SlNDOjpWTSYpOworICAgIGV4cGxpY2l0IEpTVk1DbGllbnREYXRhKFZNJik7CiAKICAgICB2aXJ0
dWFsIH5KU1ZNQ2xpZW50RGF0YSgpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2
b2lkIGluaXROb3JtYWxXb3JsZChKU0M6OlZNKiwgV29ya2VyVGhyZWFkVHlwZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgaW5pdE5vcm1hbFdvcmxkKFZNKiwgV29ya2VyVGhyZWFk
VHlwZSk7CiAKICAgICBET01XcmFwcGVyV29ybGQmIG5vcm1hbFdvcmxkKCkgeyByZXR1cm4gKm1f
bm9ybWFsV29ybGQ7IH0KIApAQCAtNTksMzEgKzEyOCwzMyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
d29ybGRTZXQucmVtb3ZlKCZ3b3JsZCk7CiAgICAgfQogCisgICAgSlNIZWFwRGF0YSYgaGVhcERh
dGEoKSB7IHJldHVybiAqbV9oZWFwRGF0YTsgfQorCiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyYg
YnVpbHRpbk5hbWVzKCkgeyByZXR1cm4gbV9idWlsdGluTmFtZXM7IH0KICAgICBKU0J1aWx0aW5G
dW5jdGlvbnMmIGJ1aWx0aW5GdW5jdGlvbnMoKSB7IHJldHVybiBtX2J1aWx0aW5GdW5jdGlvbnM7
IH0KICAgICAKLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBkb21CdWlsdGluQ29uc3RydWN0b3JTcGFj
ZSgpIHsgcmV0dXJuIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2U7IH0KLSAgICBKU0M6Oklz
b1N1YnNwYWNlJiBkb21Db25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21Db25zdHJ1Y3Rv
clNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2Uo
KSB7IHJldHVybiBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJz
cGFjZSYgZG9tV2luZG93UHJvcGVydGllc1NwYWNlKCkgeyByZXR1cm4gbV9kb21XaW5kb3dQcm9w
ZXJ0aWVzU3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBydW50aW1lQXJyYXlTcGFjZSgp
IHsgcmV0dXJuIG1fcnVudGltZUFycmF5U3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBy
dW50aW1lTWV0aG9kU3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVNZXRob2RTcGFjZTsgfQotICAg
IEpTQzo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGlt
ZU9iamVjdFNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgd2luZG93UHJveHlTcGFjZSgp
IHsgcmV0dXJuIG1fd2luZG93UHJveHlTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIGlk
YlNlcmlhbGl6YXRpb25TcGFjZSgpIHsgcmV0dXJuIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOyB9
Ci0gICAgSlNDOjpJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNl
LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JT
cGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gc3BhY2UpIHsgbV9maWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhjaGFuZ2Uoc3BhY2UsIG51
bGxwdHIpOyB9Ci0KLSAgICBWZWN0b3I8SlNDOjpJc29TdWJzcGFjZSo+JiBvdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOyB9CisgICAgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlJiBkb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpIHsgcmV0dXJu
IG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGRvbUNvbnN0cnVjdG9yU3BhY2UoKSB7IHJldHVybiBtX2RvbUNvbnN0cnVjdG9yU3BhY2U7
IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbU5hbWVzcGFjZU9iamVjdFNwYWNlKCkg
eyByZXR1cm4gbV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSYgZG9tV2luZG93UHJvcGVydGllc1NwYWNlKCkgeyByZXR1cm4gbV9kb21XaW5kb3dQ
cm9wZXJ0aWVzU3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVBcnJh
eVNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lQXJyYXlTcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSYgcnVudGltZU1ldGhvZFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lTWV0aG9k
U3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmplY3RTcGFjZSgp
IHsgcmV0dXJuIG1fcnVudGltZU9iamVjdFNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlJiB3aW5kb3dQcm94eVNwYWNlKCkgeyByZXR1cm4gbV93aW5kb3dQcm94eVNwYWNlOyB9Cisg
ICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBpZGJTZXJpYWxpemF0aW9uU3BhY2UoKSB7IHJldHVy
biBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9CisgICAgdm9pZCBzZXRG
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvclNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFjZSwgbnVsbHB0cik7IH0KKworLy8gICAg
VmVjdG9yPElzb1N1YnNwYWNlKj4mIG91dHB1dENvbnN0cmFpbnRTcGFjZXMoKSB7IHJldHVybiBt
X291dHB1dENvbnN0cmFpbnRTcGFjZXM7IH0KKy8vCisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgorLy8gICAgdm9pZCBmb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKGNvbnN0IEZ1bmMm
IGZ1bmMpCisvLyAgICB7CisvLyAgICAgICAgZm9yIChhdXRvKiBzcGFjZSA6IG1fb3V0cHV0Q29u
c3RyYWludFNwYWNlcykKKy8vICAgICAgICAgICAgZnVuYygqc3BhY2UpOworLy8gICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGZvckVhY2hPdXRwdXRDb25zdHJh
aW50U3BhY2UoY29uc3QgRnVuYyYgZnVuYykKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byogc3Bh
Y2UgOiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXMpCi0gICAgICAgICAgICBmdW5jKCpzcGFjZSk7
Ci0gICAgfQotCi0gICAgRE9NSXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9z
dWJzcGFjZXMuZ2V0KCk7IH0KKyAgICBET01DbGllbnRJc29TdWJzcGFjZXMmIGNsaWVudFN1YnNw
YWNlcygpIHsgcmV0dXJuICptX2NsaWVudFN1YnNwYWNlcy5nZXQoKTsgfQogCiBwcml2YXRlOgog
ICAgIEhhc2hTZXQ8RE9NV3JhcHBlcldvcmxkKj4gbV93b3JsZFNldDsKQEAgLTkyLDQwICsxNjMs
NDMgQEAgcHJpdmF0ZToKICAgICBKU0J1aWx0aW5GdW5jdGlvbnMgbV9idWlsdGluRnVuY3Rpb25z
OwogICAgIFdlYkNvcmVCdWlsdGluTmFtZXMgbV9idWlsdGluTmFtZXM7CiAKLSAgICBKU0M6Oklz
b0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZTsKLSAgICBKU0M6Oklzb0hl
YXBDZWxsVHlwZSBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGU7Ci0gICAgSlNDOjpJc29IZWFw
Q2VsbFR5cGUgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZTsKLXB1YmxpYzoKLSAgICBKU0M6Oklz
b0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTRE9NV2luZG93OwotICAgIEpTQzo6SXNv
SGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZTsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUmVtb3RlRE9N
V2luZG93OwotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNXb3Jr
ZXJHbG9iYWxTY29wZTsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZv
ckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGU7Ci0jZW5kaWYKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxs
VHlwZUZvckpTV29ya2xldEdsb2JhbFNjb3BlOwotI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJ
KQotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZTsKLSNlbmRpZgotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgSlNDOjpJ
c29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3Bl
OwotI2VuZGlmCi0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0lE
QlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q7Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpJc29TdWJz
cGFjZSBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2Ug
bV9kb21Db25zdHJ1Y3RvclNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9kb21OYW1lc3Bh
Y2VPYmplY3RTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fZG9tV2luZG93UHJvcGVydGll
c1NwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9ydW50aW1lQXJyYXlTcGFjZTsKLSAgICBK
U0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZU1ldGhvZFNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3Bh
Y2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX3dpbmRvd1By
b3h5U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NSXNvU3Vic3Bh
Y2VzPiBtX3N1YnNwYWNlczsKLSAgICBWZWN0b3I8SlNDOjpJc29TdWJzcGFjZSo+IG1fb3V0cHV0
Q29uc3RyYWludFNwYWNlczsKKyAgICBKU0hlYXBEYXRhKiBtX2hlYXBEYXRhOworLy8gICAgSXNv
SGVhcENlbGxUeXBlIG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlOworLy8gICAgSXNvSGVhcENl
bGxUeXBlIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZTsKKy8vICAgIElzb0hlYXBDZWxsVHlw
ZSBtX3dpbmRvd1Byb3h5SGVhcENlbGxUeXBlOworLy9wdWJsaWM6CisvLyAgICBJc29IZWFwQ2Vs
bFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdzsKKy8vICAgIElzb0hlYXBDZWxsVHlw
ZSBtX2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7CisvLyAgICBJ
c29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1JlbW90ZURPTVdpbmRvdzsKKy8vICAg
IElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGU7Cisv
LyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlOworLy8jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorLy8gICAgSXNvSGVhcENlbGxU
eXBlIG1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7CisvLyNlbmRp
ZgorLy8gICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFs
U2NvcGU7CisvLyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKy8vICAgIElzb0hlYXBDZWxs
VHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU7CisvLyNlbmRp
ZgorLy8jaWYgRU5BQkxFKFdFQl9BVURJTykKKy8vICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBD
ZWxsVHlwZUZvckpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU7CisvLyNlbmRpZgorLy8gICAgSXNv
SGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2Jq
ZWN0OworLy8KKy8vcHJpdmF0ZToKKworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2RvbUJ1
aWx0aW5Db25zdHJ1Y3RvclNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2RvbUNv
bnN0cnVjdG9yU3BhY2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fZG9tTmFtZXNwYWNl
T2JqZWN0U3BhY2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fZG9tV2luZG93UHJvcGVy
dGllc1NwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3J1bnRpbWVBcnJheVNwYWNl
OworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3J1bnRpbWVNZXRob2RTcGFjZTsKKyAgICBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7CisgICAgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlIG1fd2luZG93UHJveHlTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxET01DbGllbnRJc29TdWJzcGFjZXM+IG1fY2xpZW50U3Vi
c3BhY2VzOworLy8gICAgVmVjdG9yPElzb1N1YnNwYWNlKj4gbV9vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDU1LDEzICszMDU1LDEzIEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pXG4iKTsKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTtcbiIpOwogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTtc
biIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pO1xuIik7CiAKICAgICAj
IHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKQEAgLTQ4NDAs
MzcgKzQ4NDAsNTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAKICAgICBHZW5l
cmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJs
ZTsKIAorICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01DbGllbnRJc29TdWJzcGFjZXMuaCIpOwog
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jv
cy5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAk
e2NsYXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNw
YWNlRm9ySW1wbChWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTtcbiIpOwotICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7XG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCkpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIHNwYWNlO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTtc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKSlc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7XG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7XG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoIXNwYWNlKSB7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7XG4iKTsKKwogICAgIGlmIChJc0RPTUdsb2JhbE9iamVjdCgk
aW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzcGFjZXMubV9z
dWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENlbGxUeXBlRm9yJHtjbGFz
c05hbWV9LCAke2NsYXNzTmFtZX0pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfSwgJHtjbGFzc05hbWV9KTtcbiIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFz
c05hbWV9PiB8fCAhJHtjbGFzc05hbWV9OjpuZWVkc0Rlc3RydWN0aW9uKTtcbiIpOwotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4pXG4iKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZh
Y2VOYW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCAke2NsYXNzTmFtZX0pO1xu
Iik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGVsc2VcbiIpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFj
ZU5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCAke2NsYXNzTmFtZX0pO1xuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1l
fTo6bmVlZHNEZXN0cnVjdGlvbik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgJHtjbGFzc05hbWV9PilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAke2NsYXNzTmFtZX0pO1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBlbHNlXG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7Y2xhc3NO
YW1lfSk7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVy
ZmFjZU5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7XG4iKTsKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxl
LWNvZGVcIilcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludClcbiIpOwotIyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xhc3NOYW1l
fTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHMpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY2xpZW50RGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTtcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludClcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRc
biIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHNwYWNlO1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwor
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CiAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hp
bGRyZW4pIHsKQEAgLTY3MjEsMjkgKzY3MzQsNDAgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSAke2l0ZXJhdG9yTmFtZX1CYXNlOwogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtp
dGVyYXRvck5hbWV9LmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
ICR7aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRlcmF0b3JOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PikKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksICR7
aXRlcmF0b3JOYW1lfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCAke2l0ZXJhdG9yTmFtZX0p
OwotICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5h
bWV9LmdldCgpOworICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOworICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKSkKKyAgICAgICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKKworICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OworCisgICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgICAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1l
fS5nZXQoKTsKKyAgICAgICAgaWYgKCFzcGFjZSkgeworICAgICAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRlcmF0b3JO
YW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4p
CisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsICR7aXRlcmF0b3JO
YW1lfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCAk
e2l0ZXJhdG9yTmFtZX0pOworICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJh
dG9yTmFtZX0gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNvZGVcIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9y
TmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAg
ICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9ICR7aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAog
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgICAgIH0KKwor
ICAgICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9
IG1ha2VVbmlxdWU8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7
CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKQEAgLTc1MjYsNyArNzU1MCw3IEBAIHN1YiBHZW5lcmF0ZVByb3RvdHlwZURl
Y2xhcmF0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIERFQ0xBUkVfSU5GTztcbiIp
OwogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPlxuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSlcbiIp
OworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoJHtwcm90b3R5cGVDbGFzc05hbWV9LCBC
YXNlKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7XG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBteSAkaWRsRmlsZU5hbWVzTGlzdDsKIG15ICR0ZXN0
R2xvYmFsQ29udGV4dE5hbWU7CiBteSAkc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGU7CiBteSAk
aXNvU3Vic3BhY2VzSGVhZGVyRmlsZTsKK215ICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxl
OwogbXkgJGNvbnN0cnVjdG9yc0hlYWRlckZpbGU7CiBteSAkd2luZG93Q29uc3RydWN0b3JzRmls
ZTsKIG15ICR3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGU7CkBAIC03OSw2ICs4MCw3
IEBAIEdldE9wdGlvbnMoJ2RlZmluZXM9cycgPT4gXCRkZWZpbmVzLAogICAgICAgICAgICAndGVz
dEdsb2JhbENvbnRleHROYW1lPXMnID0+IFwkdGVzdEdsb2JhbENvbnRleHROYW1lLAogICAgICAg
ICAgICAnc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGU9cycgPT4gXCRzdXBwbGVtZW50YWxEZXBl
bmRlbmN5RmlsZSwKICAgICAgICAgICAgJ2lzb1N1YnNwYWNlc0hlYWRlckZpbGU9cycgPT4gXCRp
c29TdWJzcGFjZXNIZWFkZXJGaWxlLAorICAgICAgICAgICAnY2xpZW50SVNPU3Vic3BhY2VzSGVh
ZGVyRmlsZT1zJyA9PiBcJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUsCiAgICAgICAgICAg
ICdjb25zdHJ1Y3RvcnNIZWFkZXJGaWxlPXMnID0+IFwkY29uc3RydWN0b3JzSGVhZGVyRmlsZSwK
ICAgICAgICAgICAgJ3dpbmRvd0NvbnN0cnVjdG9yc0ZpbGU9cycgPT4gXCR3aW5kb3dDb25zdHJ1
Y3RvcnNGaWxlLAogICAgICAgICAgICAnd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
PXMnID0+IFwkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlLApAQCAtMTEwLDYgKzEx
Miw3IEBAIGRpZSgnTXVzdCBzcGVjaWZ5IElETCBhdHRyaWJ1dGVzIGZpbGUgdXMKIAogJHN1cHBs
ZW1lbnRhbERlcGVuZGVuY3lGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCRzdXBwbGVtZW50YWxE
ZXBlbmRlbmN5RmlsZSk7CiAkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5l
ZWRlZCgkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSk7CiskY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVy
RmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSk7
CiAkY29uc3RydWN0b3JzSGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkY29uc3RydWN0
b3JzSGVhZGVyRmlsZSk7CiAkd2luZG93Q29uc3RydWN0b3JzRmlsZSA9IEN5Z3dpblBhdGhJZk5l
ZWRlZCgkd2luZG93Q29uc3RydWN0b3JzRmlsZSk7CiAkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnNGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCR3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9yc0ZpbGUpOwpAQCAtMTY5LDYgKzE3Miw3IEBAIG15ICRpc29TdWJzcGFjZXNIZWFkZXJDb2Rl
ID0gPDxFTkQ7CiAjcHJhZ21hIG9uY2UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogY2xhc3MgRE9NSXNvU3Vic3BhY2VzIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShET01Jc29TdWJzcGFjZXMpOwpAQCAtMTc3LDYgKzE4MSwyMiBAQCBwdWJsaWM6CiAg
ICAgRE9NSXNvU3Vic3BhY2VzKCkgPSBkZWZhdWx0OwogRU5ECiAKK215ICRjbGllbnRJU09TdWJz
cGFjZXNIZWFkZXJDb2RlID0gPDxFTkQ7CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK2NsYXNzIERPTUNsaWVudElzb1N1YnNw
YWNlcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRE9NQ2xpZW50SXNvU3Vic3BhY2VzKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRChET01DbGllbnRJc29TdWJzcGFjZXMpOworcHVi
bGljOgorICAgIERPTUNsaWVudElzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKK0VORAorCiBteSBA
Y29uc3RydWN0b3JzID0gKCk7CiBteSAkY29uc3RydWN0b3JzSGVhZGVyQ29kZSA9IDw8RU5EOwog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CkBAIC0yNDIsOSArMjYyLDExIEBAIGZvcmVhY2gg
bXkgJGlkbEZpbGVOYW1lIChzb3J0IGtleXMgJWlkbEYKIAogICAgIG15ICRpc0NhbGxiYWNrSW50
ZXJmYWNlID0gaXNDYWxsYmFja0ludGVyZmFjZUZyb21JREwoJGlkbEZpbGUpOwogICAgIGlmICgh
JGlzQ2FsbGJhY2tJbnRlcmZhY2UpIHsKLSAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUg
Lj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7
aW50ZXJmYWNlTmFtZX07XG4iOworICAgICAgICAkaXNvU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAi
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7aW50ZXJmYWNl
TmFtZX07XG4iOworICAgICAgICAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAg
IHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vic3BhY2VG
b3Ike2ludGVyZmFjZU5hbWV9O1xuIjsKICAgICAgICAgaWYgKGNvbnRhaW5zSXRlcmFibGVJbnRl
cmZhY2VGcm9tSURMKCRpZGxGaWxlKSkgewotICAgICAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRl
ckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFj
ZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRvcjtcbiI7CisgICAgICAgICAgICAkaXNvU3Vic3Bh
Y2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV9zdWJz
cGFjZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRvcjtcbiI7CisgICAgICAgICAgICAkY2xpZW50
SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9SXRlcmF0b3I7
XG4iOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTcsNiArMzM5LDEyIEBAIGlmICgkaXNvU3Vi
c3BhY2VzSGVhZGVyRmlsZSkgewogICAgIFdyaXRlRmlsZUlmQ2hhbmdlZCgkaXNvU3Vic3BhY2Vz
SGVhZGVyRmlsZSwgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUpOwogfQogCitpZiAoJGNsaWVudElT
T1N1YnNwYWNlc0hlYWRlckZpbGUpIHsKKyAgICAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29k
ZSAuPSAifTtcbiI7CisgICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIn0gLy8g
bmFtZXNwYWNlIFdlYkNvcmVcbiI7CisgICAgV3JpdGVGaWxlSWZDaGFuZ2VkKCRjbGllbnRJU09T
dWJzcGFjZXNIZWFkZXJGaWxlLCAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSk7Cit9CisK
IGlmICgkY29uc3RydWN0b3JzSGVhZGVyRmlsZSkgewogICAgIG15ICRjb25zdHJ1Y3RvcnNMZW5n
dGggPSBAY29uc3RydWN0b3JzOwogICAgICRjb25zdHJ1Y3RvcnNIZWFkZXJDb2RlIC49ICJ9O1xu
IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIGJvb2wgUnVudGltZUFycmF5OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2Uq
IFJ1bnRpbWVBcnJheTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIFJ1bnRpbWVBcnJheTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+cnVudGltZUFycmF5U3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0
YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CiAgICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9CkBAIC04
OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgUnVudGltZUFycmF5KFZNJiwgU3RydWN0dXJlKik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEJpbmRpbmdzOjpBcnJheSopOwogCi0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYpOwogCiAgICAgQmluZGluZ3NBcnJheSogbV9hcnJheTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDcgKzgyLDcgQEAgYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAg
IHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSXNvU3Vic3BhY2UqIFJ1bnRpbWVNZXRo
b2Q6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIFJ1bnRp
bWVNZXRob2Q6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5ydW50aW1lTWV0aG9kU3BhY2Uo
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lv
biAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihSdW50aW1lTWV0aG9kKSwg
IlJ1bnRpbWVNZXRob2Qgc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVycmlk
ZSBzdWJzcGFjZUZvcjw+KCkiKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDZWxsVHlwZTo6ZGVz
dHJveSA9PSBKU0M6OkpTQ2VsbDo6ZGVzdHJveSk7CkBAIC03NCw3ICs3NCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKIAogICAgIEJpbmRpbmdz
OjpNZXRob2QqIG1fbWV0aG9kOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDcgKzMxMyw3IEBAIEV4
Y2VwdGlvbiogdGhyb3dSdW50aW1lT2JqZWN0SW52YWxpZEFjY2UKICAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsICJUcnlpbmcgdG8gYWNjZXNzIG9iamVjdCBmcm9tIGRlc3Ry
b3llZCBwbHVnLWluLiIpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogUnVudGltZU9iamVjdDo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IFJ1bnRpbWVPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1
cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPnJ1bnRpbWVP
YmplY3RTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihSdW50aW1lT2JqZWN0KSwgIlJ1
bnRpbWVPYmplY3Qgc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVycmlkZSBz
dWJzcGFjZUZvcjw+KCkiKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDZWxsVHlwZTo6ZGVzdHJv
eSA9PSBSdW50aW1lT2JqZWN0OjpkZXN0cm95KTsKQEAgLTg2LDcgKzg2LDcgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOworICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOwogCiAgICAgUmVmUHRyPEluc3RhbmNl
PiBtX2luc3RhbmNlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KQEAgLTEzOCw3ICsxMzgs
NyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB0b0Jvb2xlYW4oSlNHbG9iYWxPYmplY3QqKSBjb25z
dDsgLy8gRklYTUU6IEN1cnJlbnRseSB0aGlzIGlzIGJyb2tlbiBiZWNhdXNlIG5vbmUgb2YgdGhl
IHN1cGVyY2xhc3NlcyBhcmUgbWFya2VkIHZpcnR1YWwuIFdlIG5lZWQgdG8gc29sdmUgdGhpcyBp
biB0aGUgbG9uZ2VyIHRlcm0uCiAKLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChWTSYpOworICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChWTSYpOwogCiAgICAgUmVmUHRyPE9iamNJbnN0YW5jZT4gX2luc3RhbmNlOwogICAgIFN0
cmluZyBtX2l0ZW07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRp
bWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLm1tCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzMiwxMyArMzMyLDEzIEBAIGJvb2wg
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjp0b0Jvb2xlYW4oSlMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLUpTQzo6SXNvU3Vic3BhY2UqIE9iamNGYWxsYmFja09iamVjdEltcDo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIE9iamNGYWxsYmFj
a09iamVjdEltcDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxKU0M6Oklzb1N1YnNwYWNlUGVyVk0+IHBlclZNKFtdIChKU0M6OlZNJiB2
bSkgewotICAgICAgICByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlModm0uZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIE9iamNGYWxsYmFja09iamVjdEltcCk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEpTQzo6SXNvU3Vic3BhY2VQZXJWTT4gcGVyVk0oW10gKEpTQzo6
SGVhcCYgaGVhcCkgeworICAgICAgICByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlMoaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIE9iamNGYWxsYmFja09iamVjdEltcCk7
CiAgICAgfSk7Ci0gICAgcmV0dXJuICZwZXJWTS5nZXQoKS5mb3JWTSh2bSk7CisgICAgcmV0dXJu
ICZwZXJWTS5nZXQoKS5jbGllbnRJc29TdWJzcGFjZWZvclZNKHZtKTsKIH0KIAotfQotfQorfSAv
LyBuYW1lc3BhY2UgQmluZGluZ3MKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9EaXNhbGxvd1ZNRW50cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvRGlzYWxs
b3dWTUVudHJ5LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9KYXZhU2NyaXB0Q29yZS9EaXNhbGxvd1ZNRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDcgKzMyLDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiB1c2luZyBKU0M6OkRpc2Fs
bG93Vk1FbnRyeTsKIHVzaW5nIEpTQzo6SlNMb2NrSG9sZGVyOwotdXNpbmcgSlNDOjpMYXJnZUhl
YXA7Cit1c2luZyBKU0M6OkhlYXBUeXBlOwogdXNpbmcgSlNDOjpWTTsKIAogc3RhdGljIHZvaWQg
ZW50ZXJTY29wZShWTSYgdm0sIHVuc2lnbmVkIGVudHJ5Q291bnQsIHVuc2lnbmVkIHJlbWFpbmlu
Z0VudHJpZXMpCkBAIC01MSw3ICs1MSw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfRGlzYWxsb3dW
TUVudHJ5LCBOZXMKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjpp
bml0aWFsaXplKCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1Jl
ZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7
CiAgICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNU
X0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7CkBAIC02NSw3ICs2NSw3IEBAIFRFU1Qo
SmF2YVNjcmlwdENvcmVfRGlzYWxsb3dWTUVudHJ5LCBDb3AKICAgICBXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplKCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6
Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVh
cFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7
CkBAIC04OSw3ICs4OSw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfRGlzYWxsb3dWTUVudHJ5LCBD
b3AKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXpl
KCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAg
IFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgewog
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VRKHZtLmRp
c2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L0phdmFTY3JpcHRDb3JlL1Byb3BlcnR5U2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eVNsb3QuY3BwCShyZXZpc2lv
biAyODYzNjYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL1By
b3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgewogCiB1c2luZyBKU0M6OkpTTG9ja0hvbGRlcjsKLXVzaW5nIEpTQzo6TGFy
Z2VIZWFwOwordXNpbmcgSlNDOjpIZWFwVHlwZTsKIHVzaW5nIEpTQzo6UHJvcGVydHlTbG90Owog
dXNpbmcgSlNDOjpWTTsKIHVzaW5nIEpTQzo6anNVbmRlZmluZWQ7CkBAIC00Miw3ICs0Miw3IEBA
IFRFU1QoSmF2YVNjcmlwdENvcmVfUHJvcGVydHlTbG90LCBEaXNhbGwKICAgICBXVEY6OmluaXRp
YWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplKCk7CiAKLSAgICBWTSYgdm0g
PSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVh
dGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50
LCAwdSk7CkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfUHJvcGVydHlTbG90
LCBWTUlucXUKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0
aWFsaXplKCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigp
OworICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAg
ICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VR
KHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7CkBAIC0xMDIsNyArMTAyLDcgQEAgVEVTVChK
YXZhU2NyaXB0Q29yZV9Qcm9wZXJ0eVNsb3QsIENvcHlBcwogICAgIFdURjo6aW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAotICAgIFZNJiB2bSA9IFZNOjpj
cmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0mIHZtID0gVk06OmNyZWF0ZShIZWFw
VHlwZTo6TGFyZ2UpLmxlYWtSZWYoKTsKICAgICB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOwogICAgICAgICBFWFBFQ1RfRVEodm0uZGlzYWxsb3dWTUVudHJ5Q291bnQsIDB1KTsK
</data>
<flag name="commit-queue"
          id="471380"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446054</attachid>
            <date>2021-12-06 10:57:25 -0800</date>
            <delta_ts>2021-12-06 16:17:19 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-233878.patch</filename>
            <type>text/plain</type>
            <size>246588</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkx
LDcgKzkxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSBXVEZfSUdOTwogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAot
ICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0mIHZt
ID0gVk06OmNyZWF0ZShIZWFwVHlwZTo6TGFyZ2UpLmxlYWtSZWYoKTsKICAgICB7CiAgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1ODgsNyArMzU4OCw3IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUm
IG9wdGlvbnMsIGIKIHsKICAgICBXb3JrZXIgd29ya2VyKFdvcmtlcnM6OnNpbmdsZXRvbigpKTsK
ICAgICAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAg
IFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgaWYg
KCFpc1dvcmtlciAmJiBvcHRpb25zLm1fY2FuQmxvY2tJc0ZhbHNlKQogICAgICAgICB2bS5tX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IEpTQzo6U2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIoZmFsc2UpKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYs
NyBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFs
TWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgVk0qIHZtID0gJlZNOjpjcmVhdGUo
TGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0qIHZtID0gJlZNOjpjcmVhdGUoSGVhcFR5cGU6
OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBD
b21tYW5kTGluZSBvcHRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uYXBpR2xvYmFsT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXBpVmFsdWVXcmFwcGVy
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw3ICsxMzksNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbklt
CiBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwg
SlNBUElXcmFwcGVyT2JqZWN0KTsKIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1
YnNwYWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNj
ZXNzOjpPbk1haW5UaHJlYWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5jYWxsYmFja0NvbnN0cnVjdG9yU3BhY2U8
bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3
LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmNhbGxiYWNrRnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0cnVjdHVyZSogSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamUKIH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJz
cGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6
Ok9uTWFpblRocmVhZDoKQEAgLTEzMyw3ICsxMzMsNyBAQCBJc29TdWJzcGFjZSogSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsCiB9CiAKIHRlbXBsYXRlIDw+Ci1Jc29TdWJzcGFjZSogSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNw
YWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtLCBtb2RlKTsKICAgICB9CkBA
IC0xOTksNyArMTk5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mLCBTdWJzcGFjZUFjY2Vzcyk7CisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJiwgU3Vic3Bh
Y2VBY2Nlc3MpOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMX0FUVFJJ
QlVURVMgY3VzdG9tVG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRl
cm5hbEZ1bmN0aW9uIEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ub2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg5LDcgKzkwLDcgQEAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgSlNDYWxsYmFja09iagog
fQogCiB0ZW1wbGF0ZSA8PgotSXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFw
cGVyR2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdy
YXBwZXJPYmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTAzLDcgKzEwMyw3IEBAIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIEpTQ2FsbGJhY2tPYmoK
IH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUp
CitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxs
YmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzY0NhbGxiYWNrRnVu
Y3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI3Nyw3ICsyMjc3LDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFsbG9jYXRp
bmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoKS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworLy8gICAgICAgICAgICAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCkuYWxsb2Nh
dG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAg
ICAgICAgICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UoKS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxs
b2NhdGUoc2NyYXRjaEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzgsNyAr
MTA3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHYKICAgICBz
dHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIHN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIAotICAgIFZNOjpT
cGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CisgICAgSGVhcDo6U3Bh
Y2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMTY2OCw3ICsxNjY4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgIH07CiAgICAgdXBkYXRlQWN0aXZpdHkoKTsKIAot
ICAgIFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5yZW1vdmUodGhpcyk7Cisg
ICAgSGVhcDo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOwog
CiAgICAgLy8gSW4gQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUg
ZGVjaWRlZCB0byBza2lwIHZpc2l0aW5nIHRoaXMKICAgICAvLyBjb2RlQmxvY2suIEJ5IHRoZSB0
aW1lIHdlIGdldCBoZXJlLCB3ZSdyZSBkb25lIHdpdGggdGhlIHZlcmlmaWVyIEdDLiBTbywgbGV0
J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxv
Y2suaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V2YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6
CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJu
ICZ2bS5jb2RlQmxvY2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBFdmFsQ29kZUJsb2Nr
KiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1
cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0
aW9uQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCw5IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOwor
ICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1
bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAgICAgREVD
TEFSRV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5jb2Rl
QmxvY2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2smIG90aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5
ICs0MCw5IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNl
OworICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3Rh
dGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywg
UHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyODYz
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRFdmFsQ29kZUJsb2Nr
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9ja1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTEsNyArMjUxLDcgQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdAog
ICAgICAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LnNldCh2bSwgdGhpcywgcmVz
dWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHZtLnVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlU3BhY2UoKS5zZXQuYWRkKHRoaXMpOworICAgIHZtLmhlYXAudW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQuYWRkKHRoaXMpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpmaW5hbGl6CiAgICAgICAgIGNsZWFySWZEZWFkKG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxs
KTsKICAgICAgICAgY2xlYXJJZkRlYWQobV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7
CiAgICAgICAgIGlmIChpc0NsZWFyZWQgJiYgIWlzU3RpbGxWYWxpZCkKLSAgICAgICAgICAgIHZt
LnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKS5zZXQucmVtb3ZlKHRoaXMpOworICAg
ICAgICAgICAgdm0uaGVhcC51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNl
dC5yZW1vdmUodGhpcyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS51bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAmdm0udW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQg
dW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwg
SlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+
IHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBzdGQ6Om9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJv
bm1lbnQ+IHBhcmVudFByaXZhdGVOYW1lRW52aXJvbm1lbnQsIERlcml2ZWRDb250ZXh0VHlwZSBk
ZXJpdmVkQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NG
aWVsZEluaXRpYWxpemVyLCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCBwcml2YXRlQnJhbmRSZXF1
aXJlbWVudCwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGZhbHNlKQpA
QCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fdW5saW5rZWRDb2Rl
QmxvY2tGb3JDYWxsLmNsZWFyKCk7CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuY2xlYXIoKTsKLSAgICAgICAgdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFj
ZSgpLnNldC5yZW1vdmUodGhpcyk7CisgICAgICAgIHZtLmhlYXAudW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQucmVtb3ZlKHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQg
cmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBMZXhpY2FsU2NvcGVGZWF0dXJlcyBs
ZXhpY2FsU2NvcGVGZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2tTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2tTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5kZWJ1Z2dlclNjb3BlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVT
dWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE2ICs0NSw2IEBAIENvbXBsZXRlU3Vi
c3BhY2U6On5Db21wbGV0ZVN1YnNwYWNlKCkKIHsKIH0KIAotQWxsb2NhdG9yIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQot
ewotICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1vZGUpOwotfQotCi12
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVm
ZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci19Ci0KIEFsbG9jYXRvciBDb21wbGV0ZVN1YnNw
YWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBpbmRleCA9
IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpOwpAQCAtMTIzLDkgKzExMyw5IEBA
IHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgdm0udmVy
aWZ5Q2FuR0MoKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7Ci0gICAgCi0gICAgaWYg
KEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSh2
bS5oZWFwLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVs
bCk7CisKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKSkKKyAgICAgIHJldHVy
biBhbGxvY2F0b3IuYWxsb2NhdGUodm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIAogICAgIGlmIChzaXplIDw9IE9wdGlvbnM6
OnByZWNpc2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFj
ZTo6bGFyZ2VDdXRvZmYpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBs
ZXRlU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5
LDggQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgc3Vic3BhY2VzIHNw
ZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMiLCBidXQgdGhhdCdzIHRlbXBv
cmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgx
NTU5Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUp
IGZpbmFsOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxs
b2NhdG9yRm9yTW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoVk0mLCBzaXplX3QsIEdD
RGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBmaW5hbDsKICAgICB2b2lk
KiBhbGxvY2F0ZU5vblZpcnR1YWwoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICB2b2lkKiByZWFsbG9jYXRlUHJlY2lzZUFsbG9jYXRp
b25Ob25WaXJ0dWFsKFZNJiwgSGVhcENlbGwqLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICAKQEAgLTYyLDYgKzYwLDIxIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMb2NhbEFsbG9jYXRvcj4+IG1fbG9jYWxBbGxv
Y2F0b3JzOwogfTsKIAorLy9jbGFzcyBDb21wbGV0ZVN1YnNwYWNlIHsKKy8vcHVibGljOgorLy8g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGxldGVTdWJzcGFjZShDb21wbGV0ZVN1YnNwYWNlJik7
CisvLyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29tcGxldGVTdWJzcGFjZSgpOworLy8KKy8vICAg
IEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9k
ZSk7CisvLworLy8gICAgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0Rl
ZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisvLworLy9wcml2YXRlOgor
Ly8gICAgQ29tcGxldGVTdWJzcGFjZSYgbV9zZXJ2ZXI7CisvLy8vICAgIExvY2FsQWxsb2NhdG9y
IG1fbG9jYWxBbGxvY2F0b3I7CisvL307CisKKwogQUxXQVlTX0lOTElORSBBbGxvY2F0b3IgQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZSBtb2RlKQogewogICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1
dG9mZikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIklzb0lubGluZWRIZWFwQ2VsbFR5cGVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSXNvU3Vic3BhY2VQZXJWTS5oIgogI2luY2x1ZGUgIkpJVFN0
dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgpAQCAtMTEzLDcgKzExNCw3IEBAIGRvdWJsZSBt
YXhQYXVzZU1TKGRvdWJsZSB0aGlzUGF1c2VNUykKIAogc2l6ZV90IG1pbkhlYXBTaXplKEhlYXBU
eXBlIGhlYXBUeXBlLCBzaXplX3QgcmFtU2l6ZSkKIHsKLSAgICBpZiAoaGVhcFR5cGUgPT0gTGFy
Z2VIZWFwKSB7CisgICAgaWYgKGhlYXBUeXBlID09IEhlYXBUeXBlOjpMYXJnZSkgewogICAgICAg
ICBkb3VibGUgcmVzdWx0ID0gc3RkOjptaW4oCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KE9wdGlvbnM6OmxhcmdlSGVhcFNpemUoKSksCiAgICAgICAgICAgICByYW1TaXplICogT3B0
aW9uczo6c21hbGxIZWFwUkFNRnJhY3Rpb24oKSk7CkBAIC0zOTMsMTAgKzM5NCwxMCBAQCBIZWFw
OjpIZWFwKFZNJiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBzeW1ib2xUYWJsZVNwYWNl
IElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBT
eW1ib2xUYWJsZSkgLy8gSGFzaDoweGM1MjE1YWZkCiAgICAgLCBleGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlc1dpdGhDb25zdHJhaW50cyhleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCiAg
ICAgLCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJzKGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VTcGFjZSkKLSAgICAsIGNvZGVCbG9ja1NwYWNlIElTT19TVUJTUEFDRV9J
TklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBDb2RlQmxvY2spIC8vIEhh
c2g6MHg3N2U2NmVjOQotICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEZ1bmN0aW9uRXhlY3V0
YWJsZSkgLy8gSGFzaDoweDVkMTU4ZjMKLSAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFByb2dy
YW1FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NTI3Yzc3ZTcKLSAgICAsIHVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxI
ZWFwQ2VsbFR5cGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4ZjZiODI4
ZDkKKyAgICAsIGNvZGVCbG9ja1NwYWNlQW5kU2V0IElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBDb2RlQmxvY2spIC8vIEhhc2g6MHg3N2U2NmVj
OQorICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lOSVQo
KnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZSkg
Ly8gSGFzaDoweDVkMTU4ZjMKKyAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFByb2dy
YW1FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NTI3Yzc3ZTcKKyAgICAsIHVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3BhY2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJs
ZUNlbGxIZWFwQ2VsbFR5cGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4
ZjZiODI4ZDkKIAogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKQEAgLTQ0Nyw2ICs0NDgs
OSBAQCBIZWFwOjp+SGVhcCgpCiAgICAgCiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrIDogbV9s
b2dpY2FsbHlFbXB0eVdlYWtCbG9ja3MpCiAgICAgICAgIFdlYWtCbG9jazo6ZGVzdHJveSgqdGhp
cywgYmxvY2spOworCisgICAgZm9yIChhdXRvKiBwZXJWTUlzb1N1YnNwYWNlIDogcGVyVk1Jc29T
dWJzcGFjZXMpCisgICAgICAgIHBlclZNSXNvU3Vic3BhY2UtPnJlbGVhc2VJc29TdWJzcGFjZSgq
dGhpcyk7CiB9CiAKIGJvb2wgSGVhcDo6aXNQYWdlZE91dCgpCkBAIC02OTEsNyArNjk1LDcgQEAg
dm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZQogewogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxG
dW5jdGlvbkV4ZWN1dGFibGU+KGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNwYWNlKTsKKyAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1bmN0aW9uRXhlY3V0YWJsZT4o
ZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc3BhY2UpOwogICAgIGZpbmFsaXplTWFya2Vk
VW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3ltYm9sVGFibGU+KHN5bWJvbFRhYmxlU3BhY2UpOwog
ICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZT4oZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyk7IC8v
IFdlIHJ1biB0aGlzIGJlZm9yZSBDb2RlQmxvY2sncyB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBz
aW5jZSBDb2RlQmxvY2sgbG9va3MgYXQgdGhlIG93bmVyIGV4ZWN1dGFibGUncyBpbnN0YWxsZWQg
Q29kZUJsb2NrIGluIGl0cyBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseS4KICAgICBmb3JFYWNoQ29k
ZUJsb2NrU3BhY2UoCkBAIC02OTksNyArNzAzLDcgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxGaW5hbGl6ZQogICAgICAgICAgICAgdGhpcy0+ZmluYWxpemVNYXJrZWRVbmNvbmRp
dGlvbmFsRmluYWxpemVyczxDb2RlQmxvY2s+KHNwYWNlLnNldCk7CiAgICAgICAgIH0pOwogICAg
IGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3RydWN0dXJlUmFyZURhdGE+
KHN0cnVjdHVyZVJhcmVEYXRhU3BhY2UpOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25h
bEZpbmFsaXplcnM8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3BhY2Uuc2V0KTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZVNwYWNlQW5kU2V0LnNldCk7CiAgICAgaWYgKG1fd2Vha1NldFNwYWNlKQogICAgICAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha1NldD4oKm1fd2Vha1Nl
dFNwYWNlKTsKICAgICBpZiAobV93ZWFrTWFwU3BhY2UpCkBAIC0xMDU4LDcgKzEwNjIsNyBAQCB2
b2lkIEhlYXA6OmRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcyhECiAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fY29sbGVjdGlvblNjb3BlKTsKIAogICAgIEhlYXBJdGVyYXRpb25TY29wZSBoZWFwSXRl
cmF0aW9uU2NvcGUoKnRoaXMpOwotICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uu
c2V0LmZvckVhY2hMaXZlQ2VsbCgKKyAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
QW5kU2V0LnNldC5mb3JFYWNoTGl2ZUNlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGws
IEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4o
Y2VsbCk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGUodm0pOwpAQCAtMzMwMyw0
ICszMzA3LDE5NyBAQCBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCiAK
ICN1bmRlZiBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCiAKKworbmFt
ZXNwYWNlIEdDQ2xpZW50IHsKKworI2RlZmluZSBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3Vi
c3BhY2UpIHN1YnNwYWNlKGhlYXAuc3Vic3BhY2UpCisjZGVmaW5lIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQoc3Vic3BhY2UpIHN1YnNwYWNlKGhlYXAuc3Vic3Bh
Y2UjI0FuZFNldC5zcGFjZSkKKworSGVhcDo6SGVhcChKU0M6OkhlYXAmIGhlYXApCisgICAgOiBt
X3NlcnZlcihoZWFwKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGFycmF5U3BhY2Up
CisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoYmlnSW50U3BhY2UpCisgICAgLCBDTElF
TlRfSVNPX1NVQlNQQUNFX0lOSVQoY2FsbGVlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVQoY2xvbmVkQXJndW1lbnRzU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoZGF0ZUluc3RhbmNlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQo
ZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoZXhjZXB0aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9J
TklUKGZ1bmN0aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZ2V0dGVy
U2V0dGVyU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZ2xvYmFsTGV4aWNh
bEVudmlyb25tZW50U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoaW50ZXJu
YWxGdW5jdGlvblNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGpzUHJveHlT
cGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChuYXRpdmVFeGVjdXRhYmxlU3Bh
Y2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobnVtYmVyT2JqZWN0U3BhY2UpCisg
ICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQocGxhaW5PYmplY3RTcGFjZSkKKyAgICAsIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwcm9taXNlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NV
QlNQQUNFX0lOSVQocHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlKQorICAgICwgQ0xJRU5UX0lT
T19TVUJTUEFDRV9JTklUKHByb3BlcnR5VGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVChyZWdFeHBTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChy
ZWdFeHBPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChyb3BlU3Ry
aW5nU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc2NvcGVkQXJndW1lbnRz
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3BhcnNlQXJyYXlWYWx1ZU1h
cFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cmluZ1NwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cmluZ09iamVjdFNwYWNlKQorICAgICwgQ0xJ
RU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cnVjdHVyZUNoYWluU3BhY2UpCisgICAgLCBDTElFTlRf
SVNPX1NVQlNQQUNFX0lOSVQoc3RydWN0dXJlUmFyZURhdGFTcGFjZSkKKyAgICAsIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChzdHJ1Y3R1cmVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChicmFuZGVkU3RydWN0dXJlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoc3ltYm9sVGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9G
Uk9NX1NQQUNFX0FORF9TRVQoY29kZUJsb2NrU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVRfRlJPTV9TUEFDRV9BTkRfU0VUKGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChwcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0Vf
QU5EX1NFVCh1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQoreworfQorCitIZWFwOjp+
SGVhcCgpCit7CisgICAgZm9yIChhdXRvKiBwZXJWTUlzb1N1YnNwYWNlIDogcGVyVk1Jc29TdWJz
cGFjZXMpCisgICAgICAgIHBlclZNSXNvU3Vic3BhY2UtPnJlbGVhc2VDbGllbnRJc29TdWJzcGFj
ZSh2bSgpKTsKK30KKworI3VuZGVmIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVAorI3VuZGVmIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQKKworCisjZGVmaW5lIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhuYW1lKSBcCisgICAgSXNvU3Vi
c3BhY2UqIEhlYXA6Om5hbWUjI1Nsb3coKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghbV8j
I25hbWUpOyBcCisgICAgICAgIExvY2tlciBsb2NrZXIgeyBzZXJ2ZXIoKS5tX2xvY2sgfTsgXAor
ICAgICAgICBKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXJTcGFjZSA9ICpzZXJ2ZXIoKS5uYW1lPFN1
YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ+KCk7IFwKKyAgICAgICAgYXV0byBzcGFjZSA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+KHNlcnZlclNwYWNlKTsgXAorICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOyBcCisgICAgICAgIG1fIyNuYW1lID0gV1RGTW92ZShzcGFjZSk7IFwKKyAg
ICAgICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgfQorCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpR2xvYmFsT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpVmFsdWVXcmFwcGVyU3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXJyYXlCdWZmZXJTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcnJheUl0ZXJhdG9yU3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXN5bmNHZW5lcmF0b3JT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhiaWdJbnQ2NEFy
cmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYmlnSW50
T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYmln
VWludDY0QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyhib29sZWFuT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coYm91bmRGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGNhbGxiYWNrQ29uc3RydWN0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja0dsb2JhbE9iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja09iamVjdFNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGN1c3RvbUdldHRlckZ1
bmN0aW9uU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY3Vz
dG9tU2V0dGVyRnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhkYXRhVmlld1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGRlYnVnZ2VyU2NvcGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhlcnJvckluc3RhbmNlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coZmxvYXQzMkFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coZmxvYXQ2NEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coZnVuY3Rpb25SYXJlRGF0YVNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGdlbmVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGdsb2JhbE9iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGluamVjdGVkU2NyaXB0SG9zdFNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludDhBcnJheVNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludDE2QXJyYXlTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnQzMkFycmF5U3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coamF2YVNjcmlwdENhbGxG
cmFtZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzTW9k
dWxlUmVjb3JkU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
bWFwQnVja2V0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
bWFwSXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhtYXBTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhtb2R1
bGVOYW1lc3BhY2VPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHByb3h5T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cocHJveHlSZXZva2VTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoZXJT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzZXRCdWNrZXRT
cGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzZXRJdGVyYXRv
clNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNldFNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNoYWRvd1JlYWxtU3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3RyaWN0RXZhbEFj
dGl2YXRpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhz
dHJpbmdJdGVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKHNvdXJjZUNvZGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhzeW1ib2xTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhzeW1ib2xPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbENhbGVuZGFyU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxEdXJhdGlvblNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsSW5zdGFudFNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsUGxhaW5UaW1l
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxU
aW1lWm9uZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVp
bnQ4QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1
aW50OENsYW1wZWRBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHVpbnQxNkFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1codWludDMyQXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh1bmxpbmtlZEV2YWxDb2RlQmxvY2tTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyh1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1codW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cod2Vha01hcFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHdlYWtTZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyh3ZWFrT2JqZWN0UmVmU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cod2l0aFNjb3BlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coZmluYWxpemF0aW9uUmVnaXN0cnlTcGFjZSkKKyNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGFw
aVdyYXBwZXJPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQorI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJf
QVBJX0VOQUJMRUQKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlX
cmFwcGVyT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1coanNjQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGNhbGxiYWNrQVBJV3JhcHBlckdsb2JhbE9iamVjdFNwYWNlKQorI2VuZGlm
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bENvbGxhdG9yU3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bERhdGVUaW1l
Rm9ybWF0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50
bERpc3BsYXlOYW1lc1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGludGxMaXN0Rm9ybWF0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coaW50bExvY2FsZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGludGxOdW1iZXJGb3JtYXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhpbnRsUGx1cmFsUnVsZXNTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRJdGVyYXRvclNw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50
ZXJTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2Vn
bWVudHNTcGFjZSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRp
b25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3Nl
bWJseUZ1bmN0aW9uU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1cod2ViQXNzZW1ibHlHbG9iYWxTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNZW1vcnlTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseU1vZHVsZVNwYWNlKQorRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNz
ZW1ibHlUYWJsZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KHdlYkFzc2VtYmx5VGFnU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKKyNlbmRpZgorCisjdW5kZWYg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XCisKKyNkZWZpbmUgRFlOQU1J
Q19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVJfU0xPVyhuYW1lKSBcCisgICAgSXNvU3Vic3Bh
Y2UqIEhlYXA6Om5hbWUjI1Nsb3coKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghbV8jI25h
bWUpOyBcCisgICAgICAgIExvY2tlciBsb2NrZXIgeyBzZXJ2ZXIoKS5tX2xvY2sgfTsgXAorICAg
ICAgICBKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXJTcGFjZSA9ICpzZXJ2ZXIoKS5uYW1lPFN1YnNw
YWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ+KCk7IFwKKyAgICAgICAgYXV0byBzcGFjZSA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+KHNlcnZlclNwYWNlKTsgXAorICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOyBcCisgICAgICAgIG1fIyNuYW1lID0gV1RGTW92ZShzcGFjZSk7IFwKKyAgICAg
ICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgfQorCitEWU5BTUlDX1NQQUNFX0FORF9T
RVRfREVGSU5FX01FTUJFUl9TTE9XKGV2YWxFeGVjdXRhYmxlU3BhY2UpCitEWU5BTUlDX1NQQUNF
X0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XKG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2Up
CisKKyN1bmRlZiBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XCisKK30g
Ly8gbmFtZXNwYWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIGNsYXNz
IEhlYXA7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBIZWFwVmVyaWZpZXI7CiBjbGFzcyBJ
bmNyZW1lbnRhbFN3ZWVwZXI7CitjbGFzcyBJc29TdWJzcGFjZVBlclZNOwogY2xhc3MgSklUU3R1
YlJvdXRpbmU7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKQEAgLTEw
NiwxMCArMTA3LDE0IEBAIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiB9
CiAKK25hbWVzcGFjZSBHQ0NsaWVudCB7CitjbGFzcyBIZWFwOworfQorCiB0eXBlZGVmIEhhc2hD
b3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsKIHR5cGVkZWYgSGFzaENvdW50ZWRT
ZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNldDsKIAotZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVh
cCwgTGFyZ2VIZWFwIH07CitlbnVtIGNsYXNzIEhlYXBUeXBlIDogdWludDhfdCB7IFNtYWxsLCBM
YXJnZSB9OwogCiBjbGFzcyBIZWFwVXRpbDsKIApAQCAtMzg5LDYgKzM5NCw4IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNNYXJraW5nRm9yR0NWZXJpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNN
YXJraW5nRm9yR0NWZXJpZmllcjsgfQogCisgICAgTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9j
azsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CiAgICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTQyMCw2ICs0MjcsOCBAQCBwcml2YXRlOgogICAg
IGNsYXNzIEhlYXBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBUaHJlYWQ7CiAKKyAgICBm
cmllbmQgY2xhc3MgR0NDbGllbnQ6OkhlYXA7CisKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBtaW5FeHRyYU1lbW9yeSA9IDI1NjsKICAgICAKICAgICBjbGFzcyBDRmluYWxpemVyT3duZXIg
ZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKQEAgLTU3MCw2ICs1NzksNyBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgdmVyaWZ5R0MoKTsKIAorICAgIExvY2sgbV9sb2NrOwogICAg
IGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0YXRvclN0
YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5uaW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6
ZTsKQEAgLTg3Myw3ICs4ODMsNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNv
U3Vic3BhY2UqIG5hbWUjI1Nsb3coKTsgXAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4gbV8jI25hbWU7CiAKLQogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCiAgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNl
KQpAQCAtMTAxNywzNSArMTAyNiwyMTYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfTsKICAg
ICAKLSAgICBTcGFjZUFuZFNldCBjb2RlQmxvY2tTcGFjZTsKKyAgICBTcGFjZUFuZFNldCBjb2Rl
QmxvY2tTcGFjZUFuZFNldDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBmb3JFYWNoQ29kZUJsb2NrU3BhY2UoY29uc3QgRnVuYyYgZnVuYykKICAgICB7CiAgICAgICAg
IC8vIFRoaXMgc2hvdWxkIG5vdCBpbmNsdWRlIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UgYmVj
YXVzZSB0aGlzIGlzIGFib3V0IHN1YnNjbGFzc2VzIG9mCiAgICAgICAgIC8vIEpTQzo6Q29kZUJs
b2NrLgotICAgICAgICBmdW5jKGNvZGVCbG9ja1NwYWNlKTsKKyAgICAgICAgZnVuYyhjb2RlQmxv
Y2tTcGFjZUFuZFNldCk7CiAgICAgfQogCiAgICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklO
RV9NRU1CRVIoZXZhbEV4ZWN1dGFibGVTcGFjZSkKICAgICBEWU5BTUlDX1NQQUNFX0FORF9TRVRf
REVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQotICAgIFNwYWNlQW5k
U2V0IGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOwotICAgIFNwYWNlQW5kU2V0IHByb2dyYW1FeGVj
dXRhYmxlU3BhY2U7CisgICAgU3BhY2VBbmRTZXQgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRT
ZXQ7CisgICAgU3BhY2VBbmRTZXQgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZUFuZFNldDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2NyaXB0RXhlY3V0YWJs
ZVNwYWNlKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewogICAgICAgICBpZiAobV9ldmFsRXhlY3V0
YWJsZVNwYWNlKQogICAgICAgICAgICAgZnVuYygqbV9ldmFsRXhlY3V0YWJsZVNwYWNlKTsKLSAg
ICAgICAgZnVuYyhmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSk7CisgICAgICAgIGZ1bmMoZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2VBbmRTZXQpOwogICAgICAgICBpZiAobV9tb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlKQogICAgICAgICAgICAgZnVuYygqbV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZVNwYWNlKTsKLSAgICAgICAgZnVuYyhwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKTsKKyAgICAgICAg
ZnVuYyhwcm9ncmFtRXhlY3V0YWJsZVNwYWNlQW5kU2V0KTsKICAgICB9CiAKLSAgICBTcGFjZUFu
ZFNldCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIFNwYWNlQW5kU2V0IHVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQ7CiAKKyAgICBWZWN0b3I8SXNvU3Vi
c3BhY2VQZXJWTSo+IHBlclZNSXNvU3Vic3BhY2VzOwogI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5E
X1NFVF9ERUZJTkVfTUVNQkVSCiB9OwogCituYW1lc3BhY2UgR0NDbGllbnQgeworCitjbGFzcyBI
ZWFwIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwKTsKK3B1YmxpYzoKKyAgICBIZWFw
KEpTQzo6SGVhcCYpOworICAgIH5IZWFwKCk7CisKKyAgICBWTSYgdm0oKSBjb25zdDsKKyAgICBK
U0M6OkhlYXAmIHNlcnZlcigpIHsgcmV0dXJuIG1fc2VydmVyOyB9CisKK3ByaXZhdGU6CisgICAg
SlNDOjpIZWFwJiBtX3NlcnZlcjsKKworICAgIElzb1N1YnNwYWNlIGFycmF5U3BhY2U7CisgICAg
SXNvU3Vic3BhY2UgYmlnSW50U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgY2FsbGVlU3BhY2U7Cisg
ICAgSXNvU3Vic3BhY2UgY2xvbmVkQXJndW1lbnRzU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgY3Vz
dG9tR2V0dGVyU2V0dGVyU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZGF0ZUluc3RhbmNlU3BhY2U7
CisgICAgSXNvU3Vic3BhY2UgZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2U7CisgICAgSXNv
U3Vic3BhY2UgZXhjZXB0aW9uU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uU3BhY2U7CisgICAgSXNv
U3Vic3BhY2UgZ2V0dGVyU2V0dGVyU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZ2xvYmFsTGV4aWNh
bEVudmlyb25tZW50U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgaW50ZXJuYWxGdW5jdGlvblNwYWNl
OworICAgIElzb1N1YnNwYWNlIGpzUHJveHlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBuYXRpdmVF
eGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbnVtYmVyT2JqZWN0U3BhY2U7CisgICAg
SXNvU3Vic3BhY2UgcGxhaW5PYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwcm9taXNlU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2UgcHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOworICAgIElz
b1N1YnNwYWNlIHByb3BlcnR5VGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSByZWdFeHBTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSByZWdFeHBPYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBy
b3BlU3RyaW5nU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc2NvcGVkQXJndW1lbnRzU3BhY2U7Cisg
ICAgSXNvU3Vic3BhY2Ugc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOworICAgIElzb1N1YnNwYWNl
IHN0cmluZ1NwYWNlOworICAgIElzb1N1YnNwYWNlIHN0cmluZ09iamVjdFNwYWNlOworICAgIElz
b1N1YnNwYWNlIHN0cnVjdHVyZUNoYWluU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RydWN0dXJl
UmFyZURhdGFTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzdHJ1Y3R1cmVTcGFjZTsKKyAgICBJc29T
dWJzcGFjZSBicmFuZGVkU3RydWN0dXJlU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3ltYm9sVGFi
bGVTcGFjZTsKKworI2RlZmluZSBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5h
bWUpIFwKKyAgICB0ZW1wbGF0ZTxTdWJzcGFjZUFjY2VzcyBtb2RlPiBcCisgICAgSXNvU3Vic3Bh
Y2UqIG5hbWUoKSBcCisgICAgeyBcCisgICAgICAgIGlmIChtXyMjbmFtZSB8fCBtb2RlID09IFN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpIFwKKyAgICAgICAgICAgIHJldHVybiBtXyMjbmFt
ZS5nZXQoKTsgXAorICAgICAgICByZXR1cm4gbmFtZSMjU2xvdygpOyBcCisgICAgfSBcCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UqIG5hbWUjI1Nsb3coKTsgXAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV8jI25hbWU7CisKKyNpZiBKU0NfT0JKQ19BUElfRU5B
QkxFRAorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXBpV3JhcHBlck9i
amVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25TcGFjZSkKKyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVE
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc2NDYWxsYmFj
a0Z1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihj
YWxsYmFja0FQSVdyYXBwZXJHbG9iYWxPYmplY3RTcGFjZSkKKyNlbmRpZgorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXBpR2xvYmFsT2JqZWN0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlWYWx1ZVdyYXBwZXJTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFycmF5QnVmZmVyU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcnJheUl0ZXJhdG9yU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhc3luY0dlbmVyYXRvclNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50NjRBcnJh
eVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50T2Jq
ZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdVaW50
NjRBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYm9v
bGVhbk9iamVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
Ym91bmRGdW5jdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoY2FsbGJhY2tDb25zdHJ1Y3RvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoY2FsbGJhY2tHbG9iYWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrT2JqZWN0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY3VzdG9tU2V0dGVyRnVu
Y3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGRhdGFW
aWV3U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihkZWJ1Z2dl
clNjb3BlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihlcnJv
ckluc3RhbmNlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihm
bG9hdDMyQXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KGZsb2F0NjRBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoZnVuY3Rpb25SYXJlRGF0YVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoZ2VuZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihnbG9iYWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKGluamVjdGVkU2NyaXB0SG9zdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoaW50OEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnQxNkFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnQzMkFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc01vZHVsZVJlY29yZFNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobWFwQnVja2V0U3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtYXBJdGVyYXRvclNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVOYW1lc3BhY2VPYmplY3RTcGFjZSkKKyAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50
c1RhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3Jp
cHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHNldEJ1Y2tldFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoc2V0SXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHNldFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc2hhZG93UmVhbG1TcGFjZSk7CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihzdHJpY3RFdmFsQWN0aXZhdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoc3RyaW5nSXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHNvdXJjZUNvZGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHN5bWJvbFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoc3ltYm9sT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUih0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsQ2FsZW5kYXJTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsRHVyYXRpb25TcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsSW5zdGFu
dFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxQ
bGFpblRpbWVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRl
bXBvcmFsVGltZVpvbmVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHVpbnQ4QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHVpbnQ4Q2xhbXBlZEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih1aW50MTZBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIodWludDMyQXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHVubGlua2VkRXZhbENvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1NwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Uih1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGZpbmFsaXphdGlvblJlZ2lzdHJ5U3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWFrT2JqZWN0UmVmU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWFrU2V0U3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWFrTWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUih3aXRoU2NvcGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxDb2xsYXRvclNwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bERhdGVUaW1lRm9ybWF0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsRGlzcGxheU5hbWVzU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsTGlzdEZvcm1hdFNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bExvY2FsZVNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bE51bWJlckZvcm1h
dFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFBsdXJh
bFJ1bGVzU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRs
UmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihpbnRsU2VnbWVudEl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudGVyU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudHNTcGFjZSkKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlD
Q2FsbGVlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJB
c3NlbWJseUNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1lbW9y
eVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlNb2R1bGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKKyNl
bmRpZgorCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihldmFsRXhlY3V0
YWJsZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKKworI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIKKworICAgIElzb1N1YnNwYWNlIGNvZGVCbG9ja1NwYWNlOworICAgIElzb1N1
YnNwYWNlIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIHByb2dyYW1F
eGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGVTcGFjZTsKKworLy8gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4+IGlz
b1N1YnNwYWNlc05lZWRpbmdEZXN0cnVjdGlvbjsKK3B1YmxpYzoKKyAgICBWZWN0b3I8SXNvU3Vi
c3BhY2VQZXJWTSo+IHBlclZNSXNvU3Vic3BhY2VzOworCisgICAgZnJpZW5kIGNsYXNzIEpTQzo6
Vk07Cit9OworCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcwLDQgKzI3MCwxMyBAQCB2b2lkIEhlYXA6OmZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jCiAgICAgICAgIGZ1bmMoKnZpc2l0b3IpOwogfQogCituYW1lc3BhY2Ug
R0NDbGllbnQgeworCitBTFdBWVNfSU5MSU5FIFZNJiBIZWFwOjp2bSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICpiaXR3aXNlX2Nhc3Q8Vk0qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzKSAt
IE9CSkVDVF9PRkZTRVRPRihWTSwgY2xpZW50SGVhcCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBH
Q0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIElzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxsVHlwZSYgaGVhcENlbGxUeXBlLCBzaXpl
X3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9wdHI8
SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4mJiBhbGxvY2F0b3IpCiAgICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwKQogICAgICwgbV9kaXJlY3RvcnkoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtl
ZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkpCi0gICAgLCBtX2xvY2FsQWxsb2NhdG9yKCZtX2RpcmVj
dG9yeSkKICAgICAsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGxvY2F0b3IgPyBXVEZN
b3ZlKGFsbG9jYXRvcikgOiBtYWtlVW5pcXVlPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KG5h
bWUpKQogewogICAgIG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50ID0gbnVtYmVyT2ZMb3dl
clRpZXJDZWxsczsKQEAgLTU2LDE2ICs1NSw2IEBAIElzb1N1YnNwYWNlOjp+SXNvU3Vic3BhY2Uo
KQogewogfQogCi1BbGxvY2F0b3IgSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQotewotICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIG1vZGUpOwotfQotCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoVk0m
IHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIHJldHVybiBhbGxvY2F0ZU5v
blZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwotfQotCiB2
b2lkIElzb1N1YnNwYWNlOjpkaWRSZXNpemVCaXRzKHVuc2lnbmVkIGJsb2NrSW5kZXgpCiB7CiAg
ICAgbV9jZWxsU2V0cy5mb3JFYWNoKApAQCAtMTI5LDUgKzExOCwxNCBAQCB2b2lkIElzb1N1YnNw
YWNlOjpkZXN0cm95TG93ZXJUaWVyRnJlZUxpCiAgICAgfSk7CiB9CiAKK25hbWVzcGFjZSBHQ0Ns
aWVudCB7CisKK0lzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2
ZXIpCisgICAgOiBtX2xvY2FsQWxsb2NhdG9yKCZzZXJ2ZXIubV9kaXJlY3RvcnkpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJc29DZWxsU2V0
OwogCituYW1lc3BhY2UgR0NDbGllbnQgeworY2xhc3MgSXNvU3Vic3BhY2U7Cit9CisKIGNsYXNz
IElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBjb25zdCBIZWFwQ2VsbFR5
cGUmLCBzaXplX3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVu
aXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4mJiA9IG51bGxwdHIpOwpAQCAtNDIsMTIg
KzQ2LDYgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4gbV9kaXJl
Y3RvcnkuY2VsbFNpemUoKTsgfQogCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7Ci0KLSAgICB2b2lkKiBhbGxvY2F0
ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
IG92ZXJyaWRlOwotICAgIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotCiAgICAgdm9pZCBzd2Vl
cExvd2VyVGllckNlbGwoUHJlY2lzZUFsbG9jYXRpb24qKTsKICAgICB2b2lkIGNsZWFySXNvQ2Vs
bFNldEJpdChQcmVjaXNlQWxsb2NhdGlvbiopOwogCkBAIC02MCwyNCArNTgsNTUgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIGZyaWVuZCBj
bGFzcyBHQ0NsaWVudDo6SXNvU3Vic3BhY2U7CiAgICAgCiAgICAgdm9pZCBkaWRSZXNpemVCaXRz
KHVuc2lnbmVkIG5ld1NpemUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2sodW5z
aWduZWQgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9G
cmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgCisKKyAgICBzdGF0
aWMgSXNvU3Vic3BhY2UmIGZyb21CbG9ja0RpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSYpOworCiAg
ICAgQmxvY2tEaXJlY3RvcnkgbV9kaXJlY3Rvcnk7Ci0gICAgTG9jYWxBbGxvY2F0b3IgbV9sb2Nh
bEFsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4g
bV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQcmVj
aXNlQWxsb2NhdGlvbiwgUGFja2VkUmF3U2VudGluZWxOb2RlPFByZWNpc2VBbGxvY2F0aW9uPj4g
bV9sb3dlclRpZXJGcmVlTGlzdDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwg
UGFja2VkUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+PiBtX2NlbGxTZXRzOwogfTsKIAorQUxX
QVlTX0lOTElORSBJc29TdWJzcGFjZSYgSXNvU3Vic3BhY2U6OmZyb21CbG9ja0RpcmVjdG9yeShC
bG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PElz
b1N1YnNwYWNlKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmRpcmVjdG9yeSkgLSBPQkpFQ1Rf
T0ZGU0VUT0YoSXNvU3Vic3BhY2UsIG1fZGlyZWN0b3J5KSk7Cit9CisKK25hbWVzcGFjZSBHQ0Ns
aWVudCB7CisKK2NsYXNzIElzb1N1YnNwYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
c29TdWJzcGFjZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoSlNDOjpJc29TdWJzcGFjZSYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5Jc29TdWJzcGFjZSgpID0gZGVmYXVsdDsKKyAgICAvLyBtbGFtIEZJ
WE1FIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcmVsaW5xdWlzaCB0aGUgTG9jYWxBbGxvY2F0
b3IgdG8gdGhlIHNlcnZlciBvbiBkZXN0cnVjdGlvbi4KKworICAgIHNpemVfdCBjZWxsU2l6ZSgp
IHsgcmV0dXJuIG1fbG9jYWxBbGxvY2F0b3IuY2VsbFNpemUoKTsgfQorCisgICAgQWxsb2NhdG9y
IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKworICAg
IHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQq
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCisgICAgSlNDOjpJc29TdWJzcGFjZSYgc2VydmVy
KCk7CisKK3ByaXZhdGU6CisgICAgTG9jYWxBbGxvY2F0b3IgbV9sb2NhbEFsbG9jYXRvcjsKK307
CisKIEFMV0FZU19JTkxJTkUgQWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUp
ID09IGNlbGxTaXplKCkpOwogICAgIHJldHVybiBBbGxvY2F0b3IoJm1fbG9jYWxBbGxvY2F0b3Ip
OwogfQogCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiAjZGVmaW5lIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXBDZWxsVHlwZSwgdHlwZSkgKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2Ui
LCAoaGVhcCksIChoZWFwQ2VsbFR5cGUpLCBzaXplb2YodHlwZSksIHR5cGU6Om51bWJlck9mTG93
ZXJUaWVyQ2VsbHMpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVz
cGFjZSBHQ0NsaWVudCB7CisKIEFMV0FZU19JTkxJTkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9j
YXRlTm9uVmlydHVhbChWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9t
U2l6ZT4oc2l6ZSkgPT0gY2VsbFNpemUoKSk7CkBAIC0zNSw2ICszNyw4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit9
IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiBpbmxpbmUgdm9pZCBJc29TdWJzcGFjZTo6Y2xlYXJJ
c29DZWxsU2V0Qml0KFByZWNpc2VBbGxvY2F0aW9uKiBwcmVjaXNlQWxsb2NhdGlvbikKIHsKICAg
ICB1bnNpZ25lZCBsb3dlclRpZXJJbmRleCA9IHByZWNpc2VBbGxvY2F0aW9uLT5sb3dlclRpZXJJ
bmRleCgpOwpAQCAtNjAsNSArNjQsMTUgQEAgdm9pZCBJc29TdWJzcGFjZTo6Zm9yRWFjaExvd2Vy
VGllckZyZWVMaQogICAgIG1fbG93ZXJUaWVyRnJlZUxpc3QuZm9yRWFjaChmdW5jKTsKIH0KIAor
bmFtZXNwYWNlIEdDQ2xpZW50IHsKKworLy8gbWxhbSBGSVhNRSBkbyB3ZSBuZWVkIHRoaXM/IERl
bGV0ZSBpZiBub3QgdXNlZC4KK2lubGluZSBKU0M6Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZTo6
c2VydmVyKCkKK3sKKyAgICByZXR1cm4gSlNDOjpJc29TdWJzcGFjZTo6ZnJvbUJsb2NrRGlyZWN0
b3J5KG1fbG9jYWxBbGxvY2F0b3IuZGlyZWN0b3J5KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBH
Q0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwyNSArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSXNv
U3Vic3BhY2VQZXJWTTo6QXV0b3JlbW92aW5nSXNvU3Vic3BhY2UgZmluYWwgOiBwdWJsaWMgSXNv
U3Vic3BhY2UgewotcHVibGljOgotICAgIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKElzb1N1YnNw
YWNlUGVyVk0mIHBlclZNLCBDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxs
VHlwZSYgaGVhcENlbGxUeXBlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBJc29TdWJzcGFjZShu
YW1lLCBoZWFwLCBoZWFwQ2VsbFR5cGUsIHNpemUsIC8qIG51bWJlck9mTG93ZXJUaWVyQ2VsbHMg
Ki8gMCkKLSAgICAgICAgLCBtX3BlclZNKHBlclZNKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
fkF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyBtX3BlclZNLm1fbG9jayB9OwotICAgICAgICBtX3BlclZNLm1fc3Vic3BhY2VQZXJW
TS5yZW1vdmUoJnNwYWNlKCkuaGVhcCgpLnZtKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJ
c29TdWJzcGFjZVBlclZNJiBtX3BlclZNOwotfTsKLQotSXNvU3Vic3BhY2VQZXJWTTo6SXNvU3Vi
c3BhY2VQZXJWTShGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoVk0mKT4gc3Vic3BhY2VQYXJh
bWV0ZXJzKQorSXNvU3Vic3BhY2VQZXJWTTo6SXNvU3Vic3BhY2VQZXJWTShGdW5jdGlvbjxTdWJz
cGFjZVBhcmFtZXRlcnMoSGVhcCYpPiBzdWJzcGFjZVBhcmFtZXRlcnMpCiAgICAgOiBtX3N1YnNw
YWNlUGFyYW1ldGVycyhXVEZNb3ZlKHN1YnNwYWNlUGFyYW1ldGVycykpCiB7CiB9CkBAIC01OSwx
NiArNDEsNTkgQEAgSXNvU3Vic3BhY2VQZXJWTTo6fklzb1N1YnNwYWNlUGVyVk0oKQogICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQogCi1Jc29TdWJzcGFjZSYgSXNvU3Vic3BhY2VQ
ZXJWTTo6Zm9yVk0oVk0mIHZtKQorSXNvU3Vic3BhY2UmIElzb1N1YnNwYWNlUGVyVk06Omlzb1N1
YnNwYWNlZm9ySGVhcChIZWFwJiBoZWFwKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sg
fTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc3Vic3BhY2VQZXJIZWFwLmFkZCgmaGVhcCwgbnVsbHB0
cik7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIFN1YnNwYWNlUGFyYW1l
dGVycyBwYXJhbXMgPSBtX3N1YnNwYWNlUGFyYW1ldGVycyhoZWFwKTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBJc29TdWJzcGFjZShwYXJhbXMubmFtZSwgaGVhcCwgKnBh
cmFtcy5oZWFwQ2VsbFR5cGUsIHBhcmFtcy5zaXplLCAwKTsKKworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcC5sb2NrKCkgfTsKKyAgICAgICAgaGVhcC5wZXJWTUlzb1N1YnNwYWNlcy5hcHBl
bmQodGhpcyk7CisgICAgfQorICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30K
KworR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZVBlclZNOjpjbGllbnRJc29TdWJz
cGFjZWZvclZNKFZNJiB2bSkKIHsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xv
Y2sgfTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2NsaWVudFN1YnNwYWNlUGVyVk0uYWRkKCZ2
bSwgbnVsbHB0cik7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAg
ICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgSXNvU3Vic3Bh
Y2UmIHN1YnNwYWNlID0gaXNvU3Vic3BhY2Vmb3JIZWFwKHZtLmhlYXApOworCiAgICAgTG9ja2Vy
IGxvY2tlciB7IG1fbG9jayB9OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zdWJzcGFjZVBlclZNLmFk
ZCgmdm0sIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gbV9jbGllbnRTdWJzcGFjZVBlclZN
LmFkZCgmdm0sIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICBTdWJzcGFjZVBhcmFtZXRlcnMgcGFyYW1zID0gbV9zdWJzcGFjZVBhcmFtZXRlcnModm0pOwot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IEF1dG9yZW1vdmluZ0lzb1N1YnNw
YWNlKCp0aGlzLCBwYXJhbXMubmFtZSwgdm0uaGVhcCwgKnBhcmFtcy5oZWFwQ2VsbFR5cGUsIHBh
cmFtcy5zaXplKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2Uoc3Vic3BhY2UpOworICAgICAgICB2bS5jbGllbnRIZWFwLnBlclZNSXNv
U3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuICpyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogfQogCit2b2lkIElzb1N1YnNwYWNlUGVyVk06OnJlbGVhc2VJc29TdWJzcGFj
ZShIZWFwJiBoZWFwKQoreworICAgIElzb1N1YnNwYWNlKiBzdWJzcGFjZTsKKyAgICB7CisgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgc3Vic3BhY2UgPSBtX3N1YnNw
YWNlUGVySGVhcC50YWtlKCZoZWFwKTsKKyAgICB9CisgICAgZGVsZXRlIHN1YnNwYWNlOworfQor
Cit2b2lkIElzb1N1YnNwYWNlUGVyVk06OnJlbGVhc2VDbGllbnRJc29TdWJzcGFjZShWTSYgdm0p
Cit7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBjbGllbnRTdWJzcGFjZTsKKyAgICB7Cisg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgY2xpZW50U3Vic3BhY2Ug
PSBtX2NsaWVudFN1YnNwYWNlUGVyVk0udGFrZSgmdm0pOworICAgIH0KKyAgICBkZWxldGUgY2xp
ZW50U3Vic3BhY2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhl
YXA7CitjbGFzcyBWTTsKKwogLy8gVGhpcyBpcyBhbiBhcHByb3ByaWF0ZSB3YXkgdG8gc3Rhc2gg
SXNvU3Vic3BhY2VzIGZvciByYXJlbHktdXNlZCBjbGFzc2VzIG9yIGNsYXNzZXMgdGhhdCBhcmUg
bW9zdGx5CiAvLyBzdXJlIHRvIGJlIG1haW4tdGhyZWFkLW9ubHkuIEJ1dCBpZiBhIGNsYXNzIHR5
cGljYWxseSBnZXRzIGluc3RhbnRpYXRlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQKIC8vIG9u
Y2UsIHRoZW4gdGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgY29uY3VycmVudCBhbGxvY2F0aW9u
cyB3aWxsIHByb2JhYmx5IGNvbnRlbmQgb24gdGhpcyB0aGluZydzCkBAIC01MywxOCArNTYsMjAg
QEAgcHVibGljOgogICAgICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKICAgICB9OwogICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlUGVyVk0oRnVuY3Rpb248U3Vic3BhY2VQYXJh
bWV0ZXJzKFZNJik+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZVBlclZNKEZ1
bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhIZWFwJik+KTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB+SXNvU3Vic3BhY2VQZXJWTSgpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1
YnNwYWNlJiBmb3JWTShWTSYpOworICAgIElzb1N1YnNwYWNlJiBpc29TdWJzcGFjZWZvckhlYXAo
SGVhcCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY2xp
ZW50SXNvU3Vic3BhY2Vmb3JWTShWTSYpOwogCi1wcml2YXRlOgotICAgIGNsYXNzIEF1dG9yZW1v
dmluZ0lzb1N1YnNwYWNlOwotICAgIGZyaWVuZCBjbGFzcyBBdXRvcmVtb3ZpbmdJc29TdWJzcGFj
ZTsKKyAgICB2b2lkIHJlbGVhc2VJc29TdWJzcGFjZShIZWFwJik7CisgICAgdm9pZCByZWxlYXNl
Q2xpZW50SXNvU3Vic3BhY2UoVk0mKTsKIAorcHJpdmF0ZToKICAgICBMb2NrIG1fbG9jazsKLSAg
ICBIYXNoTWFwPFZNKiwgSXNvU3Vic3BhY2UqPiBtX3N1YnNwYWNlUGVyVk0gV1RGX0dVQVJERURf
QllfTE9DSyhtX2xvY2spOwotICAgIEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhWTSYpPiBt
X3N1YnNwYWNlUGFyYW1ldGVyczsKKyAgICBIYXNoTWFwPEhlYXAqLCBJc29TdWJzcGFjZSo+IG1f
c3Vic3BhY2VQZXJIZWFwIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBIYXNoTWFw
PFZNKiwgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKj4gbV9jbGllbnRTdWJzcGFjZVBlclZNIFdURl9H
VUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMo
SGVhcCYpPiBtX3N1YnNwYWNlUGFyYW1ldGVyczsKIH07CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNF
X1BBUkFNRVRFUlMoaGVhcENlbGxUeXBlLCB0eXBlKSA6OkpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6
U3Vic3BhY2VQYXJhbWV0ZXJzKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcENlbGxU
eXBlKSwgc2l6ZW9mKHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9j
YWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiAr
MTM0LDkgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoSAogICAgIGlm
IChMSUtFTFkocmVzdWx0ICE9IG51bGxwdHIpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCisg
ICAgLy8gbWxhbSBGSVhNRSBJIHRoaW5rIHdlIG5lZWQgdG8gc3luY2hyb25pemUgaGVyZSB0byBw
cmV2ZW50IGRpZmZlcmVudCBWTQorICAgIC8vIG1haW4gdGhyZWFkcyBmcm9tIHJhY2luZy4KKwog
ICAgIFN1YnNwYWNlKiBzdWJzcGFjZSA9IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlOwogICAgIGlm
IChzdWJzcGFjZS0+aXNJc29TdWJzcGFjZSgpKSB7CiAgICAgICAgIGlmICh2b2lkKiByZXN1bHQg
PSBzdGF0aWNfY2FzdDxJc29TdWJzcGFjZSo+KHN1YnNwYWNlKS0+dHJ5QWxsb2NhdGVGcm9tTG93
ZXJUaWVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgTG9j
YWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNSYXdTZQogICAgIAogcHVibGljOgogICAgIExvY2Fs
QWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7Ci0gICAgfkxvY2FsQWxsb2NhdG9yKCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkxvY2FsQWxsb2NhdG9yKCk7CiAgICAgCiAgICAgdm9pZCogYWxs
b2NhdGUoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsK
ICAgICAKQEAgLTU2LDcgKzU2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDZWxsU2l6ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2
b2lkKikgY29uc3Q7Ci0gICAgCisKKyAgICBCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gKm1fZGlyZWN0b3J5OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEJsb2NrRGlyZWN0b3J5OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TXV0YXRvclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TXV0YXRvclN0YXRlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL011dGF0b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLWVudW0gY2xhc3MgTXV0YXRvclN0YXRlIHsKK2VudW0gY2xhc3MgTXV0
YXRvclN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gVGhlIG11dGF0b3IgaXMgcnVubmluZyB3aGVu
IGl0J3Mgbm90IGluc2lkZSBhIEhlYXAgc2xvdyBwYXRoLgogICAgIFJ1bm5pbmcsCiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDkgKzU2LDYgQEAgcHVibGljOgogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7
CiAKLSAgICB2aXJ0dWFsIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JG
b3JNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKLSAgICAKICAgICB2
b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCiAgICAgdm9pZCBkaWRDcmVhdGVGaXJz
dERpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSB7IG1fZGlyZWN0b3J5Rm9yRW1w
dHlBbGxvY2F0aW9uID0gZGlyZWN0b3J5OyB9CkBAIC0xMTUsMTMgKzExMiwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZmlyc3REaXJlY3RvcnkgeyBudWxscHRyIH07CiAg
ICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0
ciB9OyAvLyBVc2VzIHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCiAgICAg
U2VudGluZWxMaW5rZWRMaXN0PFByZWNpc2VBbGxvY2F0aW9uLCBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8UHJlY2lzZUFsbG9jYXRpb24+PiBtX3ByZWNpc2VBbGxvY2F0aW9uczsKLSAgICBTdWJzcGFj
ZSogbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07Ci0K
LSAgICBDU3RyaW5nIG1fbmFtZTsKIAogICAgIGJvb2wgbV9pc0lzb1N1YnNwYWNlIHsgZmFsc2Ug
fTsKLXByb3RlY3RlZDoKICAgICB1aW50OF90IG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50
IHsgMCB9OworCisgICAgU3Vic3BhY2UqIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yIHsgbnVsbHB0ciB9OworCisgICAgQ1N0cmluZyBtX25hbWU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS5pbmplY3RlZFNjcmlwdEhvc3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uamF2YVNj
cmlwdENhbGxGcmFtZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBK
U0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BZ2dyZWdhdGVFcnJvclByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FnZ3JlZ2F0ZUVycm9yUHJvdG90
eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBFcnJvclByb3RvdHlwZUJhc2U7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
SXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90
b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5j
dGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVy
YXRvckZ1bmN0aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0dl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3lu
Y0dlbmVyYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5
bmNHZW5lcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jSXRl
cmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXRvbWljc09iamVjdCwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLmJpZ0ludE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0lu
dFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEJpZ0ludFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmJvb2xlYW5P
YmplY3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CcmFuZGVkU3RydWN0dXJlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBCcmFuZGVkU3RydWN0dXJlIGZpbmFsIDogcHVi
bGljIFN0CiBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuICZ2bS5icmFuZGVkU3RydWN0dXJlU3BhY2UoKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xv
bmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93
blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghQ2Vs
bFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5jbG9uZWRB
cmd1bWVudHNTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnNvbGVPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShDb25zb2xlT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEN1c3RvbVNl
dHRlciA9IFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uY3VzdG9tR2V0dGVy
U2V0dGVyU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9ET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9ET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVy
U2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBDdXN0b21HZXR0ZXJTZXR0ZXI7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5kb21BdHRyaWJ1dGVHZXR0ZXJT
ZXR0ZXJTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVJbnN0YW5jZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5kYXRlSW5zdGFuY2VTcGFjZSgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShEYXRlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5lcnJvckluc3RhbmNlU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoRXJyb3JQcm90b3R5cGVCYXNlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5ldmFsRXhlY3V0YWJs
ZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gJnZtLmV4Y2VwdGlvblNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaW5hbGl6YXRpb25SZWdpc3Ry
eVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GaW5hbGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShGaW5hbGl6YXRpb25SZWdpc3RyeVBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVybiAmdm0uZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5mdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUq
IGNyZWF0ZShWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5r
ZWRFeGVjdXRhYmxlLCBJbnRyaW5zaWMgaW50cmluc2ljLCBib29sIGlzSW5zaWRlT3JkaW5hcnlG
dW5jdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLmZ1bmN0aW9uUmFyZURhdGFTcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoR2VuZXJhdG9yRnVu
Y3Rpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
YXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShHZW5lcmF0b3JQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
JnZtLmdldHRlclNldHRlclNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsg
Ly8gVGhpcyBpcyBuZXZlciBhY2Nlc3NlZCBkaXJlY3RseSwgc2luY2UgdGhhdCB3b3VsZCBicmVh
ayBsaW5rYWdlIG9uIHNvbWUgY29tcGlsZXJzLgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChUeXBlID09IEhhc2hU
YWJsZVR5cGU6OktleSkKICAgICAgICAgICAgIHJldHVybiB2bS5zZXRCdWNrZXRTcGFjZTxtb2Rl
PigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFs
RnVuY3Rpb24uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBJbXBsZW1lbnRz
RGVmYXVsdEhhc0luc3RhbmNlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoQ2VsbFR5cGUpID09IHNpemVvZihJbnRlcm5hbEZ1bmN0aW9uKSwgIkludGVybmFsRnVuY3Rp
b24gc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVycmlkZSBzdWJzcGFjZUZv
cjw+KCkiKTsKICAgICAgICAgcmV0dXJuICZ2bS5pbnRlcm5hbEZ1bmN0aW9uU3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCShyZXZp
c2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLmludGxDb2xsYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEludGxDb2xsYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
aW50bERhdGVUaW1lRm9ybWF0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bERhdGVUaW1lRm9ybWF0UHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGlzcGxheU5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5pbnRsRGlzcGxheU5hbWVzU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lc1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bERpc3BsYXlOYW1l
c1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1h
dC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uaW50bExpc3RGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RG
b3JtYXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJs
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsTGlzdEZvcm1hdFByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50
bExvY2FsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKElu
dGxMb2NhbGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2
NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bE51bWJlckZvcm1hdFNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShJbnRsT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsUGx1cmFsUnVsZXNTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShJbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LmludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRp
dmVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsU2VnbWVu
dEl0ZXJhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0uaW50bFNlZ21lbnRlclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJQcm90b3R5cGUuaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEludGxTZWdtZW50ZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICBy
ZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50cy5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxTZWdtZW50c1NwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRzUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRzUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50c1Byb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxTZWdt
ZW50c1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRv
clByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0u
YXJyYXlTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmFycmF5QnVmZmVyU3BhY2U8
bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hcnJheUl0ZXJhdG9yU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3lu
Y0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hc3luY0dlbmVyYXRvclNwYWNlPG1vZGU+KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiAmdm0uYmlnSW50U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHN0YXRp
Y19hc3NlcnQoU3RydWN0dXJlRmxhZ3MgJiBJbXBsZW1lbnRzSGFzSW5zdGFuY2UsICIiKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS5ib3VuZEZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5j
ZSB8IEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5jYWxsZWVTcGFjZSgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5jdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLmN1c3RvbVNldHRlckZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lv
biAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgVHlwZWRBcnJheUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gVHlwZWRBcnJheUNvbnRl
bnRUeXBlOjpOb25lOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmRhdGFWaWV3U3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1By
b3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNEYXRhVmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkocmV2
aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6
YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uZmluYWxpemF0aW9uUmVnaXN0cnlTcGFjZTxtb2RlPigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgcmFyZURhdGFUYWcgPSAweDE7CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZnVuY3Rp
b25TcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmdlbmVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAsNyArMjYwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoQWRhcHRvcjo6dHlwZVZh
bHVlKSB7CiAgICAgICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZ2xvYmFs
TGV4aWNhbEVudmlyb25tZW50U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYxNiw3ICs2MTYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmdsb2JhbE9iamVjdFNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLm1hcFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGludGVybmFsRmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6
OmludGVybmFsRmllbGQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2
bS5tYXBJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTTW9kdWxlTG9h
ZGVyLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0ubW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uanNNb2R1bGVSZWNvcmRTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLm5hdGl2ZVN0
ZEZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNPTk9iamVjdCwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDwyPjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiAmdm0ucHJvbWlzZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKEpTUHJvbWlzZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8PCAx
KSAtIDE7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gJnZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc1B1dCB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2Vs
bFR5cGUpID09IHNpemVvZihKU1Byb3h5KSk7CiAgICAgICAgIHJldHVybiAmdm0uanNQcm94eVNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNo
UGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y3JpcHRGZXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc2NyaXB0RmV0Y2hlclNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLnNldFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGludGVybmFsRmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6Omlu
dGVybmFsRmllbGQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5z
ZXRJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2RlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLnNvdXJjZUNvZGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcg
KzEwOSw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzcGVjaWFsaXplIHRoZSBzdHJpbmcgc3Vic3Bh
Y2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHN3ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAg
ICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5nIGRpZG4ndCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdT
cGFjZSgpOwogICAgIH0KQEAgLTI2OCw3ICsyNjgsNyBAQCBjbGFzcyBKU1JvcGVTdHJpbmcgZmlu
YWwgOiBwdWJsaWMgSlNTdHJpCiAgICAgZnJpZW5kIGNsYXNzIEpTU3RyaW5nOwogcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnJvcGVT
dHJpbmdTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnN0cmluZ0l0ZXJhdG9y
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmgJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2Vha09iamVj
dFJlZlNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTY29wZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53aXRo
U2NvcGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTWFw
SXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3Rv
dHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoTWFwUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKE1hdGhPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEVycm9yUHJvdG90eXBlQmFzZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTmF0
aXZlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2
bS5uYXRpdmVFeGVjdXRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmpl
Y3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gJnZtLm51bWJlck9iamVjdFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBJc0ltbXV0
YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShPYmplY3RQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCw3IEBAIGJvb2wgY2Fu
VXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgXAogICAgIHYoR0NMb2dMZXZlbCwgbG9n
R0MsIEdDTG9nZ2luZzo6Tm9uZSwgTm9ybWFsLCAiZGVidWdnaW5nIG9wdGlvbiB0byBsb2cgR0Mg
YWN0aXZpdHkgKDAgPSBOb25lLCAxID0gQmFzaWMsIDIgPSBWZXJib3NlKSIpIFwKICAgICB2KEJv
b2wsIHVzZUdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUdsb2Jh
bEdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBnY0F0RW5kLCBmYWxz
ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIGpzYyBDTEkgd2lsbCBkbyBhIEdDIGJlZm9yZSBleGl0
aW5nIikgXAogICAgIHYoQm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1hbCwgIklm
IHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24gdGhlaXIg
c2xvdyBwYXRocy4iKSBcCiAgICAgdihCb29sLCBmb3JjZURpZERlZmVyR0NXb3JrLCBmYWxzZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgRGVmZXJHQyBkZXN0cnVjdGlvbnMg
dG8gcGVyZm9ybSBhIEdDLiIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAgICAg
ICByZXR1cm4gJnZtLnByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0
dXJuICZ2bS5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIFBy
b2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5VGFibGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcs
NyArMTI3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICZ2bS5wcm9wZXJ0eVRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90
b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ucHJveHlPYmplY3RTcGFjZTxtb2RlPigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2b2tlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2Uu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLnByb3h5UmV2b2tlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5oCShyZXZp
c2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoUmVmbGVjdE9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnJlZ0V4cFNwYWNl
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
IUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uLCAiIik7CiAgICAgICAgIHJldHVybiAmdm0ucmVn
RXhwT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKFJlZ0V4cFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAy
ODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBTdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKFJlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCFD
ZWxsVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiwgIiIpOwogICAgICAgICByZXR1cm4gJnZtLnNjb3Bl
ZEFyZ3VtZW50c1NwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zY29wZWRBcmd1bWVudHNU
YWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVh
ckNvZGUoSXNvQ2VsbAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoJlZNOjpT
cGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNldCk7Cisg
ICAgQVNTRVJUKCZIZWFwOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xl
YXJhYmxlQ29kZVNldCk7CiAgICAgY2xlYXJhYmxlQ29kZVNldC5yZW1vdmUodGhpcyk7CiB9CiAK
QEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZN
JiB2CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8mIGNsZWFyYWJsZUNvZGVTZXQg
PSBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSk7CisgICAgYXV0byYgY2xlYXJh
YmxlQ29kZVNldCA9IEhlYXA6OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpOwogICAg
IGlmIChoYXNDbGVhcmFibGVDb2RlKHZtKSkKICAgICAgICAgY2xlYXJhYmxlQ29kZVNldC5hZGQo
dGhpcyk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25G
aW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTZXRJdGVyYXRvclBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShTZXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93
UmVhbG1PYmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2hhZG93UmVhbG1PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNoYWRvd1JlYWxtU3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dS
ZWFsbVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NoYWRvd1JlYWxtUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2hhZG93UmVhbG1Qcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3Bh
cnNlQXJyYXlWYWx1ZU1hcFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAy
ODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNTY29wZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zdHJpY3RFdmFsQWN0aXZhdGlvblNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFN0cmlu
Z0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdPYmplY3RTcGFj
ZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAg
ICB+U3RydWN0dXJlKCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3RydWN0dXJlU3BhY2UoKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJ1Y3R1cmVDaGFpblNwYWNlKCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0u
c3RydWN0dXJlUmFyZURhdGFTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2wuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLnN5bWJvbFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFw
cGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLnN5bWJvbE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFN5bWJvbFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNyArNDU0LDcgQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgV1RGOjpJdGVyYXRvclJhbmdlPHR5cGVuYW1lIFByaXZhdGVOYW1lRW52
aXJvbm1lbnQ6Oml0ZXJhdG9yPiBQcml2YXRlTmFtZUl0ZXJhdG9yUmFuZ2U7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zeW1i
b2xUYWJsZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxDYWxlbmRhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXIuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS50ZW1wb3JhbENhbGVuZGFyU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxDYWxlbmRhclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxDYWxlbmRh
clByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVy
YXRpb24uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1w
b3JhbER1cmF0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbEluc3RhbnRTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5z
dGFudFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsSW5zdGFudFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnRQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3Jh
bEluc3RhbnRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsTm93
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxO
b3cuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxOb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShUZW1wb3JhbE5vdywgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbE9iamVjdC5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsT2JqZWN0LCBCYXNlKTsKICAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmgJKHJldmlzaW9uIDI4NjM2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsUGxhaW5UaW1lU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBs
YWluVGltZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
VGVtcG9yYWxQbGFpblRpbWVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsVGltZVpvbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbFRpbWVab25lLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0udGVtcG9yYWxUaW1lWm9uZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGlt
ZVpvbmVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsVGltZVpvbmVQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA5LDYgKzIwOSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwK
ICAgICAsIG1fcmFuZG9tKE9wdGlvbnM6OnNlZWRPZlZNUmFuZG9tRm9yRnV6emVyKCkgPyBPcHRp
b25zOjpzZWVkT2ZWTVJhbmRvbUZvckZ1enplcigpIDogY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIoKSkKICAgICAsIG1faW50ZWdyaXR5UmFuZG9tKCp0aGlzKQogICAgICwgaGVhcCgqdGhp
cywgaGVhcFR5cGUpCisgICAgLCBjbGllbnRIZWFwKGhlYXApCiAgICAgLCB2bVR5cGUodm1UeXBl
KQogICAgICwgY2xpZW50RGF0YShudWxscHRyKQogICAgICwgdG9wRW50cnlGcmFtZShudWxscHRy
KQpAQCAtNTU1LDcgKzU1Niw3IEBAIFZNJiBWTTo6c2hhcmVkSW5zdGFuY2UoKQogICAgIEdsb2Jh
bEpTTG9jayBnbG9iYWxMb2NrOwogICAgIFZNKiYgaW5zdGFuY2UgPSBzaGFyZWRJbnN0YW5jZUlu
dGVybmFsKCk7CiAgICAgaWYgKCFpbnN0YW5jZSkKLSAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJl
ZihuZXcgVk0oQVBJU2hhcmVkLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CisgICAgICAgIGluc3Rh
bmNlID0gYWRvcHRSZWYobmV3IFZNKEFQSVNoYXJlZCwgSGVhcFR5cGU6OlNtYWxsKSkubGVha1Jl
ZigpOwogICAgIHJldHVybiAqaW5zdGFuY2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDkgKzI1Myw5IEBAIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBzaGFyZWRJbnN0YW5jZUV4aXN0cygpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBWTSYgc2hhcmVkSW5zdGFuY2UoKTsKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8Vk0+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxs
SGVhcCwgV1RGOjpSdW5Mb29wKiA9IG51bGxwdHIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBSZWZQdHI8Vk0+IHRyeUNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCwgV1RGOjpSdW5M
b29wKiA9IG51bGxwdHIpOwotICAgIHN0YXRpYyBSZWY8Vk0+IGNyZWF0ZUNvbnRleHRHcm91cChI
ZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxW
TT4gY3JlYXRlKEhlYXBUeXBlID0gSGVhcFR5cGU6OlNtYWxsLCBXVEY6OlJ1bkxvb3AqID0gbnVs
bHB0cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxWTT4gdHJ5Q3JlYXRl
KEhlYXBUeXBlID0gSGVhcFR5cGU6OlNtYWxsLCBXVEY6OlJ1bkxvb3AqID0gbnVsbHB0cik7Cisg
ICAgc3RhdGljIFJlZjxWTT4gY3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlID0gSGVhcFR5cGU6
OlNtYWxsKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+Vk0oKTsKIAogICAgIFdhdGNoZG9nJiBl
bnN1cmVXYXRjaGRvZygpOwpAQCAtMzI2LDYgKzMyNiw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoK
ICAgICBIZWFwIGhlYXA7CisgICAgR0NDbGllbnQ6OkhlYXAgY2xpZW50SGVhcDsKIAogICAgIGNv
bnN0IEhlYXBDZWxsVHlwZSYgY2VsbEhlYXBDZWxsVHlwZSgpIHsgcmV0dXJuIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZTsgfQogICAgIGNvbnN0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
JiBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSB7IHJldHVybiBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZTsgfTsKQEAgLTM0Miw0MiArMzQzLDQyIEBAIHB1YmxpYzoK
ICAgICBBTFdBWVNfSU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIHZhcmlhYmxlU2l6ZWRDZWxsU3Bh
Y2UoKSB7IHJldHVybiBoZWFwLnZhcmlhYmxlU2l6ZWRDZWxsU3BhY2U7IH0KICAgICBBTFdBWVNf
SU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCkgeyByZXR1
cm4gaGVhcC5kZXN0cnVjdGlibGVPYmplY3RTcGFjZTsgfQogCi0gICAgQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSYgYXJyYXlTcGFjZSgpIHsgcmV0dXJuIGhlYXAuYXJyYXlTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGJpZ0ludFNwYWNlKCkgeyByZXR1cm4gaGVhcC5i
aWdJbnRTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGNhbGxlZVNwYWNl
KCkgeyByZXR1cm4gaGVhcC5jYWxsZWVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vi
c3BhY2UmIGNsb25lZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5jbG9uZWRBcmd1bWVu
dHNTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGN1c3RvbUdldHRlclNl
dHRlclNwYWNlKCkgeyByZXR1cm4gaGVhcC5jdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGRhdGVJbnN0YW5jZVNwYWNlKCkgeyByZXR1cm4g
aGVhcC5kYXRlSW5zdGFuY2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2Um
IGRvbUF0dHJpYnV0ZUdldHRlclNldHRlclNwYWNlKCkgeyByZXR1cm4gaGVhcC5kb21BdHRyaWJ1
dGVHZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGV4
Y2VwdGlvblNwYWNlKCkgeyByZXR1cm4gaGVhcC5leGNlcHRpb25TcGFjZTsgfQotICAgIEFMV0FZ
U19JTkxJTkUgSXNvU3Vic3BhY2UmIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSgpIHsg
cmV0dXJuIGhlYXAuZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlOyB9Ci0gICAgQUxXQVlT
X0lOTElORSBJc29TdWJzcGFjZSYgZnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuZnVuY3Rp
b25TcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGdldHRlclNldHRlclNw
YWNlKCkgeyByZXR1cm4gaGVhcC5nZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIGdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlKCkgeyByZXR1cm4g
aGVhcC5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUg
SXNvU3Vic3BhY2UmIGludGVybmFsRnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuaW50ZXJu
YWxGdW5jdGlvblNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYganNQcm94
eVNwYWNlKCkgeyByZXR1cm4gaGVhcC5qc1Byb3h5U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5F
IElzb1N1YnNwYWNlJiBuYXRpdmVFeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLm5hdGl2
ZUV4ZWN1dGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIG51bWJl
ck9iamVjdFNwYWNlKCkgeyByZXR1cm4gaGVhcC5udW1iZXJPYmplY3RTcGFjZTsgfQotICAgIEFM
V0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHBsYWluT2JqZWN0U3BhY2UoKSB7IHJldHVybiBoZWFw
LnBsYWluT2JqZWN0U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBwcm9t
aXNlU3BhY2UoKSB7IHJldHVybiBoZWFwLnByb21pc2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsgcmV0dXJuIGhl
YXAucHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29T
dWJzcGFjZSYgcHJvcGVydHlUYWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5wcm9wZXJ0eVRhYmxl
U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByZWdFeHBTcGFjZSgpIHsg
cmV0dXJuIGhlYXAucmVnRXhwU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNl
JiByZWdFeHBPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAucmVnRXhwT2JqZWN0U3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByb3BlU3RyaW5nU3BhY2UoKSB7IHJldHVy
biBoZWFwLnJvcGVTdHJpbmdTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2Um
IHNjb3BlZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5zY29wZWRBcmd1bWVudHNTcGFj
ZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBT
cGFjZSgpIHsgcmV0dXJuIGhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RyaW5nU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cmlu
Z1NwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RyaW5nT2JqZWN0U3Bh
Y2UoKSB7IHJldHVybiBoZWFwLnN0cmluZ09iamVjdFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElO
RSBJc29TdWJzcGFjZSYgc3RydWN0dXJlQ2hhaW5TcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3RydWN0
dXJlQ2hhaW5TcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN0cnVjdHVy
ZVJhcmVEYXRhU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVTcGFjZSgpIHsgcmV0dXJu
IGhlYXAuc3RydWN0dXJlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBi
cmFuZGVkU3RydWN0dXJlU3BhY2UoKSB7IHJldHVybiBoZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFj
ZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN5bWJvbFRhYmxlU3BhY2UoKSB7
IHJldHVybiBoZWFwLnN5bWJvbFRhYmxlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSYgYXJyYXlTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuYXJyYXlT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBiaWdJbnRT
cGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuYmlnSW50U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY2FsbGVlU3BhY2UoKSB7IHJldHVybiBjbGllbnRI
ZWFwLmNhbGxlZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGNsb25lZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5jbG9uZWRBcmd1
bWVudHNTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBj
dXN0b21HZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuY3VzdG9tR2V0dGVy
U2V0dGVyU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYg
ZGF0ZUluc3RhbmNlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmRhdGVJbnN0YW5jZVNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbUF0dHJpYnV0
ZUdldHRlclNldHRlclNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5kb21BdHRyaWJ1dGVHZXR0
ZXJTZXR0ZXJTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBleGNlcHRpb25TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZXhjZXB0aW9uU3BhY2U7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5leGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYg
ZnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZnVuY3Rpb25TcGFjZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBnZXR0ZXJTZXR0ZXJTcGFjZSgp
IHsgcmV0dXJuIGNsaWVudEhlYXAuZ2V0dGVyU2V0dGVyU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2Uo
KSB7IHJldHVybiBjbGllbnRIZWFwLmdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGludGVybmFsRnVuY3Rpb25T
cGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuaW50ZXJuYWxGdW5jdGlvblNwYWNlOyB9CisgICAg
QUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGpzUHJveHlTcGFjZSgpIHsgcmV0
dXJuIGNsaWVudEhlYXAuanNQcm94eVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UmIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhl
YXAubmF0aXZlRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIG51bWJlck9iamVjdFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5udW1i
ZXJPYmplY3RTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBwbGFpbk9iamVjdFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wbGFpbk9iamVjdFNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb21pc2VTcGFj
ZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucHJvbWlzZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAucHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb3BlcnR5VGFibGVTcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAucHJvcGVydHlUYWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJlZ0V4cFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5yZWdFeHBTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiByZWdFeHBPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucmVnRXhwT2JqZWN0U3Bh
Y2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcm9wZVN0cmlu
Z1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5yb3BlU3RyaW5nU3BhY2U7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc2NvcGVkQXJndW1lbnRzU3BhY2UoKSB7
IHJldHVybiBjbGllbnRIZWFwLnNjb3BlZEFyZ3VtZW50c1NwYWNlOyB9CisgICAgQUxXQVlTX0lO
TElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9CisgICAgQUxXQVlT
X0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cmluZ1NwYWNlKCkgeyByZXR1cm4gY2xp
ZW50SGVhcC5zdHJpbmdTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlJiBzdHJpbmdPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RyaW5nT2Jq
ZWN0U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc3Ry
dWN0dXJlQ2hhaW5TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RydWN0dXJlQ2hhaW5TcGFj
ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVS
YXJlRGF0YVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cnVjdHVyZVNw
YWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19J
TkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBicmFuZGVkU3RydWN0dXJlU3BhY2UoKSB7IHJl
dHVybiBjbGllbnRIZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzeW1ib2xUYWJsZVNwYWNlKCkgeyByZXR1cm4gY2xp
ZW50SGVhcC5zeW1ib2xUYWJsZVNwYWNlOyB9CiAKICNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihuYW1lKSBcCiAgICAgdGVtcGxhdGU8U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gXAotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UqIG5hbWUoKSB7IHJldHVybiBoZWFw
Lm5hbWU8bW9kZT4oKTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBuYW1lKCkgeyByZXR1cm4gY2xpZW50SGVhcC5uYW1lPG1vZGU+KCk7IH0KIAogI2lmIEpTQ19P
QkpDX0FQSV9FTkFCTEVECiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihh
cGlXcmFwcGVyT2JqZWN0U3BhY2UpCkBAIC00ODIsMjQgKzQ4MywxOCBAQCBwdWJsaWM6CiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvblNwYWNlKQogI2VuZGlmCiAKLSN1bmRlZiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSCi0KICAgICBBTFdBWVNfSU5MSU5FIElzb0NlbGxTZXQmIGV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKCkgeyByZXR1cm4gaGVhcC5leGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlc1dpdGhDb25zdHJhaW50czsgfQogICAgIEFMV0FZU19JTkxJTkUgSXNvQ2VsbFNl
dCYgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycygpIHsgcmV0dXJuIGhl
YXAuZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVyczsgfQogCi0jZGVmaW5l
IERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG5hbWUpIFwKLSAgICB0ZW1wbGF0
ZTxTdWJzcGFjZUFjY2VzcyBtb2RlPiBcCi0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSog
bmFtZSgpIHsgcmV0dXJuIGhlYXAubmFtZTxtb2RlPigpOyB9CisgICAgQUxXQVlTX0lOTElORSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIGNvZGVCbG9ja1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5jb2RlQmxvY2tTcGFjZTsgfQogCi0gICAgdXNpbmcgU3BhY2VBbmRTZXQgPSBIZWFwOjpTcGFj
ZUFuZFNldDsKLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiBjb2RlQmxvY2tTcGFjZSgp
IHsgcmV0dXJuIGhlYXAuY29kZUJsb2NrU3BhY2U7IH0KLQotICAgIERZTkFNSUNfU1BBQ0VfQU5E
X1NFVF9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCi0gICAgRFlOQU1JQ19TUEFD
RV9BTkRfU0VUX0RFRklORV9NRU1CRVIobW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlKQorI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIK
IAotICAgIEFMV0FZU19JTkxJTkUgU3BhY2VBbmRTZXQmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
KCkgeyByZXR1cm4gaGVhcC5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19J
TkxJTkUgU3BhY2VBbmRTZXQmIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFw
LnByb2dyYW1FeGVjdXRhYmxlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0
JiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC51bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBj
bGllbnRIZWFwLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7IH0KIAogICAgIFZNVHlw
ZSB2bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjg2MzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKGlzV2Vh
a01hcCgpKQogICAgICAgICAgICAgcmV0dXJuIHZtLndlYWtNYXBTcGFjZTxtb2RlPigpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUu
aAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a01hcFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShXZWFrTWFwUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrT2JqZWN0UmVmUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYWtP
YmplY3RSZWZQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
U2V0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2Vha1NldFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjg2MzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlND
YWxsZWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uanNUb1dhc21JQ0NhbGxlZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAko
cmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKEpTV2ViQXNzZW1ibHksIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFz
c2VtYmx5Q29kZUJsb2NrU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1i
bHlFeGNlcHRpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseUdsb2JhbFNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS53ZWJBc3NlbWJseU1lbW9yeVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFz
c2VtYmx5TW9kdWxlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjg2
MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlUYWJsZVNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWcuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLndlYkFzc2VtYmx5VGFnU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RnVuY3Rp
b25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlH
bG9iYWxQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5
cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlMaW5rRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNZW1vcnlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseU1vZHVs
ZVJlY29yZFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDU0LDYgKzIwNTQsNyBAQCBzZXQo
TUFLRV9OQU1FU19ERVBFTkRFTkNJRVMKICkKIHNldChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9G
SUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9zdXBwbGVtZW50YWxfZGVwZW5kZW5j
eS50bXApCiBzZXQoSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSAke1dlYkNvcmVfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vRE9NSXNvU3Vic3BhY2VzLmgpCitzZXQoQ0xJRU5UX0lTT19TVUJTUEFDRVNf
SEVBREVSX0ZJTEUgJHtXZWJDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0RPTUNsaWVudElzb1N1
YnNwYWNlcy5oKQogc2V0KENPTlNUUlVDVE9SU19IRUFERVJfRklMRSAke1dlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vRE9NQ29uc3RydWN0b3JzLmgpCiBzZXQoV0lORE9XX0NPTlNUUlVDVE9S
U19GSUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9ET01XaW5kb3dDb25zdHJ1Y3Rv
cnMuaWRsKQogc2V0KFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFICR7V2ViQ29y
ZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Xb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwp
CkBAIC0yMjQxLDkgKzIyNDIsMTAgQEAgR0VORVJBVEVfQklORElOR1MoV2ViQ29yZUJpbmRpbmdz
CiAgICAgR0VORVJBVE9SIEpTCiAgICAgU1VQUExFTUVOVEFMX0RFUEZJTEUgJHtTVVBQTEVNRU5U
QUxfREVQRU5ERU5DWV9GSUxFfQogICAgIFBQX0VYVFJBX09VVFBVVAotICAgICAgICAke0lTT19T
VUJTUEFDRVNfSEVBREVSX0ZJTEV9ICR7Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFfSAke1dJTkRP
V19DT05TVFJVQ1RPUlNfRklMRX0gJHtXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklM
RX0gJHtERURJQ0FURURXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRX0KKyAgICAg
ICAgJHtJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFfSAke0NMSUVOVF9JU09fU1VCU1BBQ0VTX0hF
QURFUl9GSUxFfSAke0NPTlNUUlVDVE9SU19IRUFERVJfRklMRX0gJHtXSU5ET1dfQ09OU1RSVUNU
T1JTX0ZJTEV9ICR7V09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEV9ICR7REVESUNB
VEVEV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEV9CiAgICAgUFBfRVhUUkFfQVJH
UwogICAgICAgICAtLWlzb1N1YnNwYWNlc0hlYWRlckZpbGUgJHtJU09fU1VCU1BBQ0VTX0hFQURF
Ul9GSUxFfQorICAgICAgICAtLWNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUgJHtDTElFTlRf
SVNPX1NVQlNQQUNFU19IRUFERVJfRklMRX0KICAgICAgICAgLS1jb25zdHJ1Y3RvcnNIZWFkZXJG
aWxlICR7Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFfQogICAgICAgICAtLXdpbmRvd0NvbnN0cnVj
dG9yc0ZpbGUgJHtXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEV9CiAgICAgICAgIC0td29ya2VyR2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICR7V09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JT
X0ZJTEV9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBAICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvbG9yRGF0YS5jcHAKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNl
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvdW50UXVl
dWluZ1N0cmF0ZWd5QnVpbHRpbnMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTUNvbnN0cnVjdG9ycy5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01Jc29TdWJzcGFjZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NSklUQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9u
IDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNTYsNiArMjA1Niw3IEBAIEpTX0JJTkRJTkdTX1NDUklQVFMgPSAkKENPTU1P
Tl9CSU5ESU5HU18KIFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUgPSBTdXBwbGVtZW50YWxE
ZXBlbmRlbmNpZXMudHh0CiBTVVBQTEVNRU5UQUxfTUFLRUZJTEVfREVQUyA9IFN1cHBsZW1lbnRh
bERlcGVuZGVuY2llcy5kZXAKIElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUgPSBET01Jc29TdWJz
cGFjZXMuaAorQ0xJRU5UX0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUgPSBET01DbGllbnRJc29T
dWJzcGFjZXMuaAogQ09OU1RSVUNUT1JTX0hFQURFUl9GSUxFID0gRE9NQ29uc3RydWN0b3JzLmgK
IFdJTkRPV19DT05TVFJVQ1RPUlNfRklMRSA9IERPTVdpbmRvd0NvbnN0cnVjdG9ycy5pZGwKIFdP
UktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFID0gV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaWRsCkBAIC0yMDcxLDYgKzIwNzIsNyBAQCBJRExfSU5URVJNRURJQVRFX0ZJTEVT
ID0gXAogICAgICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpIFwKICAgICAkKFNVUFBMRU1F
TlRBTF9ERVBFTkRFTkNZX0ZJTEUpIFwKICAgICAkKElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUp
IFwKKyAgICAkKENMSUVOVF9JU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSBcCiAgICAgJChDT05T
VFJVQ1RPUlNfSEVBREVSX0ZJTEUpIFwKICAgICAkKFdJTkRPV19DT05TVFJVQ1RPUlNfRklMRSkg
XAogICAgICQoV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIFwKQEAgLTIwODQs
NyArMjA4Niw3IEBAIElETF9JTlRFUk1FRElBVEVfUEFUVEVSTlMgPSAkKHN1YnN0IC4sJSwKIAog
JChJRExfSU5URVJNRURJQVRFX1BBVFRFUk5TKSA6ICQoUFJFUFJPQ0VTU19JRExTX1NDUklQVFMp
ICQoSURMX0FUVFJJQlVURVNfRklMRSkgJChKU19CSU5ESU5HX0lETFMpICQoRkVBVFVSRV9BTkRf
UExBVEZPUk1fREVGSU5FX0RFUEVOREVOQ0lFUykKIAkkKHNoZWxsIGVjaG8gJChKU19CSU5ESU5H
X0lETFMpIHwgdHIgIiAiICJcbiIgPiBJRExGaWxlTmFtZXNMaXN0LnR4dCkKLQkkKFBFUkwpICQo
V2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwgLS1kZWZpbmVzICIk
KEZFQVRVUkVfQU5EX1BMQVRGT1JNX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0taWRs
RmlsZU5hbWVzTGlzdCBJRExGaWxlTmFtZXNMaXN0LnR4dCAtLWlkbEF0dHJpYnV0ZXNGaWxlICQo
SURMX0FUVFJJQlVURVNfRklMRSkgLS1zdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSAkKFNVUFBM
RU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUpIC0taXNvU3Vic3BhY2VzSGVhZGVyRmlsZSAkKElTT19T
VUJTUEFDRVNfSEVBREVSX0ZJTEUpIC0tY29uc3RydWN0b3JzSGVhZGVyRmlsZSAkKENPTlNUUlVD
VE9SU19IRUFERVJfRklMRSkgLS13aW5kb3dDb25zdHJ1Y3RvcnNGaWxlICQoV0lORE9XX0NPTlNU
UlVDVE9SU19GSUxFKSAtLXdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFdPUktF
UkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLWRlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzRmlsZSAkKERFRElDQVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVD
VE9SU19GSUxFKSAtLXNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChT
RVJWSUNFV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0hBUkVEV09SS0VSR0xPQkFMU0NPUEVfQ09O
U1RSVUNUT1JTX0ZJTEUpIC0td29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFdP
UktMRVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1wYWludFdvcmtsZXRHbG9iYWxT
Y29wZUNvbnN0cnVjdG9yc0ZpbGUgJChQQUlOVFdPUktMRVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RP
UlNfRklMRSkgLS1hdWRpb1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChBVURJ
T1dPUktMRVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zdXBwbGVtZW50YWxNYWtl
ZmlsZURlcHMgJChTVVBQTEVNRU5UQUxfTUFLRUZJTEVfREVQUykKKwkkKFBFUkwpICQoV2ViQ29y
ZSkvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwgLS1kZWZpbmVzICIkKEZFQVRV
UkVfQU5EX1BMQVRGT1JNX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0taWRsRmlsZU5h
bWVzTGlzdCBJRExGaWxlTmFtZXNMaXN0LnR4dCAtLWlkbEF0dHJpYnV0ZXNGaWxlICQoSURMX0FU
VFJJQlVURVNfRklMRSkgLS1zdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSAkKFNVUFBMRU1FTlRB
TF9ERVBFTkRFTkNZX0ZJTEUpIC0taXNvU3Vic3BhY2VzSGVhZGVyRmlsZSAkKElTT19TVUJTUEFD
RVNfSEVBREVSX0ZJTEUpIC0tY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSAkKENMSUVOVF9J
U09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSAtLWNvbnN0cnVjdG9yc0hlYWRlckZpbGUgJChDT05T
VFJVQ1RPUlNfSEVBREVSX0ZJTEUpIC0td2luZG93Q29uc3RydWN0b3JzRmlsZSAkKFdJTkRPV19D
T05TVFJVQ1RPUlNfRklMRSkgLS13b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChX
T1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1kZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChERURJQ0FURURXT1JLRVJHTE9CQUxTQ09QRV9DT05T
VFJVQ1RPUlNfRklMRSkgLS1zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoU0VSVklDRVdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNoYXJlZFdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNIQVJFRFdPUktFUkdMT0JBTFNDT1BF
X0NPTlNUUlVDVE9SU19GSUxFKSAtLXdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUg
JChXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tcGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoUEFJTlRXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RS
VUNUT1JTX0ZJTEUpIC0tYXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQo
QVVESU9XT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc3VwcGxlbWVudGFs
TWFrZWZpbGVEZXBzICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpCiAKICMKICMgRW1pdCB0
aGUgcnVsZXMgdG8gZ2VuZXJhdGUgYmluZGluZ3MgZnJvbSBJREwgZmlsZXMuIE5vdGUgdGhhdCB0
aGVyZSBhcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDcgQEAgSlNDOjpWTSYgY29tbW9uVk1TbG93
KCkKICAgICBSdW5Mb29wKiBydW5Mb29wID0gbnVsbHB0cjsKICNlbmRpZgogCi0gICAgYXV0byYg
dm0gPSBKU0M6OlZNOjpjcmVhdGUoSlNDOjpMYXJnZUhlYXAsIHJ1bkxvb3ApLmxlYWtSZWYoKTsK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Vk06OmNyZWF0ZShKU0M6OkhlYXBUeXBlOjpMYXJnZSwgcnVu
TG9vcCkubGVha1JlZigpOwogCiAgICAgZ19jb21tb25WTU9yTnVsbCA9ICZ2bTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ET01HQ091
dHB1dENvbnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludChWTSYgdm0sIEpTVk1DbGllbnRE
YXRhJiBjbGllbnREYXRhKQorRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0
cmFpbnQoVk0mIHZtLCBKU0hlYXBEYXRhJiBoZWFwRGF0YSkKICAgICA6IE1hcmtpbmdDb25zdHJh
aW50KCJEb21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3Jl
eWVkLCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwpCiAgICAgLCBtX3ZtKHZtKQotICAgICwgbV9jbGllbnREYXRhKGNsaWVu
dERhdGEpCisgICAgLCBtX2hlYXBEYXRhKGhlYXBEYXRhKQogICAgICwgbV9sYXN0RXhlY3V0aW9u
VmVyc2lvbih2bS5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkpCiB7CiB9CkBAIC01OSw3
ICs1OSw3IEBAIHZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbEkKICAgICAK
ICAgICBtX2xhc3RFeGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lv
bigpOwogICAgIAotICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNl
KAorICAgIG1faGVhcERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAg
WyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKICAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChW
aXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAg
ICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwg
Um9vdE1hcmtSZWFzb246OkRPTUdDT3V0cHV0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEyIEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEpTVk1DbGllbnREYXRhOworY2xhc3MgSlNIZWFwRGF0YTsKIAog
Y2xhc3MgRE9NR0NPdXRwdXRDb25zdHJhaW50IDogcHVibGljIEpTQzo6TWFya2luZ0NvbnN0cmFp
bnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIERPTUdDT3V0
cHV0Q29uc3RyYWludChKU0M6OlZNJiwgSlNWTUNsaWVudERhdGEmKTsKKyAgICBET01HQ091dHB1
dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTSGVhcERhdGEmKTsKICAgICB+RE9NR0NPdXRwdXRDb25z
dHJhaW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRv
ciYpOwogCiAgICAgSlNDOjpWTSYgbV92bTsKLSAgICBKU1ZNQ2xpZW50RGF0YSYgbV9jbGllbnRE
YXRhOworICAgIEpTSGVhcERhdGEmIG1faGVhcERhdGE7CiAgICAgdWludDY0X3QgbV9sYXN0RXhl
Y3V0aW9uVmVyc2lvbjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQXN5bmNJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQXN5bmNJdGVyYXRvci5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUFzeW5jSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRE9NV3JhcHBlZCA9IHR5cGVuYW1lIEpT
V3JhcHBlcjo6RE9NV3JhcHBlZDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBK
U0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNET01Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZS5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0QwogCiBERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKIAotSlNDOjpJ
c29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29u
c3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWlsdGlu
Q29uc3RydWN0b3JTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9uIDI4
NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNET01Db25zdHJ1Y3RvckJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlKSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KENlbGxUeXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOwpAQCAtNDgsNyArNDgsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpT
Qzo6SlNGdW5jdGlvbiYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIEpTQzo6V3JpdGVC
YXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNl
LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0
dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGNhbGxUaHJvd1R5cGVFcgogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29k
ZShKU0M6OmpzTnVsbCgpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNET01Db25zdHJ1Y3Rv
ckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU0RPTUNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+ZG9tQ29uc3RydWN0b3JTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpTRE9NQ29uc3RydWN0b3JCYXNl
KSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKENlbGxUeXBl
LCBKU0RPTUNvbnN0cnVjdG9yQmFzZSk7CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIEpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oQmFzZTo6Z2xvYmFsT2JqZWN0KCkpOyB9CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIGdsb2JhbE9iamVjdCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JO
b3RDYWxsYWJsZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGVGb3JT
dHJ1Y3R1cmUoSlNDOjpWTSYsIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoSlNET01D
b25zdHJ1Y3Rvck5vdENhbGxhYmxlKSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKENlbGxUeXBlLCBKU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkocmV2aXNpb24g
Mjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBET01XcmFw
cGVkID0gdHlwZW5hbWUgSlNXcmFwcGVyOjpET01XcmFwcGVkOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0RPTUl0ZXJhdG9yUHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVy
dGllcy5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzgsNyArMTM4
LDcgQEAgYm9vbCBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OmRlZmluZU93blBybwogICAgIHJldHVy
biB0eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCAiRGVm
aW5pbmcgYSBwcm9wZXJ0eSBvbiBhIFdpbmRvd1Byb3BlcnRpZXMgb2JqZWN0IGlzIG5vdCBhbGxv
d2VkLiJfcyk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NV2luZG93UHJvcGVydGllczo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTRE9NV2luZG93UHJvcGVydGllczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewog
ICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+
ZG9tV2luZG93UHJvcGVydGllc1NwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuaAkocmV2aXNpb24gMjg2MzY2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoQ2VsbFR5cGU6OmRlc3Ryb3kgPT0gSlNDOjpKU0NlbGw6OmRlc3Ryb3ks
ICJKU0RPTVdpbmRvd1Byb3BlcnRpZXMgaXMgbm90IGRlc3RydWN0aWJsZSBhY3R1YWxseSIpOwog
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKQEAgLTcyLDcgKzcyLDcgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmKTsKLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDI3ICs0NywzOSBAQCBjb25zdCBKU0M6OkNsYXNz
SW5mbyBKU0ZpbGVTeXN0ZW1EaXJlY3RvCiB0ZW1wbGF0ZTw+CiBjb25zdCBKU0M6OkNsYXNzSW5m
byBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0g
eyAiRGlyZWN0b3J5IEhhbmRsZSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JQcm90b3R5cGUpIH07CiAKLUlzb1N1YnNwYWNlKiBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKK0dDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I6OnN1YnNwYWNlRm9ySW1w
bChWTSYgdm0pCiB7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgYXBpTG9ja2VyKHZtKTsKKyAgICBK
U0xvY2tIb2xkZXIgYXBpTG9ja2VyKHZtKTsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgaWYgKGF1dG8qIHNw
YWNlID0gY2xpZW50RGF0YS5maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgp
KQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
PikKLSAgICAgICAgY2xpZW50RGF0YS5zZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZShtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3IpKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaWVudERhdGEuc2V0Rmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UobWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0Zp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcikpOwotICAgIGF1dG8qIHNwYWNlID0gY2xp
ZW50RGF0YS5maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpOworICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yU3BhY2UoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gaGVhcERhdGEu
ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKTsKKyAgICBpZiAoIXNwYWNl
KSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yPiB8fCAhSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxl
SXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yPikKKyAgICAgICAgICAgIHNwYWNlICA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yKTsKKyAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSkpOworCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
KyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKwor
ICAgIGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xpZW50OjpJc29TdWJzcGFjZSgqc3BhY2Up
OworICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3Bh
Y2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4oY2xpZW50U3BhY2UpKTsK
KyAgICByZXR1cm4gY2xpZW50U3BhY2U7CiB9CiAKIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yX29uUHJvbWlzZVNldHRsZWRCb2R5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiwgSlNGaWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IqIGNhc3RlZFRoaXMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDEzICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNw
YWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9u
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgSlNJREJTZXJpYWxp
emF0aW9uR2xvYmFsT2JqZWN0OjpmaW4KICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9
CiAKLUlzb1N1YnNwYWNlKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTSURCU2VyaWFsaXphdGlv
bkdsb2JhbE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmlkYlNlcmlhbGl6YXRp
b25TcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJp
YWxpemF0aW9uR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsMTMgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QqIGNyZWF0ZShKU0M6OlZNJiwg
SlNDOjpTdHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRv
d1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dp
bmRvd1Byb3h5LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXaW5kb3dQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBA
QCBXaW5kb3dQcm94eSogSlNXaW5kb3dQcm94eTo6dG9XcmFwcGVkKFZNCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTV2luZG93UHJveHk6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1dpbmRvd1By
b3h5OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT53aW5kb3dQcm94eVNwYWNlKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1By
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGwodm0pOwogICAgIH0KQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBKU1dpbmRvd1Byb3h5KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSYsIERPTVdyYXBw
ZXJXb3JsZCYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEFic3RyYWN0RE9N
V2luZG93Jik7Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAgUmVmPERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlND
bGllbnREYXRhLmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKICNpbmNsdWRlICJET01H
Q091dHB1dENvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0F1ZGlvV29ya2xldEds
b2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC01MiwxNSArNTMsMTQg
QEAKICNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCiAjaW5jbHVkZSAicnVudGltZV9tZXRob2Qu
aCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgorI2luY2x1ZGUgPG11dGV4PgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKLUpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCi0gICAg
OiBtX2J1aWx0aW5GdW5jdGlvbnModm0pCi0gICAgLCBtX2J1aWx0aW5OYW1lcyh2bSkKLSAgICAs
IG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPFJ1
bnRpbWVBcnJheT4oKSkKK0pTSGVhcERhdGE6OkpTSGVhcERhdGEoSGVhcCYgaGVhcCkKKyAgICA6
IG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPFJ1
bnRpbWVBcnJheT4oKSkKICAgICAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZShKU0M6Oklz
b0hlYXBDZWxsVHlwZTo6QXJnczxKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0PigpKQogICAg
ICwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxK
U1dpbmRvd1Byb3h5PigpKQogICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdyhKU0M6
Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0RPTVdpbmRvdz4oKSkKQEAgLTc5LDE5ICs3OSw3NCBA
QCBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgICwgbV9oZWFwQ2Vs
bFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpB
cmdzPEpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU+KCkpCiAjZW5kaWYKICAgICAsIG1faGVhcENl
bGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KEpTQzo6SXNvSGVhcENlbGxU
eXBlOjpBcmdzPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4oKSkKLSAgICAsIG1fZG9t
QnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZSgpLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpCi0gICAgLCBtX2Rv
bUNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZSgpLCBKU0RPTUNvbnN0cnVjdG9yQmFzZSkKLSAgICAsIG1fZG9tTmFtZXNwYWNlT2Jq
ZWN0U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgp
LCBKU0RPTU9iamVjdCkKLSAgICAsIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlIElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01XaW5kb3dQcm9w
ZXJ0aWVzKQotICAgICwgbV9ydW50aW1lQXJyYXlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZSwgUnVudGltZUFycmF5KQotICAgICwgbV9y
dW50aW1lTWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZSgpLCBSdW50aW1lTWV0aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUKLSAgICAsIG1fcnVu
dGltZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIG1fcnVudGltZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkKLSAgICAsIG1fd2lu
ZG93UHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3dpbmRvd1Byb3h5SGVh
cENlbGxUeXBlLCBKU1dpbmRvd1Byb3h5KQotICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6
YXRpb25HbG9iYWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKKyAgICAs
IG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpCisgICAgLCBt
X2RvbUNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU0RPTUNvbnN0cnVjdG9yQmFzZSkKKyAgICAsIG1fZG9tTmFtZXNwYWNlT2Jq
ZWN0U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U0RPTU9iamVjdCkKKyAgICAsIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01XaW5kb3dQcm9wZXJ0aWVz
KQorICAgICwgbV9ydW50aW1lQXJyYXlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3J1
bnRpbWVBcnJheUhlYXBDZWxsVHlwZSwgUnVudGltZUFycmF5KQorICAgICwgbV9ydW50aW1lTWV0
aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBS
dW50aW1lTWV0aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUKKyAgICAsIG1fcnVudGltZU9iamVjdFNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkKKyAgICAsIG1fd2luZG93UHJveHlTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3dpbmRvd1Byb3h5SGVhcENlbGxUeXBlLCBKU1dpbmRv
d1Byb3h5KQorICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIEpT
SURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKICAgICAsIG1fc3Vic3BhY2VzKG1ha2VVbmlx
dWU8RE9NSXNvU3Vic3BhY2VzPigpKQogewogfQogCitKU0hlYXBEYXRhKiBKU0hlYXBEYXRhOjpl
bnN1cmVIZWFwRGF0YShIZWFwJiBoZWFwKQoreworICAgIGlmICghT3B0aW9uczo6dXNlR2xvYmFs
R0MoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBKU0hlYXBEYXRhKGhlYXApOworCisgICAgc3RhdGlj
IEpTSGVhcERhdGEqIHNpbmdsZXRvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0geworICAgICAg
ICBzaW5nbGV0b24gPSBuZXcgSlNIZWFwRGF0YShoZWFwKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
c2luZ2xldG9uOworfQorCisjZGVmaW5lIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzdWJzcGFj
ZSkgc3Vic3BhY2UobV9oZWFwRGF0YS0+c3Vic3BhY2UpCisKK0pTVk1DbGllbnREYXRhOjpKU1ZN
Q2xpZW50RGF0YShWTSYgdm0pCisgICAgOiBtX2J1aWx0aW5GdW5jdGlvbnModm0pCisgICAgLCBt
X2J1aWx0aW5OYW1lcyh2bSkKKy8vICAgICwgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGUoSlND
OjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8UnVudGltZUFycmF5PigpKQorLy8gICAgLCBtX3J1bnRp
bWVPYmplY3RIZWFwQ2VsbFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNDOjpCaW5k
aW5nczo6UnVudGltZU9iamVjdD4oKSkKKy8vICAgICwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlw
ZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dpbmRvd1Byb3h5PigpKQorLy8gICAgLCBt
X2hlYXBDZWxsVHlwZUZvckpTRE9NV2luZG93KEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpT
RE9NV2luZG93PigpKQorLy8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZT4oKSkKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU1JlbW90ZURPTVdpbmRv
dyhKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1JlbW90ZURPTVdpbmRvdz4oKSkKKy8vICAg
ICwgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxU
eXBlOjpBcmdzPEpTV29ya2VyR2xvYmFsU2NvcGU+KCkpCisvLyAgICAsIG1faGVhcENlbGxUeXBl
Rm9ySlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxK
U1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlPigpKQorLy8jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQorLy8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKEpT
Qzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlPigpKQor
Ly8jZW5kaWYKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZShK
U0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dvcmtsZXRHbG9iYWxTY29wZT4oKSkKKy8vI2lm
IEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQorLy8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNQYWludFdv
cmtsZXRHbG9iYWxTY29wZT4oKSkKKy8vI2VuZGlmCisvLyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
Ly8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGUoSlNDOjpJ
c29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZT4oKSkKKy8vI2Vu
ZGlmCisvLyAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2Jq
ZWN0KEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9i
amVjdD4oKSkKKworICAgICwgbV9oZWFwRGF0YShKU0hlYXBEYXRhOjplbnN1cmVIZWFwRGF0YSh2
bS5oZWFwKSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbUJ1aWx0aW5Db25z
dHJ1Y3RvclNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fZG9tQ29uc3Ry
dWN0b3JTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbU5hbWVzcGFj
ZU9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fZG9tV2luZG93
UHJvcGVydGllc1NwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGlt
ZUFycmF5U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50aW1lTWV0
aG9kU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50aW1lT2JqZWN0
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV93aW5kb3dQcm94eVNwYWNl
KQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1faWRiU2VyaWFsaXphdGlvblNwYWNl
KQorCisgICAgLCBtX2NsaWVudFN1YnNwYWNlcyhtYWtlVW5pcXVlPERPTUNsaWVudElzb1N1YnNw
YWNlcz4oKSkKK3sKK30KKworI3VuZGVmIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVAorCiBKU1ZN
Q2xpZW50RGF0YTo6fkpTVk1DbGllbnREYXRhKCkKIHsKICAgICBBU1NFUlQobV93b3JsZFNldC5j
b250YWlucyhtX25vcm1hbFdvcmxkLmdldCgpKSk7CkBAIC0xNDAsNyArMTk1LDcgQEAgdm9pZCBK
U1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgogICAgIEpTVk1DbGllbnREYXRhKiBj
bGllbnREYXRhID0gbmV3IEpTVk1DbGllbnREYXRhKCp2bSk7CiAgICAgdm0tPmNsaWVudERhdGEg
PSBjbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAKLSAgICB2bS0+aGVh
cC5hZGRNYXJraW5nQ29uc3RyYWludChtYWtlVW5pcXVlPERPTUdDT3V0cHV0Q29uc3RyYWludD4o
KnZtLCAqY2xpZW50RGF0YSkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KG1h
a2VVbmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sIGNsaWVudERhdGEtPmhlYXBEYXRh
KCkpKTsKIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6
OmNyZWF0ZSgqdm0sIERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6Tm9ybWFsKTsKICAgICB2bS0+bV90
eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIodHlwZSA9PSBXb3JrZXJUaHJlYWRUeXBlOjpEZWRpY2F0ZWRXb3JrZXIgfHwgdHlwZSA9
PSBXb3JrZXJUaHJlYWRUeXBlOjpXb3JrbGV0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAyODYzNjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDIzICsyNSw5MiBAQAogI2luY2x1ZGUgIldlYkNvcmVCdWlsdGluTmFt
ZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGlucy5oIgogI2luY2x1ZGUgIldvcmtlclRo
cmVhZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCitjbGFzcyBET01DbGllbnRJc29TdWJzcGFjZXM7CiBj
bGFzcyBET01Jc29TdWJzcGFjZXM7CiAKLWNsYXNzIEpTVk1DbGllbnREYXRhIDogcHVibGljIEpT
Qzo6Vk06OkNsaWVudERhdGEgeworY2xhc3MgSlNIZWFwRGF0YSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSlNIZWFwRGF0YSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
ZnJpZW5kIGNsYXNzIEpTVk1DbGllbnREYXRhOworcHVibGljOgorICAgIEpTSGVhcERhdGEoSGVh
cCYpOworCisgICAgc3RhdGljIEpTSGVhcERhdGEqIGVuc3VyZUhlYXBEYXRhKEhlYXAmKTsKKwor
ICAgIExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKyAgICBET01Jc29TdWJzcGFjZXMm
IHN1YnNwYWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNlcy5nZXQoKTsgfQorCisgICAgVmVjdG9y
PElzb1N1YnNwYWNlKj4mIG91dHB1dENvbnN0cmFpbnRTcGFjZXMoKSB7IHJldHVybiBtX291dHB1
dENvbnN0cmFpbnRTcGFjZXM7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBmb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAg
eworICAgICAgICBmb3IgKGF1dG8qIHNwYWNlIDogbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzKQor
ICAgICAgICAgICAgZnVuYygqc3BhY2UpOworICAgIH0KKworICAgIElzb1N1YnNwYWNlKiBmaWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4gc3BhY2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9
IHN0ZDo6ZXhjaGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9CisKK3ByaXZhdGU6CisgICAgTG9jayBt
X2xvY2s7CisKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGU7
CisgICAgSXNvSGVhcENlbGxUeXBlIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZTsKKyAgICBJ
c29IZWFwQ2VsbFR5cGUgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZTsKK3B1YmxpYzoKKyAgICBJ
c29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdzsKKyAgICBJc29IZWFw
Q2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOwor
ICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUmVtb3RlRE9NV2luZG93Owor
ICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGU7
CisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJHbG9i
YWxTY29wZTsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgSXNvSGVhcENlbGxUeXBl
IG1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7CisjZW5kaWYKKyAg
ICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZTsK
KyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFw
Q2VsbFR5cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOworI2VuZGlmCisjaWYgRU5BQkxF
KFdFQl9BVURJTykKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlv
V29ya2xldEdsb2JhbFNjb3BlOworI2VuZGlmCisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENl
bGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OworCitwcml2YXRlOgorICAg
IElzb1N1YnNwYWNlIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2U7CisgICAgSXNvU3Vic3Bh
Y2UgbV9kb21Db25zdHJ1Y3RvclNwYWNlOworICAgIElzb1N1YnNwYWNlIG1fZG9tTmFtZXNwYWNl
T2JqZWN0U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV9kb21XaW5kb3dQcm9wZXJ0aWVzU3BhY2U7
CisgICAgSXNvU3Vic3BhY2UgbV9ydW50aW1lQXJyYXlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBt
X3J1bnRpbWVNZXRob2RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtX3J1bnRpbWVPYmplY3RTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CisgICAgSXNvU3Vic3BhY2Ug
bV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPERPTUlzb1N1YnNwYWNlcz4gbV9zdWJzcGFjZXM7CisgICAgVmVjdG9yPElzb1N1
YnNwYWNlKj4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOworfTsKKworCitjbGFzcyBKU1ZNQ2xp
ZW50RGF0YSA6IHB1YmxpYyBWTTo6Q2xpZW50RGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSlNWTUNsaWVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQg
Y2xhc3MgVk1Xb3JsZEl0ZXJhdG9yOwogCiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNWTUNsaWVu
dERhdGEoSlNDOjpWTSYpOworICAgIGV4cGxpY2l0IEpTVk1DbGllbnREYXRhKFZNJik7CiAKICAg
ICB2aXJ0dWFsIH5KU1ZNQ2xpZW50RGF0YSgpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIGluaXROb3JtYWxXb3JsZChKU0M6OlZNKiwgV29ya2VyVGhyZWFkVHlwZSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgaW5pdE5vcm1hbFdvcmxkKFZNKiwgV29ya2Vy
VGhyZWFkVHlwZSk7CiAKICAgICBET01XcmFwcGVyV29ybGQmIG5vcm1hbFdvcmxkKCkgeyByZXR1
cm4gKm1fbm9ybWFsV29ybGQ7IH0KIApAQCAtNTksMzEgKzEyOCwzMyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fd29ybGRTZXQucmVtb3ZlKCZ3b3JsZCk7CiAgICAgfQogCisgICAgSlNIZWFwRGF0YSYg
aGVhcERhdGEoKSB7IHJldHVybiAqbV9oZWFwRGF0YTsgfQorCiAgICAgV2ViQ29yZUJ1aWx0aW5O
YW1lcyYgYnVpbHRpbk5hbWVzKCkgeyByZXR1cm4gbV9idWlsdGluTmFtZXM7IH0KICAgICBKU0J1
aWx0aW5GdW5jdGlvbnMmIGJ1aWx0aW5GdW5jdGlvbnMoKSB7IHJldHVybiBtX2J1aWx0aW5GdW5j
dGlvbnM7IH0KICAgICAKLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBkb21CdWlsdGluQ29uc3RydWN0
b3JTcGFjZSgpIHsgcmV0dXJuIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2U7IH0KLSAgICBK
U0M6Oklzb1N1YnNwYWNlJiBkb21Db25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21Db25z
dHJ1Y3RvclNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgZG9tTmFtZXNwYWNlT2JqZWN0
U3BhY2UoKSB7IHJldHVybiBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlOyB9Ci0gICAgSlNDOjpJ
c29TdWJzcGFjZSYgZG9tV2luZG93UHJvcGVydGllc1NwYWNlKCkgeyByZXR1cm4gbV9kb21XaW5k
b3dQcm9wZXJ0aWVzU3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBydW50aW1lQXJyYXlT
cGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZUFycmF5U3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNw
YWNlJiBydW50aW1lTWV0aG9kU3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVNZXRob2RTcGFjZTsg
fQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1f
cnVudGltZU9iamVjdFNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgd2luZG93UHJveHlT
cGFjZSgpIHsgcmV0dXJuIG1fd2luZG93UHJveHlTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3Bh
Y2UmIGlkYlNlcmlhbGl6YXRpb25TcGFjZSgpIHsgcmV0dXJuIG1faWRiU2VyaWFsaXphdGlvblNw
YWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gc3BhY2UpIHsgbV9m
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhjaGFuZ2Uoc3Bh
Y2UsIG51bGxwdHIpOyB9Ci0KLSAgICBWZWN0b3I8SlNDOjpJc29TdWJzcGFjZSo+JiBvdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOyB9Cisg
ICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBkb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpIHsg
cmV0dXJuIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UmIGRvbUNvbnN0cnVjdG9yU3BhY2UoKSB7IHJldHVybiBtX2RvbUNvbnN0cnVjdG9y
U3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbU5hbWVzcGFjZU9iamVjdFNw
YWNlKCkgeyByZXR1cm4gbV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZTsgfQorICAgIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSYgZG9tV2luZG93UHJvcGVydGllc1NwYWNlKCkgeyByZXR1cm4gbV9kb21X
aW5kb3dQcm9wZXJ0aWVzU3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRp
bWVBcnJheVNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lQXJyYXlTcGFjZTsgfQorICAgIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSYgcnVudGltZU1ldGhvZFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1l
TWV0aG9kU3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmplY3RT
cGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU9iamVjdFNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlJiB3aW5kb3dQcm94eVNwYWNlKCkgeyByZXR1cm4gbV93aW5kb3dQcm94eVNwYWNl
OyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBpZGJTZXJpYWxpemF0aW9uU3BhY2UoKSB7
IHJldHVybiBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBt
X2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9w
dHI8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvclNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFjZSwgbnVsbHB0cik7IH0KKwor
Ly8gICAgVmVjdG9yPElzb1N1YnNwYWNlKj4mIG91dHB1dENvbnN0cmFpbnRTcGFjZXMoKSB7IHJl
dHVybiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXM7IH0KKy8vCisvLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorLy8gICAgdm9pZCBmb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKGNvbnN0
IEZ1bmMmIGZ1bmMpCisvLyAgICB7CisvLyAgICAgICAgZm9yIChhdXRvKiBzcGFjZSA6IG1fb3V0
cHV0Q29uc3RyYWludFNwYWNlcykKKy8vICAgICAgICAgICAgZnVuYygqc3BhY2UpOworLy8gICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGZvckVhY2hPdXRwdXRD
b25zdHJhaW50U3BhY2UoY29uc3QgRnVuYyYgZnVuYykKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0
byogc3BhY2UgOiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXMpCi0gICAgICAgICAgICBmdW5jKCpz
cGFjZSk7Ci0gICAgfQotCi0gICAgRE9NSXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJldHVy
biAqbV9zdWJzcGFjZXMuZ2V0KCk7IH0KKyAgICBET01DbGllbnRJc29TdWJzcGFjZXMmIGNsaWVu
dFN1YnNwYWNlcygpIHsgcmV0dXJuICptX2NsaWVudFN1YnNwYWNlcy5nZXQoKTsgfQogCiBwcml2
YXRlOgogICAgIEhhc2hTZXQ8RE9NV3JhcHBlcldvcmxkKj4gbV93b3JsZFNldDsKQEAgLTkyLDQw
ICsxNjMsNDMgQEAgcHJpdmF0ZToKICAgICBKU0J1aWx0aW5GdW5jdGlvbnMgbV9idWlsdGluRnVu
Y3Rpb25zOwogICAgIFdlYkNvcmVCdWlsdGluTmFtZXMgbV9idWlsdGluTmFtZXM7CiAKLSAgICBK
U0M6Oklzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZTsKLSAgICBKU0M6
Oklzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGU7Ci0gICAgSlNDOjpJ
c29IZWFwQ2VsbFR5cGUgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZTsKLXB1YmxpYzoKLSAgICBK
U0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTRE9NV2luZG93OwotICAgIEpT
Qzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZTsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUmVt
b3RlRE9NV2luZG93OwotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9y
SlNXb3JrZXJHbG9iYWxTY29wZTsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxs
VHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGU7Ci0jZW5kaWYKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hl
YXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2JhbFNjb3BlOwotI2lmIEVOQUJMRShDU1NfUEFJTlRJ
TkdfQVBJKQotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNQYWlu
dFdvcmtsZXRHbG9iYWxTY29wZTsKLSNlbmRpZgotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAg
SlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2Jh
bFNjb3BlOwotI2VuZGlmCi0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVG
b3JKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q7Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpJ
c29TdWJzcGFjZSBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOwotICAgIEpTQzo6SXNvU3Vi
c3BhY2UgbV9kb21Db25zdHJ1Y3RvclNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9kb21O
YW1lc3BhY2VPYmplY3RTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fZG9tV2luZG93UHJv
cGVydGllc1NwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9ydW50aW1lQXJyYXlTcGFjZTsK
LSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZU1ldGhvZFNwYWNlOwotICAgIEpTQzo6SXNv
U3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX3dp
bmRvd1Byb3h5U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX2lkYlNlcmlhbGl6YXRpb25T
cGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NSXNv
U3Vic3BhY2VzPiBtX3N1YnNwYWNlczsKLSAgICBWZWN0b3I8SlNDOjpJc29TdWJzcGFjZSo+IG1f
b3V0cHV0Q29uc3RyYWludFNwYWNlczsKKyAgICBKU0hlYXBEYXRhKiBtX2hlYXBEYXRhOworLy8g
ICAgSXNvSGVhcENlbGxUeXBlIG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlOworLy8gICAgSXNv
SGVhcENlbGxUeXBlIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZTsKKy8vICAgIElzb0hlYXBD
ZWxsVHlwZSBtX3dpbmRvd1Byb3h5SGVhcENlbGxUeXBlOworLy9wdWJsaWM6CisvLyAgICBJc29I
ZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdzsKKy8vICAgIElzb0hlYXBD
ZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7Cisv
LyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1JlbW90ZURPTVdpbmRvdzsK
Ky8vICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2Nv
cGU7CisvLyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlOworLy8jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorLy8gICAgSXNvSGVh
cENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7Cisv
LyNlbmRpZgorLy8gICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0
R2xvYmFsU2NvcGU7CisvLyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKy8vICAgIElzb0hl
YXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU7Cisv
LyNlbmRpZgorLy8jaWYgRU5BQkxFKFdFQl9BVURJTykKKy8vICAgIElzb0hlYXBDZWxsVHlwZSBt
X2hlYXBDZWxsVHlwZUZvckpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU7CisvLyNlbmRpZgorLy8g
ICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xv
YmFsT2JqZWN0OworLy8KKy8vcHJpdmF0ZToKKworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBt
X2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBt
X2RvbUNvbnN0cnVjdG9yU3BhY2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fZG9tTmFt
ZXNwYWNlT2JqZWN0U3BhY2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fZG9tV2luZG93
UHJvcGVydGllc1NwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3J1bnRpbWVBcnJh
eVNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3J1bnRpbWVNZXRob2RTcGFjZTsK
KyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7CisgICAgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlIG1fd2luZG93UHJveHlTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxET01DbGllbnRJc29TdWJzcGFjZXM+IG1fY2xp
ZW50U3Vic3BhY2VzOworLy8gICAgVmVjdG9yPElzb1N1YnNwYWNlKj4gbV9vdXRwdXRDb25zdHJh
aW50U3BhY2VzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDU1LDEzICszMDU1LDEzIEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pXG4iKTsKKyAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBK
U0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpXG4iKTsKICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTtcbiIpOwogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pO1xuIik7CiAK
ICAgICAjIHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKQEAg
LTQ4NDAsMzcgKzQ4NDAsNTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAKICAg
ICBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5p
dGVyYWJsZTsKIAorICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRv
ck1hY3Jvcy5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vi
c3BhY2VJbmxpbmVzLmg+Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNw
YWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06
OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTtcbiIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCkpXG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHNwYWNlO1xuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5n
ZXQoKSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoIXNwYWNlKSB7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7XG4iKTsKKwogICAgIGlmIChJc0RPTUdsb2JhbE9i
amVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENlbGxUeXBlRm9y
JHtjbGFzc05hbWV9LCAke2NsYXNzTmFtZX0pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfSwgJHtjbGFzc05hbWV9
KTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
JHtjbGFzc05hbWV9PiB8fCAhJHtjbGFzc05hbWV9OjpuZWVkc0Rlc3RydWN0aW9uKTtcbiIpOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4pXG4iKTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtp
bnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCAke2NsYXNzTmFt
ZX0pO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGVsc2VcbiIpOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2lu
dGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCAke2NsYXNzTmFtZX0pO1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xh
c3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgJHtjbGFzc05hbWV9PilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAke2NsYXNzTmFt
ZX0pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBlbHNlXG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7
Y2xhc3NOYW1lfSk7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ik
e2ludGVyZmFjZU5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7XG4i
KTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVh
Y2hhYmxlLWNvZGVcIilcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludClcbiIpOwotIyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xh
c3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY2xp
ZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTtcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05hbWV9Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludClcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5H
U19FTkRcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHNwYWNlO1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xu
Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zp
c2l0Q2hpbGRyZW4pIHsKQEAgLTY3MjEsMjkgKzY3MzQsNDAgQEAgcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSAke2l0ZXJhdG9yTmFtZX1CYXNlOwogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpT
Qzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpdGVyYXRvck5hbWV9LmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsICR7aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRlcmF0b3JOYW1lfTo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PikKLSAgICAgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
KCksICR7aXRlcmF0b3JOYW1lfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCAke2l0ZXJhdG9y
TmFtZX0pOwotICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVy
YXRvck5hbWV9LmdldCgpOworICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOworICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OworCisgICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwor
ICAgICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0
b3JOYW1lfS5nZXQoKTsKKyAgICAgICAgaWYgKCFzcGFjZSkgeworICAgICAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRl
cmF0b3JOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JO
YW1lfT4pCisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsICR7aXRl
cmF0b3JOYW1lfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCAke2l0ZXJhdG9yTmFtZX0pOworICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ik
e2l0ZXJhdG9yTmFtZX0gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNvZGVcIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0
ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgICAg
IH0KKworICAgICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JO
YW1lfSA9IG1ha2VVbmlxdWU8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0u
Z2V0KCk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKQEAgLTc1MjYsNyArNzU1MCw3IEBAIHN1YiBHZW5lcmF0ZVByb3Rv
dHlwZURlY2xhcmF0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIERFQ0xBUkVfSU5G
TztcbiIpOwogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPlxuIik7Ci0gICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoJHtwcm90b3R5cGVDbGFzc05h
bWV9LCBCYXNlKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7XG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCShyZXZpc2lvbiAyODYzNjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBteSAkaWRsRmlsZU5hbWVzTGlzdDsKIG15
ICR0ZXN0R2xvYmFsQ29udGV4dE5hbWU7CiBteSAkc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGU7
CiBteSAkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZTsKK215ICRjbGllbnRJU09TdWJzcGFjZXNIZWFk
ZXJGaWxlOwogbXkgJGNvbnN0cnVjdG9yc0hlYWRlckZpbGU7CiBteSAkd2luZG93Q29uc3RydWN0
b3JzRmlsZTsKIG15ICR3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGU7CkBAIC03OSw2
ICs4MCw3IEBAIEdldE9wdGlvbnMoJ2RlZmluZXM9cycgPT4gXCRkZWZpbmVzLAogICAgICAgICAg
ICAndGVzdEdsb2JhbENvbnRleHROYW1lPXMnID0+IFwkdGVzdEdsb2JhbENvbnRleHROYW1lLAog
ICAgICAgICAgICAnc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGU9cycgPT4gXCRzdXBwbGVtZW50
YWxEZXBlbmRlbmN5RmlsZSwKICAgICAgICAgICAgJ2lzb1N1YnNwYWNlc0hlYWRlckZpbGU9cycg
PT4gXCRpc29TdWJzcGFjZXNIZWFkZXJGaWxlLAorICAgICAgICAgICAnY2xpZW50SVNPU3Vic3Bh
Y2VzSGVhZGVyRmlsZT1zJyA9PiBcJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUsCiAgICAg
ICAgICAgICdjb25zdHJ1Y3RvcnNIZWFkZXJGaWxlPXMnID0+IFwkY29uc3RydWN0b3JzSGVhZGVy
RmlsZSwKICAgICAgICAgICAgJ3dpbmRvd0NvbnN0cnVjdG9yc0ZpbGU9cycgPT4gXCR3aW5kb3dD
b25zdHJ1Y3RvcnNGaWxlLAogICAgICAgICAgICAnd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnNGaWxlPXMnID0+IFwkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlLApAQCAtMTEw
LDYgKzExMiw3IEBAIGRpZSgnTXVzdCBzcGVjaWZ5IElETCBhdHRyaWJ1dGVzIGZpbGUgdXMKIAog
JHN1cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCRzdXBwbGVt
ZW50YWxEZXBlbmRlbmN5RmlsZSk7CiAkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSA9IEN5Z3dpblBh
dGhJZk5lZWRlZCgkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSk7CiskY2xpZW50SVNPU3Vic3BhY2Vz
SGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVy
RmlsZSk7CiAkY29uc3RydWN0b3JzSGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkY29u
c3RydWN0b3JzSGVhZGVyRmlsZSk7CiAkd2luZG93Q29uc3RydWN0b3JzRmlsZSA9IEN5Z3dpblBh
dGhJZk5lZWRlZCgkd2luZG93Q29uc3RydWN0b3JzRmlsZSk7CiAkd29ya2VyR2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcnNGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCR3b3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yc0ZpbGUpOwpAQCAtMTY5LDYgKzE3Miw3IEBAIG15ICRpc29TdWJzcGFjZXNIZWFk
ZXJDb2RlID0gPDxFTkQ7CiAjcHJhZ21hIG9uY2UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewordXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogY2xhc3MgRE9NSXNvU3Vic3BhY2VzIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShET01Jc29TdWJzcGFjZXMpOwpAQCAtMTc3LDYgKzE4MSwyMiBAQCBwdWJs
aWM6CiAgICAgRE9NSXNvU3Vic3BhY2VzKCkgPSBkZWZhdWx0OwogRU5ECiAKK215ICRjbGllbnRJ
U09TdWJzcGFjZXNIZWFkZXJDb2RlID0gPDxFTkQ7CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK2NsYXNzIERPTUNsaWVudElz
b1N1YnNwYWNlcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRChET01DbGllbnRJc29TdWJzcGFjZXMp
OworcHVibGljOgorICAgIERPTUNsaWVudElzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKK0VORAor
CiBteSBAY29uc3RydWN0b3JzID0gKCk7CiBteSAkY29uc3RydWN0b3JzSGVhZGVyQ29kZSA9IDw8
RU5EOwogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CkBAIC0yNDIsOSArMjYyLDExIEBAIGZv
cmVhY2ggbXkgJGlkbEZpbGVOYW1lIChzb3J0IGtleXMgJWlkbEYKIAogICAgIG15ICRpc0NhbGxi
YWNrSW50ZXJmYWNlID0gaXNDYWxsYmFja0ludGVyZmFjZUZyb21JREwoJGlkbEZpbGUpOwogICAg
IGlmICghJGlzQ2FsbGJhY2tJbnRlcmZhY2UpIHsKLSAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRl
ckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFj
ZUZvciR7aW50ZXJmYWNlTmFtZX07XG4iOworICAgICAgICAkaXNvU3Vic3BhY2VzSGVhZGVyQ29k
ZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7aW50
ZXJmYWNlTmFtZX07XG4iOworICAgICAgICAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAu
PSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vi
c3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9O1xuIjsKICAgICAgICAgaWYgKGNvbnRhaW5zSXRlcmFi
bGVJbnRlcmZhY2VGcm9tSURMKCRpZGxGaWxlKSkgewotICAgICAgICAgICAgJGlzb1N1YnNwYWNl
c0hlYWRlckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9z
dWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRvcjtcbiI7CisgICAgICAgICAgICAkaXNv
U3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4g
bV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRvcjtcbiI7CisgICAgICAgICAgICAk
Y2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9SXRl
cmF0b3I7XG4iOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTcsNiArMzM5LDEyIEBAIGlmICgk
aXNvU3Vic3BhY2VzSGVhZGVyRmlsZSkgewogICAgIFdyaXRlRmlsZUlmQ2hhbmdlZCgkaXNvU3Vi
c3BhY2VzSGVhZGVyRmlsZSwgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUpOwogfQogCitpZiAoJGNs
aWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUpIHsKKyAgICAkY2xpZW50SVNPU3Vic3BhY2VzSGVh
ZGVyQ29kZSAuPSAifTtcbiI7CisgICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUgLj0g
In0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcbiI7CisgICAgV3JpdGVGaWxlSWZDaGFuZ2VkKCRjbGll
bnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlLCAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSk7
Cit9CisKIGlmICgkY29uc3RydWN0b3JzSGVhZGVyRmlsZSkgewogICAgIG15ICRjb25zdHJ1Y3Rv
cnNMZW5ndGggPSBAY29uc3RydWN0b3JzOwogICAgICRjb25zdHJ1Y3RvcnNIZWFkZXJDb2RlIC49
ICJ9O1xuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJl
dmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIGJvb2wgUnVudGltZUFycmF5Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTQzo6SXNvU3Vi
c3BhY2UqIFJ1bnRpbWVBcnJheTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIFJ1bnRpbWVBcnJheTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+cnVudGltZUFycmF5U3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9
CkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgUnVudGltZUFycmF5KFZNJiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEJpbmRpbmdzOjpBcnJheSopOwog
Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYpOwogCiAgICAgQmluZGluZ3NBcnJheSogbV9hcnJheTsKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9uIDI4NjM2NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SgogICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSXNvU3Vic3BhY2UqIFJ1bnRp
bWVNZXRob2Q6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IFJ1bnRpbWVNZXRob2Q6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5ydW50aW1lTWV0aG9k
U3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihSdW50aW1lTWV0
aG9kKSwgIlJ1bnRpbWVNZXRob2Qgc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBv
dmVycmlkZSBzdWJzcGFjZUZvcjw+KCkiKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDZWxsVHlw
ZTo6ZGVzdHJveSA9PSBKU0M6OkpTQ2VsbDo6ZGVzdHJveSk7CkBAIC03NCw3ICs3NCw3IEBAIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKIHByaXZhdGU6
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKIAogICAgIEJp
bmRpbmdzOjpNZXRob2QqIG1fbWV0aG9kOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDcgKzMxMyw3
IEBAIEV4Y2VwdGlvbiogdGhyb3dSdW50aW1lT2JqZWN0SW52YWxpZEFjY2UKICAgICByZXR1cm4g
dGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJUcnlpbmcgdG8gYWNjZXNzIG9iamVjdCBmcm9t
IGRlc3Ryb3llZCBwbHVnLWluLiIpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogUnVudGltZU9i
amVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIFJ1bnRpbWVPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAg
ICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPnJ1
bnRpbWVPYmplY3RTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgJKHJldmlzaW9uIDI4NjM2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihSdW50aW1lT2JqZWN0
KSwgIlJ1bnRpbWVPYmplY3Qgc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVy
cmlkZSBzdWJzcGFjZUZvcjw+KCkiKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDZWxsVHlwZTo6
ZGVzdHJveSA9PSBSdW50aW1lT2JqZWN0OjpkZXN0cm95KTsKQEAgLTg2LDcgKzg2LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOworICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOwogCiAgICAgUmVmUHRyPElu
c3RhbmNlPiBtX2luc3RhbmNlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfcnVudGltZS5oCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KQEAgLTEzOCw3
ICsxMzgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB0b0Jvb2xlYW4oSlNHbG9iYWxPYmplY3Qq
KSBjb25zdDsgLy8gRklYTUU6IEN1cnJlbnRseSB0aGlzIGlzIGJyb2tlbiBiZWNhdXNlIG5vbmUg
b2YgdGhlIHN1cGVyY2xhc3NlcyBhcmUgbWFya2VkIHZpcnR1YWwuIFdlIG5lZWQgdG8gc29sdmUg
dGhpcyBpbiB0aGUgbG9uZ2VyIHRlcm0uCiAKLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChWTSYpOworICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChWTSYpOwogCiAgICAgUmVmUHRyPE9iamNJbnN0YW5jZT4gX2luc3RhbmNlOwog
ICAgIFN0cmluZyBtX2l0ZW07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19ydW50aW1lLm1tCShyZXZpc2lvbiAyODYzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzMiwxMyArMzMyLDEzIEBA
IGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjp0b0Jvb2xlYW4oSlMKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIE9iamNGYWxsYmFja09iamVjdEltcDo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIE9iamNG
YWxsYmFja09iamVjdEltcDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6Oklzb1N1YnNwYWNlUGVyVk0+IHBlclZNKFtdIChKU0M6
OlZNJiB2bSkgewotICAgICAgICByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlModm0uZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIE9iamNGYWxsYmFja09iamVjdEltcCk7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTQzo6SXNvU3Vic3BhY2VQZXJWTT4gcGVyVk0oW10g
KEpTQzo6SGVhcCYgaGVhcCkgeworICAgICAgICByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRF
UlMoaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIE9iamNGYWxsYmFja09iamVj
dEltcCk7CiAgICAgfSk7Ci0gICAgcmV0dXJuICZwZXJWTS5nZXQoKS5mb3JWTSh2bSk7CisgICAg
cmV0dXJuICZwZXJWTS5nZXQoKS5jbGllbnRJc29TdWJzcGFjZWZvclZNKHZtKTsKIH0KIAotfQot
fQorfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9EaXNhbGxvd1ZNRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUv
RGlzYWxsb3dWTUVudHJ5LmNwcAkocmV2aXNpb24gMjg2MzY2KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9EaXNhbGxvd1ZNRW50cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiB1c2luZyBKU0M6
OkRpc2FsbG93Vk1FbnRyeTsKIHVzaW5nIEpTQzo6SlNMb2NrSG9sZGVyOwotdXNpbmcgSlNDOjpM
YXJnZUhlYXA7Cit1c2luZyBKU0M6OkhlYXBUeXBlOwogdXNpbmcgSlNDOjpWTTsKIAogc3RhdGlj
IHZvaWQgZW50ZXJTY29wZShWTSYgdm0sIHVuc2lnbmVkIGVudHJ5Q291bnQsIHVuc2lnbmVkIHJl
bWFpbmluZ0VudHJpZXMpCkBAIC01MSw3ICs1MSw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfRGlz
YWxsb3dWTUVudHJ5LCBOZXMKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAg
SlNDOjppbml0aWFsaXplKCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCku
bGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFr
UmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAg
RVhQRUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7CkBAIC02NSw3ICs2NSw3IEBA
IFRFU1QoSmF2YVNjcmlwdENvcmVfRGlzYWxsb3dWTUVudHJ5LCBDb3AKICAgICBXVEY6OmluaXRp
YWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplKCk7CiAKLSAgICBWTSYgdm0g
PSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVh
dGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50
LCAwdSk7CkBAIC04OSw3ICs4OSw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfRGlzYWxsb3dWTUVu
dHJ5LCBDb3AKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0
aWFsaXplKCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigp
OworICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAg
ICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VR
KHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL0phdmFTY3JpcHRDb3JlL1Byb3BlcnR5U2xvdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eVNsb3QuY3BwCShy
ZXZpc2lvbiAyODYzNjYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRD
b3JlL1Byb3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgewogCiB1c2luZyBKU0M6OkpTTG9ja0hvbGRlcjsKLXVzaW5nIEpT
Qzo6TGFyZ2VIZWFwOwordXNpbmcgSlNDOjpIZWFwVHlwZTsKIHVzaW5nIEpTQzo6UHJvcGVydHlT
bG90OwogdXNpbmcgSlNDOjpWTTsKIHVzaW5nIEpTQzo6anNVbmRlZmluZWQ7CkBAIC00Miw3ICs0
Miw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfUHJvcGVydHlTbG90LCBEaXNhbGwKICAgICBXVEY6
OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplKCk7CiAKLSAgICBW
TSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIFZNJiB2bSA9IFZN
OjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgewogICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRy
eUNvdW50LCAwdSk7CkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfUHJvcGVy
dHlTbG90LCBWTUlucXUKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlND
Ojppbml0aWFsaXplKCk7CiAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVh
a1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVm
KCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQ
RUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNvdW50LCAwdSk7CkBAIC0xMDIsNyArMTAyLDcgQEAg
VEVTVChKYXZhU2NyaXB0Q29yZV9Qcm9wZXJ0eVNsb3QsIENvcHlBcwogICAgIFdURjo6aW5pdGlh
bGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAotICAgIFZNJiB2bSA9
IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0mIHZtID0gVk06OmNyZWF0
ZShIZWFwVHlwZTo6TGFyZ2UpLmxlYWtSZWYoKTsKICAgICB7CiAgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogICAgICAgICBFWFBFQ1RfRVEodm0uZGlzYWxsb3dWTUVudHJ5Q291bnQs
IDB1KTsK
</data>
<flag name="commit-queue"
          id="471411"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446092</attachid>
            <date>2021-12-06 16:17:19 -0800</date>
            <delta_ts>2022-02-15 18:01:02 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-233878.patch</filename>
            <type>text/plain</type>
            <size>241804</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkocmV2aXNpb24gMjg2NTczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkx
LDcgKzkxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSBXVEZfSUdOTwogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAot
ICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0mIHZt
ID0gVk06OmNyZWF0ZShIZWFwVHlwZTo6TGFyZ2UpLmxlYWtSZWYoKTsKICAgICB7CiAgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1ODgsNyArMzU4OCw3IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUm
IG9wdGlvbnMsIGIKIHsKICAgICBXb3JrZXIgd29ya2VyKFdvcmtlcnM6OnNpbmdsZXRvbigpKTsK
ICAgICAKLSAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAg
IFZNJiB2bSA9IFZNOjpjcmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgaWYg
KCFpc1dvcmtlciAmJiBvcHRpb25zLm1fY2FuQmxvY2tJc0ZhbHNlKQogICAgICAgICB2bS5tX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IEpTQzo6U2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIoZmFsc2UpKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYs
NyBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFs
TWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgVk0qIHZtID0gJlZNOjpjcmVhdGUo
TGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0qIHZtID0gJlZNOjpjcmVhdGUoSGVhcFR5cGU6
OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBD
b21tYW5kTGluZSBvcHRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uYXBpR2xvYmFsT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5o
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXBpVmFsdWVXcmFwcGVy
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw3ICsxMzksNyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbklt
CiBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lUSF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwg
SlNBUElXcmFwcGVyT2JqZWN0KTsKIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1
YnNwYWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNj
ZXNzOjpPbk1haW5UaHJlYWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5jYWxsYmFja0NvbnN0cnVjdG9yU3BhY2U8
bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3
LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmNhbGxiYWNrRnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2
NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0cnVjdHVyZSogSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamUKIH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxi
YWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJz
cGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6
Ok9uTWFpblRocmVhZDoKQEAgLTEzMyw3ICsxMzMsNyBAQCBJc29TdWJzcGFjZSogSlNDYWxsYmFj
a09iamVjdDxKU05vbkZpbmFsCiB9CiAKIHRlbXBsYXRlIDw+Ci1Jc29TdWJzcGFjZSogSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNw
YWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtLCBtb2RlKTsKICAgICB9CkBA
IC0xOTksNyArMTk5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mLCBTdWJzcGFjZUFjY2Vzcyk7CisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJiwgU3Vic3Bh
Y2VBY2Nlc3MpOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMX0FUVFJJ
QlVURVMgY3VzdG9tVG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKIAog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjU3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRl
cm5hbEZ1bmN0aW9uIEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ub2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyODY1
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg5LDcgKzkwLDcgQEAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgSlNDYWxsYmFja09iagog
fQogCiB0ZW1wbGF0ZSA8PgotSXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFw
cGVyR2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdy
YXBwZXJPYmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTAzLDcgKzEwMyw3IEBAIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIEpTQ2FsbGJhY2tPYmoK
IH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUp
CitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxs
YmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzY0NhbGxiYWNrRnVu
Y3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
OCw3ICsxMDc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdgog
ICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGxvY2tlciwgdmlzaXRvcik7CiAgICAg
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgCi0gICAg
Vk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLmFkZCh0aGlzKTsKKyAgICBIZWFw
OjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBAIC0xNjY4LDcgKzE2NjgsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgfTsKICAgICB1cGRhdGVBY3Rpdml0eSgp
OwogCi0gICAgVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlz
KTsKKyAgICBIZWFwOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5yZW1vdmUodGhp
cyk7CiAKICAgICAvLyBJbiBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoKSB3ZSBtYXkg
aGF2ZSBkZWNpZGVkIHRvIHNraXAgdmlzaXRpbmcgdGhpcwogICAgIC8vIGNvZGVCbG9jay4gQnkg
dGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHdlJ3JlIGRvbmUgd2l0aCB0aGUgdmVyaWZpZXIgR0MuIFNv
LCBsZXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENv
ZGVCbG9jay5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXZhbENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIHB1
YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOworICAgICAgICBy
ZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIEV2YWxDb2Rl
QmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYg
b3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0
cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2Uo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RnVuY3Rpb25Db2RlQmxvY2suaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDkgKzQwLDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCkuc3Bh
Y2U7CisgICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKTsKICAgICB9CiAKICAgICBz
dGF0aWMgRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1Rh
ZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lv
biAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIHB1YmxpYzoKICAg
ICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOworICAgICAgICByZXR1cm4gJnZt
LmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJv
Z3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDkgKzQwLDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCku
c3BhY2U7CisgICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgQ29weVBhcnNlZEJsb2Nr
VGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtlZEV2YWxDb2Rl
QmxvY2tTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAkocmV2
aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1MSw3ICsyNTEsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1
bmN0CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Quc2V0KHZtLCB0aGlz
LCByZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgdm0udW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZSgpLnNldC5hZGQodGhpcyk7CisgICAgdm0uaGVhcC51bmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNldC5hZGQodGhpcyk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtMzEwLDcgKzMxMCw3IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmZpbmFsaXoKICAgICAgICAgY2xlYXJJZkRlYWQobV91bmxpbmtlZENvZGVCbG9ja0Zv
ckNhbGwpOwogICAgICAgICBjbGVhcklmRGVhZChtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKICAgICAgICAgaWYgKGlzQ2xlYXJlZCAmJiAhaXNTdGlsbFZhbGlkKQotICAgICAgICAg
ICAgdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpLnNldC5yZW1vdmUodGhpcyk7
CisgICAgICAgICAgICB2bS5oZWFwLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRT
ZXQuc2V0LnJlbW92ZSh0aGlzKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZtLnVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2
bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGlj
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9u
S2luZCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmls
aXR5LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50
TGluaz4gcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIHN0ZDo6b3B0aW9uYWw8UHJpdmF0ZU5hbWVF
bnZpcm9ubWVudD4gcGFyZW50UHJpdmF0ZU5hbWVFbnZpcm9ubWVudCwgRGVyaXZlZENvbnRleHRU
eXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgbmVlZHND
bGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZhdGVCcmFuZFJlcXVpcmVtZW50IHByaXZhdGVCcmFu
ZFJlcXVpcmVtZW50LCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0gZmFs
c2UpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV91bmxpbmtl
ZENvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKICAgICAgICAgbV91bmxpbmtlZENvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5jbGVhcigpOwotICAgICAgICB2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZVNwYWNlKCkuc2V0LnJlbW92ZSh0aGlzKTsKKyAgICAgICAgdm0uaGVhcC51bmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNldC5yZW1vdmUodGhpcyk7CiAgICAgfQogCiAgICAg
dm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIExleGljYWxTY29wZUZlYXR1
cmVzIGxleGljYWxTY29wZUZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjg2NTczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9ja1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAkocmV2
aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9ja1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLmRlYnVnZ2VyU2NvcGVTcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJ
KHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRl
U3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMjEgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExvY2FsQWxsb2NhdG9yPj4gbV9sb2NhbEFsbG9jYXRv
cnM7CiB9OwogCisvL2NsYXNzIENvbXBsZXRlU3Vic3BhY2UgeworLy9wdWJsaWM6CisvLyAgICBK
U19FWFBPUlRfUFJJVkFURSBDb21wbGV0ZVN1YnNwYWNlKENvbXBsZXRlU3Vic3BhY2UmKTsKKy8v
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21wbGV0ZVN1YnNwYWNlKCk7CisvLworLy8gICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOworLy8KKy8vICAg
IHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSk7CisvLworLy9wcml2YXRlOgorLy8gICAgQ29tcGxldGVTdWJzcGFjZSYg
bV9zZXJ2ZXI7CisvLy8vICAgIExvY2FsQWxsb2NhdG9yIG1fbG9jYWxBbGxvY2F0b3I7CisvL307
CisKKwogQUxXQVlTX0lOTElORSBBbGxvY2F0b3IgQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9y
Rm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgaWYgKHNpemUg
PD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIklzb0NlbGxTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SXNvSW5saW5lZEhlYXBDZWxsVHlwZUlubGluZXMuaCIKKyNpbmNsdWRlICJJc29TdWJzcGFjZVBl
clZNLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKICNpbmNsdWRlICJKSVRXb3Jr
bGlzdElubGluZXMuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCkBAIC0x
MTQsNyArMTE1LDcgQEAgZG91YmxlIG1heFBhdXNlTVMoZG91YmxlIHRoaXNQYXVzZU1TKQogCiBz
aXplX3QgbWluSGVhcFNpemUoSGVhcFR5cGUgaGVhcFR5cGUsIHNpemVfdCByYW1TaXplKQogewot
ICAgIGlmIChoZWFwVHlwZSA9PSBMYXJnZUhlYXApIHsKKyAgICBpZiAoaGVhcFR5cGUgPT0gSGVh
cFR5cGU6OkxhcmdlKSB7CiAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBzdGQ6Om1pbigKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4oT3B0aW9uczo6bGFyZ2VIZWFwU2l6ZSgpKSwKICAg
ICAgICAgICAgIHJhbVNpemUgKiBPcHRpb25zOjpzbWFsbEhlYXBSQU1GcmFjdGlvbigpKTsKQEAg
LTM5NCwxMCArMzk1LDEwIEBAIEhlYXA6OkhlYXAoVk0mIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIHN5bWJvbFRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0
aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFN5bWJvbFRhYmxlKSAvLyBIYXNoOjB4YzUyMTVhZmQKICAg
ICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VTcGFjZSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0
aEZpbmFsaXplcnMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQotICAgICwgY29kZUJs
b2NrU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2Vs
bFR5cGUsIENvZGVCbG9jaykgLy8gSGFzaDoweDc3ZTY2ZWM5Ci0gICAgLCBmdW5jdGlvbkV4ZWN1
dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBD
ZWxsVHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NWQxNThmMwotICAgICwgcHJv
Z3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZSwgUHJvZ3JhbUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNwot
ICAgICwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgq
dGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpIC8vIEhhc2g6MHhmNmI4MjhkOQorICAgICwgY29kZUJsb2NrU3BhY2VBbmRTZXQgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIENvZGVC
bG9jaykgLy8gSGFzaDoweDc3ZTY2ZWM5CisgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFu
ZFNldCBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZSwgRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NWQxNThmMworICAgICwgcHJvZ3JhbUV4
ZWN1dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZSwgUHJvZ3JhbUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNwor
ICAgICwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0Vf
SU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUpIC8vIEhhc2g6MHhmNmI4MjhkOQogCiB7CiAgICAgbV93b3JsZFN0YXRlLnN0
b3JlKDApOwpAQCAtNDQ4LDYgKzQ0OSw5IEBAIEhlYXA6On5IZWFwKCkKICAgICAKICAgICBmb3Ig
KFdlYWtCbG9jayogYmxvY2sgOiBtX2xvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcykKICAgICAgICAg
V2Vha0Jsb2NrOjpkZXN0cm95KCp0aGlzLCBibG9jayk7CisKKyAgICBmb3IgKGF1dG8qIHBlclZN
SXNvU3Vic3BhY2UgOiBwZXJWTUlzb1N1YnNwYWNlcykKKyAgICAgICAgcGVyVk1Jc29TdWJzcGFj
ZS0+cmVsZWFzZUlzb1N1YnNwYWNlKCp0aGlzKTsKIH0KIAogYm9vbCBIZWFwOjppc1BhZ2VkT3V0
KCkKQEAgLTY5Miw3ICs2OTYsNyBAQCB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB2bS5idWlsdGluRXhlY3V0
YWJsZXMoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZnVuY3Rpb25FeGVjdXRh
YmxlU3BhY2Uuc3BhY2UpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8RnVuY3Rpb25FeGVjdXRhYmxlPihmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zcGFj
ZSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTeW1ib2xUYWJs
ZT4oc3ltYm9sVGFibGVTcGFjZSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyczxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPihleGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlc1dpdGhGaW5hbGl6ZXJzKTsgLy8gV2UgcnVuIHRoaXMgYmVmb3JlIENvZGVCbG9jaydzIHVu
Y29uZGl0aW9uYWwgZmluYWxpemVyIHNpbmNlIENvZGVCbG9jayBsb29rcyBhdCB0aGUgb3duZXIg
ZXhlY3V0YWJsZSdzIGluc3RhbGxlZCBDb2RlQmxvY2sgaW4gaXRzIGZpbmFsaXplVW5jb25kaXRp
b25hbGx5LgogICAgIGZvckVhY2hDb2RlQmxvY2tTcGFjZSgKQEAgLTcwMCw3ICs3MDQsNyBAQCB2
b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplCiAgICAgICAgICAgICB0aGlz
LT5maW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPENvZGVCbG9jaz4oc3BhY2Uu
c2V0KTsKICAgICAgICAgfSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxp
emVyczxTdHJ1Y3R1cmVSYXJlRGF0YT4oc3RydWN0dXJlUmFyZURhdGFTcGFjZSk7Ci0gICAgZmlu
YWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4odW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQpOworICAgIGZpbmFsaXpl
TWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
KHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc2V0KTsKICAgICBpZiAobV93
ZWFrU2V0U3BhY2UpCiAgICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8SlNXZWFrU2V0PigqbV93ZWFrU2V0U3BhY2UpOwogICAgIGlmIChtX3dlYWtNYXBTcGFjZSkK
QEAgLTEwNTksNyArMTA2Myw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxv
Y2tzKEQKICAgICBSRUxFQVNFX0FTU0VSVCghbV9jb2xsZWN0aW9uU2NvcGUpOwogCiAgICAgSGVh
cEl0ZXJhdGlvblNjb3BlIGhlYXBJdGVyYXRpb25TY29wZSgqdGhpcyk7Ci0gICAgdW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQuZm9yRWFjaExpdmVDZWxsKAorICAgIHVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc2V0LmZvckVhY2hMaXZlQ2VsbCgKICAgICAg
ICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmNs
ZWFyQ29kZSh2bSk7CkBAIC0zMzA0LDQgKzMzMDgsMTk3IEBAIERZTkFNSUNfU1BBQ0VfQU5EX1NF
VF9ERUZJTkVfTUVNQkVSX1NMT1cKIAogI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJ
TkVfTUVNQkVSX1NMT1cKIAorCituYW1lc3BhY2UgR0NDbGllbnQgeworCisjZGVmaW5lIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChzdWJzcGFjZSkgc3Vic3BhY2UoaGVhcC5zdWJzcGFjZSkKKyNk
ZWZpbmUgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChzdWJzcGFj
ZSkgc3Vic3BhY2UoaGVhcC5zdWJzcGFjZSMjQW5kU2V0LnNwYWNlKQorCitIZWFwOjpIZWFwKEpT
Qzo6SGVhcCYgaGVhcCkKKyAgICA6IG1fc2VydmVyKGhlYXApCisgICAgLCBDTElFTlRfSVNPX1NV
QlNQQUNFX0lOSVQoYXJyYXlTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChi
aWdJbnRTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjYWxsZWVTcGFjZSkK
KyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjbG9uZWRBcmd1bWVudHNTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChkYXRlSW5zdGFuY2VTcGFjZSkKKyAgICAsIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVChkb21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChleGNlcHRpb25TcGFjZSkKKyAgICAsIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCisgICAg
LCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZnVuY3Rpb25TcGFjZSkKKyAgICAsIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChnZXR0ZXJTZXR0ZXJTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVChnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZSkKKyAgICAsIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChpbnRlcm5hbEZ1bmN0aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNP
X1NVQlNQQUNFX0lOSVQoanNQcm94eVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9J
TklUKG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5J
VChudW1iZXJPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwbGFp
bk9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHByb21pc2VTcGFj
ZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQocHJvcGVydHlUYWJsZVNwYWNl
KQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHJlZ0V4cFNwYWNlKQorICAgICwgQ0xJ
RU5UX0lTT19TVUJTUEFDRV9JTklUKHJlZ0V4cE9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lT
T19TVUJTUEFDRV9JTklUKHJvcGVTdHJpbmdTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChzY29wZWRBcmd1bWVudHNTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0Vf
SU5JVChzcGFyc2VBcnJheVZhbHVlTWFwU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoc3RyaW5nU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3RyaW5n
T2JqZWN0U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3RydWN0dXJlQ2hh
aW5TcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzdHJ1Y3R1cmVSYXJlRGF0
YVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cnVjdHVyZVNwYWNlKQor
ICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzeW1ib2xUYWJsZVNwYWNlKQorICAgICwgQ0xJ
RU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChjb2RlQmxvY2tTcGFjZSkK
KyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQoZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVRfRlJPTV9T
UEFDRV9BTkRfU0VUKHByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NV
QlNQQUNFX0lOSVRfRlJPTV9TUEFDRV9BTkRfU0VUKHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2UpCit7Cit9CisKK0hlYXA6On5IZWFwKCkKK3sKKyAgICBmb3IgKGF1dG8qIHBlclZNSXNv
U3Vic3BhY2UgOiBwZXJWTUlzb1N1YnNwYWNlcykKKyAgICAgICAgcGVyVk1Jc29TdWJzcGFjZS0+
cmVsZWFzZUNsaWVudElzb1N1YnNwYWNlKHZtKCkpOworfQorCisjdW5kZWYgQ0xJRU5UX0lTT19T
VUJTUEFDRV9JTklUCisjdW5kZWYgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0Vf
QU5EX1NFVAorCisKKyNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKG5hbWUpIFwKKyAgICBJc29TdWJzcGFjZSogSGVhcDo6bmFtZSMjU2xvdygpIFwKKyAgICB7
IFwKKyAgICAgICAgQVNTRVJUKCFtXyMjbmFtZSk7IFwKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7
IHNlcnZlcigpLm1fbG9jayB9OyBcCisgICAgICAgIEpTQzo6SXNvU3Vic3BhY2UmIHNlcnZlclNw
YWNlID0gKnNlcnZlcigpLm5hbWU8U3Vic3BhY2VBY2Nlc3M6Ok9uTWFpblRocmVhZD4oKTsgXAor
ICAgICAgICBhdXRvIHNwYWNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4oc2VydmVyU3BhY2Up
OyBcCisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IFwKKyAgICAgICAgbV8jI25hbWUg
PSBXVEZNb3ZlKHNwYWNlKTsgXAorICAgICAgICByZXR1cm4gbV8jI25hbWUuZ2V0KCk7IFwKKyAg
ICB9CisKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlHbG9iYWxP
YmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlW
YWx1ZVdyYXBwZXJTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhhcnJheUJ1ZmZlclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGFycmF5SXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhhc3luY0dlbmVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGJpZ0ludDY0QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhiaWdJbnRPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhiaWdVaW50NjRBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGJvb2xlYW5PYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhib3VuZEZ1bmN0aW9uU3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2FsbGJhY2tDb25zdHJ1Y3RvclNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrR2xvYmFs
T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2Fs
bGJhY2tGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGNhbGxiYWNrT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coY3VzdG9tR2V0dGVyRnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGRhdGFWaWV3U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZGVidWdnZXJTY29wZVNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGVycm9ySW5zdGFuY2VTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmbG9hdDMyQXJyYXlTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmbG9hdDY0QXJyYXlTcGFj
ZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmdW5jdGlvblJhcmVE
YXRhU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZ2VuZXJh
dG9yU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZ2xvYmFs
T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW5q
ZWN0ZWRTY3JpcHRIb3N0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coaW50OEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coaW50MTZBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGludDMyQXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coanNNb2R1bGVSZWNvcmRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhtYXBCdWNrZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhtYXBJdGVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG1hcFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKG1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlPYmplY3RTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9rZVNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjb3BlZEFyZ3VtZW50
c1RhYmxlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2Ny
aXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coc2NyaXB0RmV0Y2hlclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHNldEJ1Y2tldFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHNldEl0ZXJhdG9yU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coc2V0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coc2hhZG93UmVhbG1TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhzdHJpY3RFdmFsQWN0aXZhdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHN0cmluZ0l0ZXJhdG9yU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc291cmNlQ29kZVNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHN5bWJvbFNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHN5bWJvbE9iamVjdFNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvclNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsQ2FsZW5k
YXJTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3Jh
bER1cmF0aW9uU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
dGVtcG9yYWxJbnN0YW50U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1codGVtcG9yYWxQbGFpblRpbWVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyh0ZW1wb3JhbFRpbWVab25lU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1codWludDhBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHVpbnQ4Q2xhbXBlZEFycmF5U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codWludDE2QXJyYXlTcGFjZSkKK0RZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1aW50MzJBcnJheVNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVubGlua2VkRXZhbENvZGVCbG9ja1Nw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2tTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTcGFjZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWFrTWFwU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2Vha1NldFNwYWNlKQorRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYWtPYmplY3RSZWZTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3aXRoU2NvcGVTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmaW5hbGl6YXRpb25SZWdp
c3RyeVNwYWNlKQorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpV3JhcHBlck9iamVjdFNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG9iakNDYWxsYmFja0Z1bmN0aW9uU3BhY2UpCisj
ZW5kaWYKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKGFwaVdyYXBwZXJPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc2NDYWxsYmFja0Z1bmN0aW9uU3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2FsbGJhY2tBUElXcmFwcGVyR2xv
YmFsT2JqZWN0U3BhY2UpCisjZW5kaWYKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhpbnRsQ29sbGF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhpbnRsRGF0ZVRpbWVGb3JtYXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhpbnRsRGlzcGxheU5hbWVzU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bExpc3RGb3JtYXRTcGFjZSkKK0RZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTG9jYWxlU3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bE51bWJlckZvcm1hdFNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxQbHVyYWxSdWxlc1Nw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxSZWxhdGl2
ZVRpbWVGb3JtYXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhpbnRsU2VnbWVudEl0ZXJhdG9yU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSX1NMT1coaW50bFNlZ21lbnRlclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50c1NwYWNlKQorI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc1RvV2FzbUlDQ2Fs
bGVlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNz
ZW1ibHlDb2RlQmxvY2tTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh3ZWJBc3NlbWJseUV4Y2VwdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5SW5zdGFuY2VTcGFj
ZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseU1l
bW9yeVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFz
c2VtYmx5TW9kdWxlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1cod2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlUYWdTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNw
YWNlKQorI2VuZGlmCisKKyN1bmRlZiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cKKworI2RlZmluZSBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9X
KG5hbWUpIFwKKyAgICBJc29TdWJzcGFjZSogSGVhcDo6bmFtZSMjU2xvdygpIFwKKyAgICB7IFwK
KyAgICAgICAgQVNTRVJUKCFtXyMjbmFtZSk7IFwKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IHNl
cnZlcigpLm1fbG9jayB9OyBcCisgICAgICAgIEpTQzo6SXNvU3Vic3BhY2UmIHNlcnZlclNwYWNl
ID0gKnNlcnZlcigpLm5hbWU8U3Vic3BhY2VBY2Nlc3M6Ok9uTWFpblRocmVhZD4oKTsgXAorICAg
ICAgICBhdXRvIHNwYWNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4oc2VydmVyU3BhY2UpOyBc
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IFwKKyAgICAgICAgbV8jI25hbWUgPSBX
VEZNb3ZlKHNwYWNlKTsgXAorICAgICAgICByZXR1cm4gbV8jI25hbWUuZ2V0KCk7IFwKKyAgICB9
CisKK0RZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSX1NMT1coZXZhbEV4ZWN1dGFi
bGVTcGFjZSkKK0RZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSX1NMT1cobW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKKworI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9E
RUZJTkVfTUVNQkVSX1NMT1cKKworfSAvLyBuYW1lc3BhY2UgR0NDbGllbnQKKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyODY1
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBQcm9maWxlcjsKIGNsYXNz
IEhlYXBWZXJpZmllcjsKIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKK2NsYXNzIElzb1N1YnNw
YWNlUGVyVk07CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0
OwogY2xhc3MgSlNDZWxsOwpAQCAtMTA2LDEwICsxMDcsMTQgQEAgbmFtZXNwYWNlIERGRyB7CiBj
bGFzcyBTcGVjdWxhdGl2ZUpJVDsKIH0KIAorbmFtZXNwYWNlIEdDQ2xpZW50IHsKK2NsYXNzIEhl
YXA7Cit9CisKIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50U2V0
OwogdHlwZWRlZiBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4gVHlwZUNvdW50U2V0OwogCi1l
bnVtIEhlYXBUeXBlIHsgU21hbGxIZWFwLCBMYXJnZUhlYXAgfTsKK2VudW0gY2xhc3MgSGVhcFR5
cGUgOiB1aW50OF90IHsgU21hbGwsIExhcmdlIH07CiAKIGNsYXNzIEhlYXBVdGlsOwogCkBAIC0z
ODksNiArMzk0LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtpbmdGb3JHQ1ZlcmlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pc01hcmtpbmdGb3JHQ1ZlcmlmaWVyOyB9CiAKKyAgICBMb2Nr
JiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEFsbG9jYXRpbmdTY29wZTsKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAtNDIwLDYg
KzQyNyw4IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgSGVhcFRocmVhZDsKICAgICBmcmllbmQgY2xh
c3MgSGVhcFRocmVhZDsKIAorICAgIGZyaWVuZCBjbGFzcyBHQ0NsaWVudDo6SGVhcDsKKwogICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1pbkV4dHJhTWVtb3J5ID0gMjU2OwogICAgIAogICAg
IGNsYXNzIENGaW5hbGl6ZXJPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewpA
QCAtNTcwLDYgKzU3OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB2ZXJpZnlHQygpOwog
CisgICAgTG9jayBtX2xvY2s7CiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBN
dXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUgeyBNdXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAg
ICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtODczLDcgKzg4Myw2IEBAIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZSogbmFtZSMjU2xvdygpOyBcCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPiBtXyMjbmFtZTsKIAotCiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFwaVdyYXBw
ZXJPYmplY3RTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG9i
akNDYWxsYmFja0Z1bmN0aW9uU3BhY2UpCkBAIC0xMDE3LDM1ICsxMDI2LDIxNiBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9OwogICAgIAotICAgIFNwYWNlQW5kU2V0IGNvZGVCbG9ja1NwYWNl
OworICAgIFNwYWNlQW5kU2V0IGNvZGVCbG9ja1NwYWNlQW5kU2V0OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tTcGFjZShjb25zdCBGdW5j
JiBmdW5jKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGluY2x1ZGUgd2ViQXNz
ZW1ibHlDb2RlQmxvY2tTcGFjZSBiZWNhdXNlIHRoaXMgaXMgYWJvdXQgc3Vic2NsYXNzZXMgb2YK
ICAgICAgICAgLy8gSlNDOjpDb2RlQmxvY2suCi0gICAgICAgIGZ1bmMoY29kZUJsb2NrU3BhY2Up
OworICAgICAgICBmdW5jKGNvZGVCbG9ja1NwYWNlQW5kU2V0KTsKICAgICB9CiAKICAgICBEWU5B
TUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUihldmFsRXhlY3V0YWJsZVNwYWNlKQogICAg
IERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlU3BhY2UpCi0gICAgU3BhY2VBbmRTZXQgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7Ci0gICAg
U3BhY2VBbmRTZXQgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICBTcGFjZUFuZFNldCBmdW5j
dGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldDsKKyAgICBTcGFjZUFuZFNldCBwcm9ncmFtRXhlY3V0
YWJsZVNwYWNlQW5kU2V0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lk
IGZvckVhY2hTY3JpcHRFeGVjdXRhYmxlU3BhY2UoY29uc3QgRnVuYyYgZnVuYykKICAgICB7CiAg
ICAgICAgIGlmIChtX2V2YWxFeGVjdXRhYmxlU3BhY2UpCiAgICAgICAgICAgICBmdW5jKCptX2V2
YWxFeGVjdXRhYmxlU3BhY2UpOwotICAgICAgICBmdW5jKGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
KTsKKyAgICAgICAgZnVuYyhmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldCk7CiAgICAgICAg
IGlmIChtX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCiAgICAgICAgICAgICBmdW5jKCpt
X21vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UpOwotICAgICAgICBmdW5jKHByb2dyYW1FeGVj
dXRhYmxlU3BhY2UpOworICAgICAgICBmdW5jKHByb2dyYW1FeGVjdXRhYmxlU3BhY2VBbmRTZXQp
OwogICAgIH0KIAotICAgIFNwYWNlQW5kU2V0IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2U7CisgICAgU3BhY2VBbmRTZXQgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNl
dDsKIAorICAgIFZlY3RvcjxJc29TdWJzcGFjZVBlclZNKj4gcGVyVk1Jc29TdWJzcGFjZXM7CiAj
dW5kZWYgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVIKIH07CiAKK25hbWVzcGFj
ZSBHQ0NsaWVudCB7CisKK2NsYXNzIEhlYXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhl
YXApOworcHVibGljOgorICAgIEhlYXAoSlNDOjpIZWFwJik7CisgICAgfkhlYXAoKTsKKworICAg
IFZNJiB2bSgpIGNvbnN0OworICAgIEpTQzo6SGVhcCYgc2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2
ZXI7IH0KKworcHJpdmF0ZToKKyAgICBKU0M6OkhlYXAmIG1fc2VydmVyOworCisgICAgSXNvU3Vi
c3BhY2UgYXJyYXlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBiaWdJbnRTcGFjZTsKKyAgICBJc29T
dWJzcGFjZSBjYWxsZWVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBjbG9uZWRBcmd1bWVudHNTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSBjdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZTsKKyAgICBJc29TdWJz
cGFjZSBkYXRlSW5zdGFuY2VTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBkb21BdHRyaWJ1dGVHZXR0
ZXJTZXR0ZXJTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBleGNlcHRpb25TcGFjZTsKKyAgICBJc29T
dWJzcGFjZSBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ug
ZnVuY3Rpb25TcGFjZTsKKyAgICBJc29TdWJzcGFjZSBnZXR0ZXJTZXR0ZXJTcGFjZTsKKyAgICBJ
c29TdWJzcGFjZSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsKKyAgICBJc29TdWJzcGFj
ZSBpbnRlcm5hbEZ1bmN0aW9uU3BhY2U7CisgICAgSXNvU3Vic3BhY2UganNQcm94eVNwYWNlOwor
ICAgIElzb1N1YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBu
dW1iZXJPYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwbGFpbk9iamVjdFNwYWNlOworICAg
IElzb1N1YnNwYWNlIHByb21pc2VTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgcHJvcGVydHlUYWJsZVNwYWNlOworICAg
IElzb1N1YnNwYWNlIHJlZ0V4cFNwYWNlOworICAgIElzb1N1YnNwYWNlIHJlZ0V4cE9iamVjdFNw
YWNlOworICAgIElzb1N1YnNwYWNlIHJvcGVTdHJpbmdTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBz
Y29wZWRBcmd1bWVudHNTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzcGFyc2VBcnJheVZhbHVlTWFw
U3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RyaW5nU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3Ry
aW5nT2JqZWN0U3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RydWN0dXJlQ2hhaW5TcGFjZTsKKyAg
ICBJc29TdWJzcGFjZSBzdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlOworICAgIElzb1N1YnNwYWNlIHN0
cnVjdHVyZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZTsKKyAg
ICBJc29TdWJzcGFjZSBzeW1ib2xUYWJsZVNwYWNlOworCisjZGVmaW5lIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIobmFtZSkgXAorICAgIHRlbXBsYXRlPFN1YnNwYWNlQWNjZXNz
IG1vZGU+IFwKKyAgICBJc29TdWJzcGFjZSogbmFtZSgpIFwKKyAgICB7IFwKKyAgICAgICAgaWYg
KG1fIyNuYW1lIHx8IG1vZGUgPT0gU3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkgXAorICAg
ICAgICAgICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgICAgIHJldHVybiBuYW1lIyNT
bG93KCk7IFwKKyAgICB9IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZSogbmFt
ZSMjU2xvdygpOyBcCisgICAgc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPiBtXyMjbmFtZTsK
KworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQorI2VuZGlmCisjaWZk
ZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGFwaVdyYXBwZXJPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGpzY0NhbGxiYWNrRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrQVBJV3JhcHBlckdsb2JhbE9iamVjdFNwYWNl
KQorI2VuZGlmCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlHbG9i
YWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFw
aVZhbHVlV3JhcHBlclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoYXJyYXlCdWZmZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKGFycmF5SXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGFzeW5jR2VuZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihiaWdJbnQ2NEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihiaWdJbnRPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGJpZ1VpbnQ2NEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihib29sZWFuT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihib3VuZEZ1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0NvbnN0cnVjdG9yU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0dsb2JhbE9iamVjdFNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY2FsbGJhY2tGdW5j
dGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY2FsbGJh
Y2tPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGN1
c3RvbUdldHRlckZ1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoZGF0YVZpZXdTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGRlYnVnZ2VyU2NvcGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKGVycm9ySW5zdGFuY2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGZsb2F0MzJBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZmxvYXQ2NEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihmdW5jdGlvblJhcmVEYXRhU3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihnZW5lcmF0b3JTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGdsb2JhbE9iamVjdFNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW5qZWN0ZWRTY3JpcHRIb3N0U3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnQ4QXJyYXlTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludDE2QXJyYXlTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludDMyQXJyYXlTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGphdmFTY3JpcHRDYWxsRnJh
bWVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzTW9kdWxl
UmVjb3JkU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtYXBC
dWNrZXRTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG1hcEl0
ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtYXBT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG1vZHVsZU5hbWVz
cGFjZU9iamVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
bmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHByb3h5T2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihwcm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hlclNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2V0QnVja2V0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzZXRJdGVyYXRvclNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2V0U3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzaGFkb3dSZWFsbVNwYWNlKTsKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHN0cmljdEV2YWxBY3RpdmF0aW9uU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzdHJpbmdJdGVyYXRvclNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc291cmNlQ29kZVNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc3ltYm9sU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzeW1ib2xPYmplY3RTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVt
cG9yYWxDYWxlbmRhclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIodGVtcG9yYWxEdXJhdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIodGVtcG9yYWxJbnN0YW50U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih0ZW1wb3JhbFBsYWluVGltZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxUaW1lWm9uZVNwYWNlKQorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodWludDhBcnJheVNwYWNlKQorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodWludDhDbGFtcGVkQXJyYXlTcGFjZSkKKyAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVpbnQxNkFycmF5U3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1aW50MzJBcnJheVNwYWNlKQorICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRFdmFsQ29kZUJsb2Nr
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1bmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1NwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZmluYWxpemF0aW9uUmVnaXN0
cnlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYWtPYmpl
Y3RSZWZTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYWtT
ZXRTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYWtNYXBT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdpdGhTY29wZVNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bENvbGxhdG9y
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsRGF0ZVRp
bWVGb3JtYXRTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGlu
dGxEaXNwbGF5TmFtZXNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKGludGxMaXN0Rm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihpbnRsTG9jYWxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihpbnRsTnVtYmVyRm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihpbnRsUGx1cmFsUnVsZXNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKGludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxTZWdtZW50ZXJTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxTZWdtZW50c1Nw
YWNlKQorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUV4Y2VwdGlvblNwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlGdW5jdGlv
blNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlHbG9iYWxTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdl
YkFzc2VtYmx5SW5zdGFuY2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHdlYkFzc2VtYmx5TWVtb3J5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTcGFjZSkKKyAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5VGFibGVTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5VGFnU3Bh
Y2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvblNwYWNlKQorI2VuZGlmCisKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQorCisjdW5kZWYg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUgorCisgICAgSXNvU3Vic3BhY2UgY29k
ZUJsb2NrU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7Cisg
ICAgSXNvU3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSB1
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworCisvLyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPj4gaXNvU3Vic3BhY2VzTmVlZGluZ0Rlc3RydWN0aW9uOworcHVi
bGljOgorICAgIFZlY3RvcjxJc29TdWJzcGFjZVBlclZNKj4gcGVyVk1Jc29TdWJzcGFjZXM7CisK
KyAgICBmcmllbmQgY2xhc3MgSlNDOjpWTTsKK307CisKK30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNCArMjcwLDEzIEBAIHZv
aWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMKICAgICAgICAgZnVuYygqdmlz
aXRvcik7CiB9CiAKK25hbWVzcGFjZSBHQ0NsaWVudCB7CisKK0FMV0FZU19JTkxJTkUgVk0mIEhl
YXA6OnZtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxWTSo+KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKFZNLCBjbGllbnRIZWFwKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNpb24g
Mjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogSXNvU3Vic3Bh
Y2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgY29uc3QgSGVhcENlbGxU
eXBlJiBoZWFwQ2VsbFR5cGUsIHNpemVfdCBzaXplLCB1aW50OF90IG51bWJlck9mTG93ZXJUaWVy
Q2VsbHMsIHN0ZDo6dW5pcXVlX3B0cjxJc29NZW1vcnlBbGxvY2F0b3JCYXNlPiYmIGFsbG9jYXRv
cikKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAgLCBtX2RpcmVjdG9yeShXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKLSAgICAsIG1f
bG9jYWxBbGxvY2F0b3IoJm1fZGlyZWN0b3J5KQogICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKGFsbG9jYXRvciA/IFdURk1vdmUoYWxsb2NhdG9yKSA6IG1ha2VVbmlxdWU8SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcj4obmFtZSkpCiB7CiAgICAgbV9yZW1haW5pbmdMb3dlclRpZXJD
ZWxsQ291bnQgPSBudW1iZXJPZkxvd2VyVGllckNlbGxzOwpAQCAtMTE5LDUgKzExOCwxNCBAQCB2
b2lkIElzb1N1YnNwYWNlOjpkZXN0cm95TG93ZXJUaWVyRnJlZUxpCiAgICAgfSk7CiB9CiAKK25h
bWVzcGFjZSBHQ0NsaWVudCB7CisKK0lzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShKU0M6Oklzb1N1
YnNwYWNlJiBzZXJ2ZXIpCisgICAgOiBtX2xvY2FsQWxsb2NhdG9yKCZzZXJ2ZXIubV9kaXJlY3Rv
cnkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlz
aW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBJc29DZWxsU2V0OwogCituYW1lc3BhY2UgR0NDbGllbnQgeworY2xhc3MgSXNvU3Vic3BhY2U7
Cit9CisKIGNsYXNzIElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBjb25z
dCBIZWFwQ2VsbFR5cGUmLCBzaXplX3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNl
bGxzLCBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4mJiA9IG51bGxwdHIp
OwpAQCAtNDIsMTAgKzQ2LDYgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGNlbGxTaXplKCkgeyBy
ZXR1cm4gbV9kaXJlY3RvcnkuY2VsbFNpemUoKTsgfQogCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRv
ckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwotCi0gICAgdm9pZCogYWxsb2NhdGUoVk0m
LCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKLQog
ICAgIHZvaWQgc3dlZXBMb3dlclRpZXJDZWxsKFByZWNpc2VBbGxvY2F0aW9uKik7CiAgICAgdm9p
ZCBjbGVhcklzb0NlbGxTZXRCaXQoUHJlY2lzZUFsbG9jYXRpb24qKTsKIApAQCAtNTgsMjQgKzU4
LDU1IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsK
KyAgICBmcmllbmQgY2xhc3MgR0NDbGllbnQ6Oklzb1N1YnNwYWNlOwogICAgIAogICAgIHZvaWQg
ZGlkUmVzaXplQml0cyh1bnNpZ25lZCBuZXdTaXplKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJl
bW92ZUJsb2NrKHVuc2lnbmVkIGJsb2NrSW5kZXgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQmVn
aW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSopIG92ZXJyaWRlOwotICAg
IAorCisgICAgc3RhdGljIElzb1N1YnNwYWNlJiBmcm9tQmxvY2tEaXJlY3RvcnkoQmxvY2tEaXJl
Y3RvcnkmKTsKKwogICAgIEJsb2NrRGlyZWN0b3J5IG1fZGlyZWN0b3J5OwotICAgIExvY2FsQWxs
b2NhdG9yIG1fbG9jYWxBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb01lbW9yeUFs
bG9jYXRvckJhc2U+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8UHJlY2lzZUFsbG9jYXRpb24sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQcmVjaXNl
QWxsb2NhdGlvbj4+IG1fbG93ZXJUaWVyRnJlZUxpc3Q7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0
PElzb0NlbGxTZXQsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0
czsKIH07CiAKK0FMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIElzb1N1YnNwYWNlOjpmcm9tQmxv
Y2tEaXJlY3RvcnkoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkKK3sKKyAgICByZXR1cm4gKmJp
dHdpc2VfY2FzdDxJc29TdWJzcGFjZSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZkaXJlY3Rv
cnkpIC0gT0JKRUNUX09GRlNFVE9GKElzb1N1YnNwYWNlLCBtX2RpcmVjdG9yeSkpOworfQorCitu
YW1lc3BhY2UgR0NDbGllbnQgeworCitjbGFzcyBJc29TdWJzcGFjZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSXNvU3Vic3BhY2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlKEpTQzo6SXNvU3Vic3Bh
Y2UmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+SXNvU3Vic3BhY2UoKSA9IGRlZmF1bHQ7Cisg
ICAgLy8gbWxhbSBGSVhNRSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHJlbGlucXVpc2ggdGhl
IExvY2FsQWxsb2NhdG9yIHRvIHRoZSBzZXJ2ZXIgb24gZGVzdHJ1Y3Rpb24uCisKKyAgICBzaXpl
X3QgY2VsbFNpemUoKSB7IHJldHVybiBtX2xvY2FsQWxsb2NhdG9yLmNlbGxTaXplKCk7IH0KKwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKwor
ICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSk7CisKKyAgICBKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXIoKTsKKwor
cHJpdmF0ZToKKyAgICBMb2NhbEFsbG9jYXRvciBtX2xvY2FsQWxsb2NhdG9yOworfTsKKwogQUxX
QVlTX0lOTElORSBBbGxvY2F0b3IgSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSA9PSBjZWxsU2l6ZSgpKTsK
ICAgICByZXR1cm4gQWxsb2NhdG9yKCZtX2xvY2FsQWxsb2NhdG9yKTsKIH0KIAorfSAvLyBuYW1l
c3BhY2UgR0NDbGllbnQKKwogI2RlZmluZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwQ2Vs
bFR5cGUsIHR5cGUpICgiSXNvbGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhlYXApLCAoaGVhcENl
bGxUeXBlKSwgc2l6ZW9mKHR5cGUpLCB0eXBlOjpudW1iZXJPZkxvd2VyVGllckNlbGxzKQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgR0NDbGllbnQgewor
CiBBTFdBWVNfSU5MSU5FIHZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShWTSYgdm0sIHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkgPT0gY2VsbFNpemUoKSk7
CkBAIC0zNSw2ICszNyw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9j
YXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiBp
bmxpbmUgdm9pZCBJc29TdWJzcGFjZTo6Y2xlYXJJc29DZWxsU2V0Qml0KFByZWNpc2VBbGxvY2F0
aW9uKiBwcmVjaXNlQWxsb2NhdGlvbikKIHsKICAgICB1bnNpZ25lZCBsb3dlclRpZXJJbmRleCA9
IHByZWNpc2VBbGxvY2F0aW9uLT5sb3dlclRpZXJJbmRleCgpOwpAQCAtNjAsNSArNjQsMTUgQEAg
dm9pZCBJc29TdWJzcGFjZTo6Zm9yRWFjaExvd2VyVGllckZyZWVMaQogICAgIG1fbG93ZXJUaWVy
RnJlZUxpc3QuZm9yRWFjaChmdW5jKTsKIH0KIAorbmFtZXNwYWNlIEdDQ2xpZW50IHsKKworLy8g
bWxhbSBGSVhNRSBkbyB3ZSBuZWVkIHRoaXM/IERlbGV0ZSBpZiBub3QgdXNlZC4KK2lubGluZSBK
U0M6Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZTo6c2VydmVyKCkKK3sKKyAgICByZXR1cm4gSlND
OjpJc29TdWJzcGFjZTo6ZnJvbUJsb2NrRGlyZWN0b3J5KG1fbG9jYWxBbGxvY2F0b3IuZGlyZWN0
b3J5KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQ
ZXJWTS5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb1N1YnNwYWNlUGVyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyNSArMzEsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSXNvU3Vic3BhY2VQZXJWTTo6QXV0b3JlbW92aW5n
SXNvU3Vic3BhY2UgZmluYWwgOiBwdWJsaWMgSXNvU3Vic3BhY2UgewotcHVibGljOgotICAgIEF1
dG9yZW1vdmluZ0lzb1N1YnNwYWNlKElzb1N1YnNwYWNlUGVyVk0mIHBlclZNLCBDU3RyaW5nIG5h
bWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxsVHlwZSYgaGVhcENlbGxUeXBlLCBzaXplX3Qg
c2l6ZSkKLSAgICAgICAgOiBJc29TdWJzcGFjZShuYW1lLCBoZWFwLCBoZWFwQ2VsbFR5cGUsIHNp
emUsIC8qIG51bWJlck9mTG93ZXJUaWVyQ2VsbHMgKi8gMCkKLSAgICAgICAgLCBtX3BlclZNKHBl
clZNKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgfkF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKCkg
ZmluYWwKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3BlclZNLm1fbG9jayB9Owot
ICAgICAgICBtX3BlclZNLm1fc3Vic3BhY2VQZXJWTS5yZW1vdmUoJnNwYWNlKCkuaGVhcCgpLnZt
KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJc29TdWJzcGFjZVBlclZNJiBtX3BlclZNOwot
fTsKLQotSXNvU3Vic3BhY2VQZXJWTTo6SXNvU3Vic3BhY2VQZXJWTShGdW5jdGlvbjxTdWJzcGFj
ZVBhcmFtZXRlcnMoVk0mKT4gc3Vic3BhY2VQYXJhbWV0ZXJzKQorSXNvU3Vic3BhY2VQZXJWTTo6
SXNvU3Vic3BhY2VQZXJWTShGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoSGVhcCYpPiBzdWJz
cGFjZVBhcmFtZXRlcnMpCiAgICAgOiBtX3N1YnNwYWNlUGFyYW1ldGVycyhXVEZNb3ZlKHN1YnNw
YWNlUGFyYW1ldGVycykpCiB7CiB9CkBAIC01OSwxNiArNDEsNjIgQEAgSXNvU3Vic3BhY2VQZXJW
TTo6fklzb1N1YnNwYWNlUGVyVk0oKQogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwog
fQogCi1Jc29TdWJzcGFjZSYgSXNvU3Vic3BhY2VQZXJWTTo6Zm9yVk0oVk0mIHZtKQorSXNvU3Vi
c3BhY2UmIElzb1N1YnNwYWNlUGVyVk06Omlzb1N1YnNwYWNlZm9ySGVhcChIZWFwJiBoZWFwKQog
ewogICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc3Vi
c3BhY2VQZXJWTS5hZGQoJnZtLCBudWxscHRyKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fc3Vic3Bh
Y2VQZXJIZWFwLmFkZCgmaGVhcCwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KSB7Ci0gICAgICAgIFN1YnNwYWNlUGFyYW1ldGVycyBwYXJhbXMgPSBtX3N1YnNwYWNlUGFyYW1l
dGVycyh2bSk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgQXV0b3JlbW92
aW5nSXNvU3Vic3BhY2UoKnRoaXMsIHBhcmFtcy5uYW1lLCB2bS5oZWFwLCAqcGFyYW1zLmhlYXBD
ZWxsVHlwZSwgcGFyYW1zLnNpemUpOworICAgICAgICBTdWJzcGFjZVBhcmFtZXRlcnMgcGFyYW1z
ID0gbV9zdWJzcGFjZVBhcmFtZXRlcnMoaGVhcCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBuZXcgSXNvU3Vic3BhY2UocGFyYW1zLm5hbWUsIGhlYXAsICpwYXJhbXMuaGVhcENl
bGxUeXBlLCBwYXJhbXMuc2l6ZSwgMCk7CisKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXAu
bG9jaygpIH07CisgICAgICAgIGhlYXAucGVyVk1Jc29TdWJzcGFjZXMuYXBwZW5kKHRoaXMpOwog
ICAgIH0KICAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKK0dDQ2xpZW50
OjpJc29TdWJzcGFjZSYgSXNvU3Vic3BhY2VQZXJWTTo6Y2xpZW50SXNvU3Vic3BhY2Vmb3JWTShW
TSYgdm0pCit7CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gbV9jbGllbnRTdWJzcGFjZVBlclZNLmFkZCgmdm0sIG51bGxwdHIp
OworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5ICYmIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgfQor
CisgICAgSXNvU3Vic3BhY2UmIHN1YnNwYWNlID0gaXNvU3Vic3BhY2Vmb3JIZWFwKHZtLmhlYXAp
OworCisgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgIC8vIFdlJ3ZlIGFscmVhZHkg
YWRkZWQgdGhlIGVudHJ5IGFib3ZlLiBIZW5jZSwgaXQgaXMgZ3VhcmFudGVlZCB0byBub3QgYmUg
YQorICAgIC8vIG5ldyBlbnRyeS4gSG93ZXZlciwgYW5vdGhlciB0aHJlYWQgbWF5IGhhdmUgaW5p
dGlhbGl6ZWQgaXRzIHZhbHVlLiBIZW5jZSwKKyAgICAvLyB3ZSBuZWVkIHRvIHJlLWZldGNoIHRo
ZSByZXN1bHQsIGFuZCBjaGVjayBpZiB0aGUgdmFsdWUgaXMgc3RpbGwgbnVsbC4KKyAgICBhdXRv
IHJlc3VsdCA9IG1fY2xpZW50U3Vic3BhY2VQZXJWTS5hZGQoJnZtLCBudWxscHRyKTsKKyAgICBp
ZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpIHsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IG5ldyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uoc3Vic3BhY2UpOworICAgICAgICB2bS5j
bGllbnRIZWFwLnBlclZNSXNvU3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKKyAgICB9CisgICAgcmV0
dXJuICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIElzb1N1YnNwYWNlUGVyVk06
OnJlbGVhc2VJc29TdWJzcGFjZShIZWFwJiBoZWFwKQoreworICAgIElzb1N1YnNwYWNlKiBzdWJz
cGFjZTsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAg
c3Vic3BhY2UgPSBtX3N1YnNwYWNlUGVySGVhcC50YWtlKCZoZWFwKTsKKyAgICB9CisgICAgZGVs
ZXRlIHN1YnNwYWNlOworfQorCit2b2lkIElzb1N1YnNwYWNlUGVyVk06OnJlbGVhc2VDbGllbnRJ
c29TdWJzcGFjZShWTSYgdm0pCit7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBjbGllbnRT
dWJzcGFjZTsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAg
ICAgY2xpZW50U3Vic3BhY2UgPSBtX2NsaWVudFN1YnNwYWNlUGVyVk0udGFrZSgmdm0pOworICAg
IH0KKyAgICBkZWxldGUgY2xpZW50U3Vic3BhY2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5o
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZVBlclZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDkgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBWTTsKKwogLy8gVGhpcyBpcyBhbiBhcHByb3By
aWF0ZSB3YXkgdG8gc3Rhc2ggSXNvU3Vic3BhY2VzIGZvciByYXJlbHktdXNlZCBjbGFzc2VzIG9y
IGNsYXNzZXMgdGhhdCBhcmUgbW9zdGx5CiAvLyBzdXJlIHRvIGJlIG1haW4tdGhyZWFkLW9ubHku
IEJ1dCBpZiBhIGNsYXNzIHR5cGljYWxseSBnZXRzIGluc3RhbnRpYXRlZCBmcm9tIG11bHRpcGxl
IHRocmVhZHMgYXQKIC8vIG9uY2UsIHRoZW4gdGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgY29u
Y3VycmVudCBhbGxvY2F0aW9ucyB3aWxsIHByb2JhYmx5IGNvbnRlbmQgb24gdGhpcyB0aGluZydz
CkBAIC01MywxOCArNTYsMjAgQEAgcHVibGljOgogICAgICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsK
ICAgICB9OwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlUGVyVk0oRnVu
Y3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKFZNJik+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJ
c29TdWJzcGFjZVBlclZNKEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhIZWFwJik+KTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB+SXNvU3Vic3BhY2VQZXJWTSgpOwogICAgIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIElzb1N1YnNwYWNlJiBmb3JWTShWTSYpOworICAgIElzb1N1YnNwYWNlJiBp
c29TdWJzcGFjZWZvckhlYXAoSGVhcCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSYgY2xpZW50SXNvU3Vic3BhY2Vmb3JWTShWTSYpOwogCi1wcml2YXRlOgot
ICAgIGNsYXNzIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlOwotICAgIGZyaWVuZCBjbGFzcyBBdXRv
cmVtb3ZpbmdJc29TdWJzcGFjZTsKKyAgICB2b2lkIHJlbGVhc2VJc29TdWJzcGFjZShIZWFwJik7
CisgICAgdm9pZCByZWxlYXNlQ2xpZW50SXNvU3Vic3BhY2UoVk0mKTsKIAorcHJpdmF0ZToKICAg
ICBMb2NrIG1fbG9jazsKLSAgICBIYXNoTWFwPFZNKiwgSXNvU3Vic3BhY2UqPiBtX3N1YnNwYWNl
UGVyVk0gV1RGX0dVQVJERURfQllfTE9DSyhtX2xvY2spOwotICAgIEZ1bmN0aW9uPFN1YnNwYWNl
UGFyYW1ldGVycyhWTSYpPiBtX3N1YnNwYWNlUGFyYW1ldGVyczsKKyAgICBIYXNoTWFwPEhlYXAq
LCBJc29TdWJzcGFjZSo+IG1fc3Vic3BhY2VQZXJIZWFwIFdURl9HVUFSREVEX0JZX0xPQ0sobV9s
b2NrKTsKKyAgICBIYXNoTWFwPFZNKiwgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKj4gbV9jbGllbnRT
dWJzcGFjZVBlclZNIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBGdW5jdGlvbjxT
dWJzcGFjZVBhcmFtZXRlcnMoSGVhcCYpPiBtX3N1YnNwYWNlUGFyYW1ldGVyczsKIH07CiAKICNk
ZWZpbmUgSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlMoaGVhcENlbGxUeXBlLCB0eXBlKSA6OkpTQzo6
SXNvU3Vic3BhY2VQZXJWTTo6U3Vic3BhY2VQYXJhbWV0ZXJzKCJJc29sYXRlZCAiICN0eXBlICIg
U3BhY2UiLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5cGUpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg2NTczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQsNiArMTM0LDkgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UoSAogICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IG51bGxwdHIpKQogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogCisgICAgLy8gbWxhbSBGSVhNRSBJIHRoaW5rIHdlIG5lZWQgdG8gc3lu
Y2hyb25pemUgaGVyZSB0byBwcmV2ZW50IGRpZmZlcmVudCBWTQorICAgIC8vIG1haW4gdGhyZWFk
cyBmcm9tIHJhY2luZy4KKwogICAgIFN1YnNwYWNlKiBzdWJzcGFjZSA9IG1fZGlyZWN0b3J5LT5t
X3N1YnNwYWNlOwogICAgIGlmIChzdWJzcGFjZS0+aXNJc29TdWJzcGFjZSgpKSB7CiAgICAgICAg
IGlmICh2b2lkKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxJc29TdWJzcGFjZSo+KHN1YnNwYWNlKS0+
dHJ5QWxsb2NhdGVGcm9tTG93ZXJUaWVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Mb2NhbEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgY2xhc3MgTG9jYWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNSYXdTZQogICAgIAog
cHVibGljOgogICAgIExvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7Ci0gICAgfkxvY2Fs
QWxsb2NhdG9yKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkxvY2FsQWxsb2NhdG9yKCk7CiAg
ICAgCiAgICAgdm9pZCogYWxsb2NhdGUoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlKTsKICAgICAKQEAgLTU2LDcgKzU2LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVl
TGlzdGVkQ2VsbChjb25zdCB2b2lkKikgY29uc3Q7Ci0gICAgCisKKyAgICBCbG9ja0RpcmVjdG9y
eSYgZGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gKm1fZGlyZWN0b3J5OyB9CisKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0gY2xhc3MgTXV0YXRvclN0YXRl
IHsKK2VudW0gY2xhc3MgTXV0YXRvclN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gVGhlIG11dGF0
b3IgaXMgcnVubmluZyB3aGVuIGl0J3Mgbm90IGluc2lkZSBhIEhlYXAgc2xvdyBwYXRoLgogICAg
IFJ1bm5pbmcsCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uaW5qZWN0ZWRTY3JpcHRIb3N0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJh
bWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2
YVNjcmlwdENhbGxGcmFtZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmph
dmFTY3JpcHRDYWxsRnJhbWVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRD
YWxsRnJhbWVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWdncmVnYXRlRXJyb3JQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BZ2dyZWdhdGVFcnJvclBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BZ2dyZWdhdGVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gRXJyb3JQcm90b3R5cGVCYXNlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUl0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0ZXJhdG9y
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jRnJvbVN5bmNJdGVyYXRv
clByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5j
RnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0Z1bmN0aW9uUHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNH
ZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5
bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEFzeW5jR2VuZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3lu
Y0l0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXN5bmNJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5oCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05v
bkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEF0b21pY3NPYmpl
Y3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludE9iamVjdC5oCShyZXZpc2lv
biAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTV3JhcHBlck9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2bS5iaWdJbnRPYmplY3RTcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
aWdJbnRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShCaWdJbnRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTV3JhcHBlck9iamVjdDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5ib29s
ZWFuT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CcmFuZGVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnJhbmRlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyODY1NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CcmFuZGVkU3RydWN0dXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQnJhbmRlZFN0cnVjdHVyZSBmaW5hbCA6
IHB1YmxpYyBTdAogcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uYnJhbmRlZFN0cnVjdHVyZVNwYWNlKCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
IUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uLCAiIik7CiAgICAgICAgIHJldHVybiAmdm0uY2xv
bmVkQXJndW1lbnRzU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnNvbGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zb2xlT2JqZWN0LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQ29uc29sZU9iamVjdCwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI4NjU3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBDdXN0
b21TZXR0ZXIgPSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYzsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmN1c3RvbUdl
dHRlclNldHRlclNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9u
IDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RPTUF0dHJpYnV0ZUdl
dHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBCYXNlID0gQ3VzdG9tR2V0dGVyU2V0dGVyOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZG9tQXR0cmlidXRlR2V0
dGVyU2V0dGVyU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZGF0ZUluc3RhbmNlU3BhY2UoKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoRGF0ZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uZXJyb3JJbnN0YW5jZVNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
clByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEVycm9yUHJvdG90eXBlQmFzZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uZXZhbEV4ZWN1
dGFibGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuICZ2bS5leGNlcHRpb25TcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbmFsaXphdGlvblJlZ2lzdHJ5UHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVn
aXN0cnlQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxP
YmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoRmluYWxpemF0aW9uUmVnaXN0
cnlQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZtLmZ1
bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAmdm0uZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2UoKTsKICAgICB9CiAKICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRh
YmxlKiBjcmVhdGUoVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVu
bGlua2VkRXhlY3V0YWJsZSwgSW50cmluc2ljIGludHJpbnNpYywgYm9vbCBpc0luc2lkZU9yZGlu
YXJ5RnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2bS5mdW5jdGlvblJhcmVEYXRhU3BhY2U8bW9kZT4oKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JGdW5jdGlv
blByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEdlbmVyYXRv
ckZ1bmN0aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoR2VuZXJhdG9yUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg2NTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dCB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuICZ2bS5nZXR0ZXJTZXR0ZXJTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87IC8vIFRoaXMgaXMgbmV2ZXIgYWNjZXNzZWQgZGlyZWN0bHksIHNpbmNlIHRoYXQgd291bGQg
YnJlYWsgbGlua2FnZSBvbiBzb21lIGNvbXBpbGVycy4KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoVHlwZSA9PSBI
YXNoVGFibGVUeXBlOjpLZXkpCiAgICAgICAgICAgICByZXR1cm4gdm0uc2V0QnVja2V0U3BhY2U8
bW9kZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRl
cm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoSW50ZXJuYWxGdW5jdGlvbiksICJJbnRlcm5hbEZ1
bmN0aW9uIHN1YmNsYXNzZXMgdGhhdCBhZGQgZmllbGRzIG5lZWQgdG8gb3ZlcnJpZGUgc3Vic3Bh
Y2VGb3I8PigpIik7CiAgICAgICAgIHJldHVybiAmdm0uaW50ZXJuYWxGdW5jdGlvblNwYWNlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAko
cmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS5pbnRsQ29sbGF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShJbnRsQ29sbGF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyODY1
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmludGxEYXRlVGltZUZvcm1hdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxEYXRlVGltZUZvcm1hdFBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFt
ZXMuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uaW50bERpc3BsYXlOYW1lc1NwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc1By
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxEaXNwbGF5
TmFtZXNQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RG
b3JtYXQuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bExpc3RGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLmludGxMaXN0Rm9ybWF0U3BhY2U8bW9kZT4oKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
aXN0Rm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bExpc3RGb3JtYXRQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHJldmlzaW9u
IDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LmludGxMb2NhbGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGVQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShJbnRsTG9jYWxlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3
ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxOdW1iZXJGb3JtYXRTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjU3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bE9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bFBsdXJhbFJ1bGVz
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2
NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS5pbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50
bFJlbGF0aXZlVGltZUZvcm1hdFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bFNl
Z21lbnRJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3JQcm90
b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxTZWdtZW50SXRlcmF0b3JQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmgJKHJldmlz
aW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLmludGxTZWdtZW50ZXJTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyUHJvdG90eXBl
LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50ZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShJbnRsU2VnbWVudGVyUHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsU2VnbWVudHNT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50c1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50c1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHNQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRs
U2VnbWVudHNQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
JnZtLmFycmF5U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hcnJheUJ1ZmZlclNw
YWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXJyYXlJdGVyYXRvclNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXN5bmNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXN5bmNHZW5lcmF0b3JTcGFjZTxtb2Rl
PigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
aAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmJpZ0ludFNwYWNlKCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJl
dmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWNfYXNzZXJ0KFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0hhc0luc3RhbmNlLCAiIik7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uYm91bmRGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyODY1NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgfCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uY2FsbGVlU3BhY2Uo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdl
dHRlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uY3VzdG9tR2V0dGVyRnVuY3Rpb25TcGFjZTxtb2RlPigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVy
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0N1c3RvbVNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5jdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2
aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIFR5cGVkQXJyYXlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IFR5cGVkQXJyYXlD
b250ZW50VHlwZTo6Tm9uZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5kYXRhVmlld1NwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRGF0YVZpZXdQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJ
KHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLmZpbmFsaXphdGlvblJlZ2lzdHJ5U3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHJhcmVEYXRhVGFnID0gMHgxOwogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmZ1
bmN0aW9uU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5nZW5lcmF0b3JTcGFjZTxtb2RlPigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYwLDcgKzI2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzd2l0Y2ggKEFkYXB0b3I6OnR5
cGVWYWx1ZSkgewogICAgICAgICBjYXNlIFR5cGVJbnQ4OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5h
bE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmds
b2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MTYsNyArNjE2LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5nbG9iYWxPYmplY3RT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXAuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5tYXBTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJl
dmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBpbnRlcm5hbEZpZWxkKEZpZWxkIGZpZWxkKSB7IHJldHVybiBC
YXNlOjppbnRlcm5hbEZpZWxkKHN0YXRpY19jYXN0PHVpbnQzMl90PihmaWVsZCkpOyB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gdm0ubWFwSXRlcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkocmV2aXNpb24gMjg2NTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU01vZHVs
ZUxvYWRlciwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLm1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5o
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzTW9kdWxlUmVjb3Jk
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5uYXRp
dmVTdGRGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTT05PYmplY3QsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8Mj47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gJnZtLnByb21pc2VTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21p
c2VQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Byb21pc2VQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyODY1
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50OF90IGVudW1lcmF0aW9uTW9kZU1hc2sgPSAoR2VuZXJpY01vZGUg
PDwgMSkgLSAxOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuICZ2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3BhY2UoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lv
biAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBP
dmVycmlkZXNQdXQgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KENlbGxUeXBlKSA9PSBzaXplb2YoSlNQcm94eSkpOwogICAgICAgICByZXR1cm4gJnZtLmpzUHJv
eHlTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRG
ZXRjaFBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHZtLnNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRj
aGVyLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NyaXB0RmV0Y2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNjcmlwdEZldGNoZXJTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
aAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zZXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlz
aW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbnRlcm5hbEZpZWxkKEZpZWxkIGZpZWxkKSB7IHJldHVybiBCYXNl
OjppbnRlcm5hbEZpZWxkKHN0YXRpY19jYXN0PHVpbnQzMl90PihmaWVsZCkpOyB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0uc2V0SXRlcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU291cmNlQ29kZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS5zb3VyY2VDb2RlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgLy8gV2Ugc3BlY2lhbGl6ZSB0aGUgc3RyaW5nIHN1
YnNwYWNlIHRvIGdldCB0aGUgZmFzdGVzdCBwb3NzaWJsZSBzd2VlcC4gVGhpcyB3b3VsZG4ndCBi
ZQogICAgIC8vIG5lY2Vzc2FyeSBpZiBKU1N0cmluZyBkaWRuJ3QgaGF2ZSBhIGRlc3RydWN0b3Iu
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3Ry
aW5nU3BhY2UoKTsKICAgICB9CkBAIC0yNjgsNyArMjY4LDcgQEAgY2xhc3MgSlNSb3BlU3RyaW5n
IGZpbmFsIDogcHVibGljIEpTU3RyaQogICAgIGZyaWVuZCBjbGFzcyBKU1N0cmluZzsKIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5y
b3BlU3RyaW5nU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zdHJpbmdJdGVy
YXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oCShyZXZp
c2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udGVtcGxhdGVPYmplY3RE
ZXNjcmlwdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5oCShyZXZpc2lvbiAyODY1NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYWtP
YmplY3RSZWZTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTU2NvcGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
d2l0aFNjb3BlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KE1hcEl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKE1hcFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWF0aE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hdGhPYmplY3QuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBAIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShNYXRoT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4NjU3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ubW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBFcnJvclByb3RvdHlwZUJhc2U7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KE5hdGl2ZUVycm9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVF
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TmF0aXZlRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biAmdm0ubmF0aXZlRXhlY3V0YWJsZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHJldmlzaW9uIDI4NjU3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNXcmFwcGVy
T2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuICZ2bS5udW1iZXJPYmplY3RTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSXNJ
bW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoT2JqZWN0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsNyBAQCBib29s
IGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIFwKICAgICB2KEdDTG9nTGV2ZWws
IGxvZ0dDLCBHQ0xvZ2dpbmc6Ok5vbmUsIE5vcm1hbCwgImRlYnVnZ2luZyBvcHRpb24gdG8gbG9n
IEdDIGFjdGl2aXR5ICgwID0gTm9uZSwgMSA9IEJhc2ljLCAyID0gVmVyYm9zZSkiKSBcCiAgICAg
dihCb29sLCB1c2VHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VH
bG9iYWxHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZ2NBdEVuZCwg
ZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBqc2MgQ0xJIHdpbGwgZG8gYSBHQyBiZWZvcmUg
ZXhpdGluZyIpIFwKICAgICB2KEJvb2wsIGZvcmNlR0NTbG93UGF0aHMsIGZhbHNlLCBOb3JtYWws
ICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9ucyBkb3duIHRo
ZWlyIHNsb3cgcGF0aHMuIikgXAogICAgIHYoQm9vbCwgZm9yY2VEaWREZWZlckdDV29yaywgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIERlZmVyR0MgZGVzdHJ1Y3Rp
b25zIHRvIHBlcmZvcm0gYSBHQy4iKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDkgKzM5LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlz
SW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuICZ2bS5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCkuc3BhY2U7CisgICAgICAg
IHJldHVybiAmdm0ucHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRp
YyBQcm9ncmFtRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFs
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiAmdm0ucHJvcGVydHlUYWJsZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0
UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgUHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnByb3h5T2JqZWN0U3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9r
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5UmV2
b2tlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5UmV2b2tlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2bS5wcm94eVJldm9rZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuaAko
cmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVj
dE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKFJlZmxlY3RPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShy
ZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5yZWdFeHBT
cGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KCFDZWxsVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiwgIiIpOwogICAgICAgICByZXR1cm4gJnZt
LnJlZ0V4cE9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShSZWdFeHBQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwU3RyaW5n
SXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI4NjU3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2Vy
dCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5z
Y29wZWRBcmd1bWVudHNTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAyODY1NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc2NvcGVkQXJndW1l
bnRzVGFibGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6
Y2xlYXJDb2RlKElzb0NlbGwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgQVNTRVJUKCZW
TTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkgPT0gJmNsZWFyYWJsZUNvZGVTZXQp
OworICAgIEFTU0VSVCgmSGVhcDo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkgPT0g
JmNsZWFyYWJsZUNvZGVTZXQpOwogICAgIGNsZWFyYWJsZUNvZGVTZXQucmVtb3ZlKHRoaXMpOwog
fQogCkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29k
ZShWTSYgdgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdXRvJiBjbGVhcmFibGVDb2Rl
U2V0ID0gVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpOworICAgIGF1dG8mIGNs
ZWFyYWJsZUNvZGVTZXQgPSBIZWFwOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKTsK
ICAgICBpZiAoaGFzQ2xlYXJhYmxlQ29kZSh2bSkpCiAgICAgICAgIGNsZWFyYWJsZUNvZGVTZXQu
YWRkKHRoaXMpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NldEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2V0SXRlcmF0
b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoU2V0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dSZWFs
bU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1No
YWRvd1JlYWxtT2JqZWN0LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zaGFkb3dSZWFsbVNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hh
ZG93UmVhbG1Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaGFkb3dSZWFsbVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dSZWFsbVByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFNoYWRvd1JlYWxt
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsx
MDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZt
LnNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAkocmV2aXNp
b24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFj
dGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgQmFzZSA9IEpTU2NvcGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc3RyaWN0RXZhbEFjdGl2YXRpb25TcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShT
dHJpbmdJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3RyaW5nT2JqZWN0
U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6
CiAgICAgflN0cnVjdHVyZSgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnN0cnVjdHVyZVNwYWNlKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5o
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3RydWN0dXJlQ2hhaW5TcGFj
ZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
JnZtLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2wuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5zeW1ib2xTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVjdC5oCShyZXZpc2lvbiAyODY1
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
V3JhcHBlck9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5zeW1ib2xPYmplY3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShTeW1ib2xQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIFdURjo6SXRlcmF0b3JSYW5nZTx0eXBlbmFtZSBQcml2YXRlTmFt
ZUVudmlyb25tZW50OjppdGVyYXRvcj4gUHJpdmF0ZU5hbWVJdGVyYXRvclJhbmdlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0u
c3ltYm9sVGFibGVTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsQ2FsZW5kYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0udGVtcG9yYWxDYWxlbmRhclNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsQ2Fs
ZW5kYXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bER1cmF0aW9uLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
dGVtcG9yYWxEdXJhdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudC5oCShyZXZpc2lvbiAy
ODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udGVtcG9yYWxJbnN0YW50U3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bEluc3RhbnRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbEluc3RhbnRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50UHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVt
cG9yYWxJbnN0YW50UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bE5vdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBv
cmFsTm93LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsTm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxOb3csIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxPYmplY3QuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbE9iamVjdCwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxQbGFpblRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZS5oCShyZXZpc2lvbiAyODY1
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbFBsYWluVGltZVNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxQbGFpblRpbWVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZVByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFRlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbFRpbWVab25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsVGltZVpvbmVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmVQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bFRpbWVab25lUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbFRpbWVab25l
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwOSw2ICsyMDksNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUsCiAgICAgLCBtX3JhbmRvbShPcHRpb25zOjpzZWVkT2ZWTVJhbmRvbUZvckZ1enplcigpID8g
T3B0aW9uczo6c2VlZE9mVk1SYW5kb21Gb3JGdXp6ZXIoKSA6IGNyeXB0b2dyYXBoaWNhbGx5UmFu
ZG9tTnVtYmVyKCkpCiAgICAgLCBtX2ludGVncml0eVJhbmRvbSgqdGhpcykKICAgICAsIGhlYXAo
KnRoaXMsIGhlYXBUeXBlKQorICAgICwgY2xpZW50SGVhcChoZWFwKQogICAgICwgdm1UeXBlKHZt
VHlwZSkKICAgICAsIGNsaWVudERhdGEobnVsbHB0cikKICAgICAsIHRvcEVudHJ5RnJhbWUobnVs
bHB0cikKQEAgLTU1NSw3ICs1NTYsNyBAQCBWTSYgVk06OnNoYXJlZEluc3RhbmNlKCkKICAgICBH
bG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBWTSomIGluc3RhbmNlID0gc2hhcmVkSW5zdGFu
Y2VJbnRlcm5hbCgpOwogICAgIGlmICghaW5zdGFuY2UpCi0gICAgICAgIGluc3RhbmNlID0gYWRv
cHRSZWYobmV3IFZNKEFQSVNoYXJlZCwgU21hbGxIZWFwKSkubGVha1JlZigpOworICAgICAgICBp
bnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBWTShBUElTaGFyZWQsIEhlYXBUeXBlOjpTbWFsbCkpLmxl
YWtSZWYoKTsKICAgICByZXR1cm4gKmluc3RhbmNlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw5ICsyNTMsOSBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2hhcmVkSW5zdGFuY2VFeGlzdHMo
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgVk0mIHNoYXJlZEluc3RhbmNlKCk7CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFZNPiBjcmVhdGUoSGVhcFR5cGUgPSBT
bWFsbEhlYXAsIFdURjo6UnVuTG9vcCogPSBudWxscHRyKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUmVmUHRyPFZNPiB0cnlDcmVhdGUoSGVhcFR5cGUgPSBTbWFsbEhlYXAsIFdURjo6
UnVuTG9vcCogPSBudWxscHRyKTsKLSAgICBzdGF0aWMgUmVmPFZNPiBjcmVhdGVDb250ZXh0R3Jv
dXAoSGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBS
ZWY8Vk0+IGNyZWF0ZShIZWFwVHlwZSA9IEhlYXBUeXBlOjpTbWFsbCwgV1RGOjpSdW5Mb29wKiA9
IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8Vk0+IHRyeUNy
ZWF0ZShIZWFwVHlwZSA9IEhlYXBUeXBlOjpTbWFsbCwgV1RGOjpSdW5Mb29wKiA9IG51bGxwdHIp
OworICAgIHN0YXRpYyBSZWY8Vk0+IGNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlwZSA9IEhlYXBU
eXBlOjpTbWFsbCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICBXYXRjaGRv
ZyYgZW5zdXJlV2F0Y2hkb2coKTsKQEAgLTMyNiw2ICszMjYsNyBAQCBwcml2YXRlOgogCiBwdWJs
aWM6CiAgICAgSGVhcCBoZWFwOworICAgIEdDQ2xpZW50OjpIZWFwIGNsaWVudEhlYXA7CiAKICAg
ICBjb25zdCBIZWFwQ2VsbFR5cGUmIGNlbGxIZWFwQ2VsbFR5cGUoKSB7IHJldHVybiBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGU7IH0KICAgICBjb25zdCBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSYgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkgeyByZXR1cm4gaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7IH07CkBAIC0zNDIsNDIgKzM0Myw0MiBAQCBwdWJs
aWM6CiAgICAgQUxXQVlTX0lOTElORSBDb21wbGV0ZVN1YnNwYWNlJiB2YXJpYWJsZVNpemVkQ2Vs
bFNwYWNlKCkgeyByZXR1cm4gaGVhcC52YXJpYWJsZVNpemVkQ2VsbFNwYWNlOyB9CiAgICAgQUxX
QVlTX0lOTElORSBDb21wbGV0ZVN1YnNwYWNlJiBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgpIHsg
cmV0dXJuIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7IH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIGFycmF5U3BhY2UoKSB7IHJldHVybiBoZWFwLmFycmF5U3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBiaWdJbnRTcGFjZSgpIHsgcmV0dXJuIGhl
YXAuYmlnSW50U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBjYWxsZWVT
cGFjZSgpIHsgcmV0dXJuIGhlYXAuY2FsbGVlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElz
b1N1YnNwYWNlJiBjbG9uZWRBcmd1bWVudHNTcGFjZSgpIHsgcmV0dXJuIGhlYXAuY2xvbmVkQXJn
dW1lbnRzU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBjdXN0b21HZXR0
ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGhlYXAuY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBkYXRlSW5zdGFuY2VTcGFjZSgpIHsgcmV0
dXJuIGhlYXAuZGF0ZUluc3RhbmNlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNw
YWNlJiBkb21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGhlYXAuZG9tQXR0
cmlidXRlR2V0dGVyU2V0dGVyU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNl
JiBleGNlcHRpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuZXhjZXB0aW9uU3BhY2U7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2Uo
KSB7IHJldHVybiBoZWFwLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZTsgfQotICAgIEFM
V0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGZ1bmN0aW9uU3BhY2UoKSB7IHJldHVybiBoZWFwLmZ1
bmN0aW9uU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBnZXR0ZXJTZXR0
ZXJTcGFjZSgpIHsgcmV0dXJuIGhlYXAuZ2V0dGVyU2V0dGVyU3BhY2U7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIElzb1N1YnNwYWNlJiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZSgpIHsgcmV0
dXJuIGhlYXAuZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5M
SU5FIElzb1N1YnNwYWNlJiBpbnRlcm5hbEZ1bmN0aW9uU3BhY2UoKSB7IHJldHVybiBoZWFwLmlu
dGVybmFsRnVuY3Rpb25TcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGpz
UHJveHlTcGFjZSgpIHsgcmV0dXJuIGhlYXAuanNQcm94eVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lO
TElORSBJc29TdWJzcGFjZSYgbmF0aXZlRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5u
YXRpdmVFeGVjdXRhYmxlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBu
dW1iZXJPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAubnVtYmVyT2JqZWN0U3BhY2U7IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBwbGFpbk9iamVjdFNwYWNlKCkgeyByZXR1cm4g
aGVhcC5wbGFpbk9iamVjdFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYg
cHJvbWlzZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5wcm9taXNlU3BhY2U7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIElzb1N1YnNwYWNlJiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3BhY2UoKSB7IHJldHVy
biBoZWFwLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUg
SXNvU3Vic3BhY2UmIHByb3BlcnR5VGFibGVTcGFjZSgpIHsgcmV0dXJuIGhlYXAucHJvcGVydHlU
YWJsZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgcmVnRXhwU3BhY2Uo
KSB7IHJldHVybiBoZWFwLnJlZ0V4cFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJz
cGFjZSYgcmVnRXhwT2JqZWN0U3BhY2UoKSB7IHJldHVybiBoZWFwLnJlZ0V4cE9iamVjdFNwYWNl
OyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgcm9wZVN0cmluZ1NwYWNlKCkgeyBy
ZXR1cm4gaGVhcC5yb3BlU3RyaW5nU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNw
YWNlJiBzY29wZWRBcmd1bWVudHNTcGFjZSgpIHsgcmV0dXJuIGhlYXAuc2NvcGVkQXJndW1lbnRz
U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzcGFyc2VBcnJheVZhbHVl
TWFwU3BhY2UoKSB7IHJldHVybiBoZWFwLnNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN0cmluZ1NwYWNlKCkgeyByZXR1cm4gaGVhcC5z
dHJpbmdTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN0cmluZ09iamVj
dFNwYWNlKCkgeyByZXR1cm4gaGVhcC5zdHJpbmdPYmplY3RTcGFjZTsgfQotICAgIEFMV0FZU19J
TkxJTkUgSXNvU3Vic3BhY2UmIHN0cnVjdHVyZUNoYWluU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0
cnVjdHVyZUNoYWluU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzdHJ1
Y3R1cmVSYXJlRGF0YVNwYWNlKCkgeyByZXR1cm4gaGVhcC5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNl
OyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RydWN0dXJlU3BhY2UoKSB7IHJl
dHVybiBoZWFwLnN0cnVjdHVyZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFj
ZSYgYnJhbmRlZFN0cnVjdHVyZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5icmFuZGVkU3RydWN0dXJl
U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzeW1ib2xUYWJsZVNwYWNl
KCkgeyByZXR1cm4gaGVhcC5zeW1ib2xUYWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIGFycmF5U3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmFy
cmF5U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgYmln
SW50U3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmJpZ0ludFNwYWNlOyB9CisgICAgQUxXQVlT
X0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGNhbGxlZVNwYWNlKCkgeyByZXR1cm4gY2xp
ZW50SGVhcC5jYWxsZWVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlJiBjbG9uZWRBcmd1bWVudHNTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuY2xvbmVk
QXJndW1lbnRzU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSYgY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmN1c3RvbUdl
dHRlclNldHRlclNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGRhdGVJbnN0YW5jZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5kYXRlSW5zdGFuY2VT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBkb21BdHRy
aWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZG9tQXR0cmlidXRl
R2V0dGVyU2V0dGVyU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSYgZXhjZXB0aW9uU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmV4Y2VwdGlvblNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGZ1bmN0aW9uU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmZ1bmN0aW9uU3BhY2U7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZ2V0dGVyU2V0dGVyU3Bh
Y2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmdldHRlclNldHRlclNwYWNlOyB9CisgICAgQUxXQVlT
X0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGdsb2JhbExleGljYWxFbnZpcm9ubWVudFNw
YWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsg
fQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBpbnRlcm5hbEZ1bmN0
aW9uU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmludGVybmFsRnVuY3Rpb25TcGFjZTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBqc1Byb3h5U3BhY2UoKSB7
IHJldHVybiBjbGllbnRIZWFwLmpzUHJveHlTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlJiBuYXRpdmVFeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBjbGll
bnRIZWFwLm5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlJiBudW1iZXJPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAu
bnVtYmVyT2JqZWN0U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSYgcGxhaW5PYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucGxhaW5PYmplY3RT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBwcm9taXNl
U3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnByb21pc2VTcGFjZTsgfQorICAgIEFMV0FZU19J
TkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3BhY2Uo
KSB7IHJldHVybiBjbGllbnRIZWFwLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBwcm9wZXJ0eVRhYmxlU3BhY2Uo
KSB7IHJldHVybiBjbGllbnRIZWFwLnByb3BlcnR5VGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19J
TkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiByZWdFeHBTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAucmVnRXhwU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSYgcmVnRXhwT2JqZWN0U3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnJlZ0V4cE9iamVj
dFNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJvcGVT
dHJpbmdTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucm9wZVN0cmluZ1NwYWNlOyB9CisgICAg
QUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHNjb3BlZEFyZ3VtZW50c1NwYWNl
KCkgeyByZXR1cm4gY2xpZW50SGVhcC5zY29wZWRBcmd1bWVudHNTcGFjZTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzcGFyc2VBcnJheVZhbHVlTWFwU3BhY2Uo
KSB7IHJldHVybiBjbGllbnRIZWFwLnNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZTsgfQorICAgIEFM
V0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJpbmdTcGFjZSgpIHsgcmV0dXJu
IGNsaWVudEhlYXAuc3RyaW5nU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSYgc3RyaW5nT2JqZWN0U3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnN0cmlu
Z09iamVjdFNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2Um
IHN0cnVjdHVyZUNoYWluU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnN0cnVjdHVyZUNoYWlu
U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc3RydWN0
dXJlUmFyZURhdGFTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RydWN0dXJlUmFyZURhdGFT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJ1Y3R1
cmVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RydWN0dXJlU3BhY2U7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgYnJhbmRlZFN0cnVjdHVyZVNwYWNlKCkg
eyByZXR1cm4gY2xpZW50SGVhcC5icmFuZGVkU3RydWN0dXJlU3BhY2U7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc3ltYm9sVGFibGVTcGFjZSgpIHsgcmV0dXJu
IGNsaWVudEhlYXAuc3ltYm9sVGFibGVTcGFjZTsgfQogCiAjZGVmaW5lIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIobmFtZSkgXAogICAgIHRlbXBsYXRlPFN1YnNwYWNlQWNjZXNz
IG1vZGU+IFwKLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlKiBuYW1lKCkgeyByZXR1cm4g
aGVhcC5uYW1lPG1vZGU+KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogbmFtZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAubmFtZTxtb2RlPigpOyB9CiAKICNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRAogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoYXBpV3JhcHBlck9iamVjdFNwYWNlKQpAQCAtNDgyLDI0ICs0ODMsMTggQEAgcHVibGljOgog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TcGFjZSkKICNlbmRpZgogCi0jdW5kZWYgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUgotCiAgICAgQUxXQVlTX0lOTElORSBJc29DZWxsU2V0JiBleGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50cygpIHsgcmV0dXJuIGhlYXAuZXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHM7IH0KICAgICBBTFdBWVNfSU5MSU5FIElzb0Nl
bGxTZXQmIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMoKSB7IHJldHVy
biBoZWFwLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnM7IH0KIAotI2Rl
ZmluZSBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUihuYW1lKSBcCi0gICAgdGVt
cGxhdGU8U3Vic3BhY2VBY2Nlc3MgbW9kZT4gXAotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3Bh
Y2UqIG5hbWUoKSB7IHJldHVybiBoZWFwLm5hbWU8bW9kZT4oKTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBjb2RlQmxvY2tTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAuY29kZUJsb2NrU3BhY2U7IH0KIAotICAgIHVzaW5nIFNwYWNlQW5kU2V0ID0gSGVhcDo6
U3BhY2VBbmRTZXQ7Ci0gICAgQUxXQVlTX0lOTElORSBTcGFjZUFuZFNldCYgY29kZUJsb2NrU3Bh
Y2UoKSB7IHJldHVybiBoZWFwLmNvZGVCbG9ja1NwYWNlOyB9Ci0KLSAgICBEWU5BTUlDX1NQQUNF
X0FORF9TRVRfREVGSU5FX01FTUJFUihldmFsRXhlY3V0YWJsZVNwYWNlKQotICAgIERZTkFNSUNf
U1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihldmFsRXhlY3V0YWJsZVNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGVTcGFjZSkKKyN1bmRlZiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSCiAKLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiBmdW5jdGlvbkV4ZWN1dGFibGVT
cGFjZSgpIHsgcmV0dXJuIGhlYXAuZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIFNwYWNlQW5kU2V0JiBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4g
aGVhcC5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBTcGFjZUFu
ZFNldCYgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGhlYXAudW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlJiBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAuZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSYgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAucHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlJiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1
cm4gY2xpZW50SGVhcC51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOyB9CiAKICAgICBW
TVR5cGUgdm1UeXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHJldmlzaW9uIDI4NjU3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4Miw3ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChp
c1dlYWtNYXAoKSkKICAgICAgICAgICAgIHJldHVybiB2bS53ZWFrTWFwU3BhY2U8bW9kZT4oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90
eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtNYXBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoV2Vha01hcFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtPYmplY3RSZWZQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShX
ZWFrT2JqZWN0UmVmUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0
UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha1NldFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYWtTZXRQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI4NjU3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9
IEpTQ2FsbGVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLmpzVG9XYXNtSUNDYWxsZWVTcGFjZTxtb2RlPigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1dlYkFzc2VtYmx5LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53
ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24u
aAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFz
c2VtYmx5RXhjZXB0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5oCShyZXZpc2lv
biAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlHbG9iYWxT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyODY1NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseUluc3RhbmNlU3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlNZW1vcnlTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53
ZWJBc3NlbWJseU1vZHVsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHJldmlzaW9u
IDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5VGFibGVTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS53ZWJBc3NlbWJseVRhZ1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJl
dmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseUZ1
bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5R2xvYmFsUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlUHJv
dG90eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNz
ZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oCShyZXZpc2lv
biAyODY1NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJldmlz
aW9uIDI4NjU3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0ud2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjA2MSw2ICsyMDYxLDcgQEAg
c2V0KE1BS0VfTkFNRVNfREVQRU5ERU5DSUVTCiApCiBzZXQoU1VQUExFTUVOVEFMX0RFUEVOREVO
Q1lfRklMRSAke1dlYkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vc3VwcGxlbWVudGFsX2RlcGVu
ZGVuY3kudG1wKQogc2V0KElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUgJHtXZWJDb3JlX0RFUklW
RURfU09VUkNFU19ESVJ9L0RPTUlzb1N1YnNwYWNlcy5oKQorc2V0KENMSUVOVF9JU09fU1VCU1BB
Q0VTX0hFQURFUl9GSUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9ET01DbGllbnRJ
c29TdWJzcGFjZXMuaCkKIHNldChDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEUgJHtXZWJDb3JlX0RF
UklWRURfU09VUkNFU19ESVJ9L0RPTUNvbnN0cnVjdG9ycy5oKQogc2V0KFdJTkRPV19DT05TVFJV
Q1RPUlNfRklMRSAke1dlYkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vRE9NV2luZG93Q29uc3Ry
dWN0b3JzLmlkbCkKIHNldChXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSAke1dl
YkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aWRsKQpAQCAtMjI0OCw5ICsyMjQ5LDEwIEBAIEdFTkVSQVRFX0JJTkRJTkdTKFdlYkNvcmVCaW5k
aW5ncwogICAgIEdFTkVSQVRPUiBKUwogICAgIFNVUFBMRU1FTlRBTF9ERVBGSUxFICR7U1VQUExF
TUVOVEFMX0RFUEVOREVOQ1lfRklMRX0KICAgICBQUF9FWFRSQV9PVVRQVVQKLSAgICAgICAgJHtJ
U09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFfSAke0NPTlNUUlVDVE9SU19IRUFERVJfRklMRX0gJHtX
SU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEV9ICR7V09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JT
X0ZJTEV9ICR7REVESUNBVEVEV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEV9Cisg
ICAgICAgICR7SVNPX1NVQlNQQUNFU19IRUFERVJfRklMRX0gJHtDTElFTlRfSVNPX1NVQlNQQUNF
U19IRUFERVJfRklMRX0gJHtDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEV9ICR7V0lORE9XX0NPTlNU
UlVDVE9SU19GSUxFfSAke1dPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfSAke0RF
RElDQVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfQogICAgIFBQX0VYVFJB
X0FSR1MKICAgICAgICAgLS1pc29TdWJzcGFjZXNIZWFkZXJGaWxlICR7SVNPX1NVQlNQQUNFU19I
RUFERVJfRklMRX0KKyAgICAgICAgLS1jbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlICR7Q0xJ
RU5UX0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEV9CiAgICAgICAgIC0tY29uc3RydWN0b3JzSGVh
ZGVyRmlsZSAke0NPTlNUUlVDVE9SU19IRUFERVJfRklMRX0KICAgICAgICAgLS13aW5kb3dDb25z
dHJ1Y3RvcnNGaWxlICR7V0lORE9XX0NPTlNUUlVDVE9SU19GSUxFfQogICAgICAgICAtLXdvcmtl
ckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAke1dPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVD
VE9SU19GSUxFfQpJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksNyBA
QCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db2xvckRhdGEuY3BwCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db21tYW5kTGluZUFQSU1vZHVsZVNv
dXJjZS5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db3Vu
dFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0RPTUNsaWVudElzb1N1YnNwYWNlcy5oCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01Db25zdHJ1Y3RvcnMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NSXNvU3Vic3BhY2VzLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTUpJVEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZp
c2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDYyLDYgKzIwNjIsNyBAQCBKU19CSU5ESU5HU19TQ1JJUFRTID0gJChD
T01NT05fQklORElOR1NfCiBTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFID0gU3VwcGxlbWVu
dGFsRGVwZW5kZW5jaWVzLnR4dAogU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMgPSBTdXBwbGVt
ZW50YWxEZXBlbmRlbmNpZXMuZGVwCiBJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFID0gRE9NSXNv
U3Vic3BhY2VzLmgKK0NMSUVOVF9JU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFID0gRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgKIENPTlNUUlVDVE9SU19IRUFERVJfRklMRSA9IERPTUNvbnN0cnVjdG9y
cy5oCiBXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEUgPSBET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRs
CiBXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSA9IFdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3JzLmlkbApAQCAtMjA3Nyw2ICsyMDc4LDcgQEAgSURMX0lOVEVSTUVESUFURV9G
SUxFUyA9IFwKICAgICAkKFNVUFBMRU1FTlRBTF9NQUtFRklMRV9ERVBTKSBcCiAgICAgJChTVVBQ
TEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFKSBcCiAgICAgJChJU09fU1VCU1BBQ0VTX0hFQURFUl9G
SUxFKSBcCisgICAgJChDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSkgXAogICAgICQo
Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFKSBcCiAgICAgJChXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJ
TEUpIFwKICAgICAkKFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSBcCkBAIC0y
MDkwLDcgKzIwOTIsNyBAQCBJRExfSU5URVJNRURJQVRFX1BBVFRFUk5TID0gJChzdWJzdCAuLCUs
CiAKICQoSURMX0lOVEVSTUVESUFURV9QQVRURVJOUykgOiAkKFBSRVBST0NFU1NfSURMU19TQ1JJ
UFRTKSAkKElETF9BVFRSSUJVVEVTX0ZJTEUpICQoSlNfQklORElOR19JRExTKSAkKEZFQVRVUkVf
QU5EX1BMQVRGT1JNX0RFRklORV9ERVBFTkRFTkNJRVMpCiAJJChzaGVsbCBlY2hvICQoSlNfQklO
RElOR19JRExTKSB8IHRyICIgIiAiXG4iID4gSURMRmlsZU5hbWVzTGlzdC50eHQpCi0JJChQRVJM
KSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsIC0tZGVmaW5l
cyAiJChGRUFUVVJFX0FORF9QTEFURk9STV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAt
LWlkbEZpbGVOYW1lc0xpc3QgSURMRmlsZU5hbWVzTGlzdC50eHQgLS1pZGxBdHRyaWJ1dGVzRmls
ZSAkKElETF9BVFRSSUJVVEVTX0ZJTEUpIC0tc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUgJChT
VVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFKSAtLWlzb1N1YnNwYWNlc0hlYWRlckZpbGUgJChJ
U09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSAtLWNvbnN0cnVjdG9yc0hlYWRlckZpbGUgJChDT05T
VFJVQ1RPUlNfSEVBREVSX0ZJTEUpIC0td2luZG93Q29uc3RydWN0b3JzRmlsZSAkKFdJTkRPV19D
T05TVFJVQ1RPUlNfRklMRSkgLS13b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChX
T1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1kZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChERURJQ0FURURXT1JLRVJHTE9CQUxTQ09QRV9DT05T
VFJVQ1RPUlNfRklMRSkgLS1zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoU0VSVklDRVdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNoYXJlZFdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNIQVJFRFdPUktFUkdMT0JBTFNDT1BF
X0NPTlNUUlVDVE9SU19GSUxFKSAtLXdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUg
JChXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tcGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoUEFJTlRXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RS
VUNUT1JTX0ZJTEUpIC0tYXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQo
QVVESU9XT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc3VwcGxlbWVudGFs
TWFrZWZpbGVEZXBzICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpCisJJChQRVJMKSAkKFdl
YkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsIC0tZGVmaW5lcyAiJChG
RUFUVVJFX0FORF9QTEFURk9STV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWlkbEZp
bGVOYW1lc0xpc3QgSURMRmlsZU5hbWVzTGlzdC50eHQgLS1pZGxBdHRyaWJ1dGVzRmlsZSAkKElE
TF9BVFRSSUJVVEVTX0ZJTEUpIC0tc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUgJChTVVBQTEVN
RU5UQUxfREVQRU5ERU5DWV9GSUxFKSAtLWlzb1N1YnNwYWNlc0hlYWRlckZpbGUgJChJU09fU1VC
U1BBQ0VTX0hFQURFUl9GSUxFKSAtLWNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUgJChDTElF
TlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSkgLS1jb25zdHJ1Y3RvcnNIZWFkZXJGaWxlICQo
Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFKSAtLXdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgJChXSU5E
T1dfQ09OU1RSVUNUT1JTX0ZJTEUpIC0td29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tZGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoREVESUNBVEVEV09SS0VSR0xPQkFMU0NPUEVf
Q09OU1RSVUNUT1JTX0ZJTEUpIC0tc2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
RmlsZSAkKFNFUlZJQ0VXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zaGFy
ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChTSEFSRURXT1JLRVJHTE9CQUxT
Q09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS13b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNG
aWxlICQoV09SS0xFVEdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXBhaW50V29ya2xl
dEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFBBSU5UV09SS0xFVEdMT0JBTFNDT1BFX0NP
TlNUUlVDVE9SU19GSUxFKSAtLWF1ZGlvV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmls
ZSAkKEFVRElPV09SS0xFVEdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXN1cHBsZW1l
bnRhbE1ha2VmaWxlRGVwcyAkKFNVUFBMRU1FTlRBTF9NQUtFRklMRV9ERVBTKQogCiAjCiAjIEVt
aXQgdGhlIHJ1bGVzIHRvIGdlbmVyYXRlIGJpbmRpbmdzIGZyb20gSURMIGZpbGVzLiBOb3RlIHRo
YXQgdGhlcmUgYXJlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3Bw
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25W
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw3ICs2MSw3IEBAIEpTQzo6Vk0mIGNvbW1vblZN
U2xvdygpCiAgICAgUnVuTG9vcCogcnVuTG9vcCA9IG51bGxwdHI7CiAjZW5kaWYKIAotICAgIGF1
dG8mIHZtID0gSlNDOjpWTTo6Y3JlYXRlKEpTQzo6TGFyZ2VIZWFwLCBydW5Mb29wKS5sZWFrUmVm
KCk7CisgICAgYXV0byYgdm0gPSBKU0M6OlZNOjpjcmVhdGUoSlNDOjpIZWFwVHlwZTo6TGFyZ2Us
IHJ1bkxvb3ApLmxlYWtSZWYoKTsKIAogICAgIGdfY29tbW9uVk1Pck51bGwgPSAmdm07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3
LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotRE9N
R0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xp
ZW50RGF0YSYgY2xpZW50RGF0YSkKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9NR0NPdXRwdXRD
b25zdHJhaW50KFZNJiB2bSwgSlNIZWFwRGF0YSYgaGVhcERhdGEpCiAgICAgOiBNYXJraW5nQ29u
c3RyYWludCgiRG9tbyIsICJET00gT3V0cHV0IiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRv
bUdyZXllZCwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBDb25zdHJhaW50UGFy
YWxsZWxpc206OlBhcmFsbGVsKQogICAgICwgbV92bSh2bSkKLSAgICAsIG1fY2xpZW50RGF0YShj
bGllbnREYXRhKQorICAgICwgbV9oZWFwRGF0YShoZWFwRGF0YSkKICAgICAsIG1fbGFzdEV4ZWN1
dGlvblZlcnNpb24odm0uaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpKQogewogfQpAQCAt
NTksNyArNTksNyBAQCB2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJCiAg
ICAgCiAgICAgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZl
cnNpb24oKTsKICAgICAKLSAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRT
cGFjZSgKKyAgICBtX2hlYXBEYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAg
ICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7CiAgICAgICAgICAgICBhdXRvIGZ1bmMgPSBb
XSAoVmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkg
ewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0
b3IsIFJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjg2
NTczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMiBAQCBjbGFzcyBWTTsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU1ZNQ2xpZW50RGF0YTsKK2NsYXNzIEpTSGVhcERhdGE7
CiAKIGNsYXNzIERPTUdDT3V0cHV0Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25z
dHJhaW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBET01H
Q091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRhJik7CisgICAgRE9NR0NP
dXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBKU0hlYXBEYXRhJik7CiAgICAgfkRPTUdDT3V0cHV0
Q29uc3RyYWludCgpOwogICAgIAogcHJvdGVjdGVkOgpAQCAtNDksNyArNDksNyBAQCBwcml2YXRl
OgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgZXhlY3V0ZUltcGxJbXBsKFZp
c2l0b3ImKTsKIAogICAgIEpTQzo6Vk0mIG1fdm07Ci0gICAgSlNWTUNsaWVudERhdGEmIG1fY2xp
ZW50RGF0YTsKKyAgICBKU0hlYXBEYXRhJiBtX2hlYXBEYXRhOwogICAgIHVpbnQ2NF90IG1fbGFz
dEV4ZWN1dGlvblZlcnNpb247CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUFzeW5jSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUFzeW5jSXRlcmF0b3IuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Bc3luY0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIERPTVdyYXBwZWQgPSB0eXBlbmFt
ZSBKU1dyYXBwZXI6OkRPTVdyYXBwZWQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRE9NQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1
Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKIAog
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CiAKLUpT
Qzo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRp
bkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVp
bHRpbkNvbnN0cnVjdG9yU3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lv
biAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25z
dHJ1Y3RvckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IEpTRE9NQ29uc3RydWN0b3JCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yQmFzZSkpOwogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShDZWxsVHlwZSwgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0m
LCBKU0M6OkpTRnVuY3Rpb24mKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAKICAgICBKU0M6Oldy
aXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOwogfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9y
QmFzZS5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29uc3RydWN0b3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwg
V2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQ
cnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCkBAIC00Niw3ICs0Niw3IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihjYWxsVGhyb3dUeXBlRXIKICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjpl
bmNvZGUoSlNDOjpqc051bGwoKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQ29uc3Ry
dWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNET01Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSktPmRvbUNvbnN0cnVjdG9yU3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAkocmV2aXNpb24gMjg2
NTczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDE1LCAyMDE2IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihKU0RPTUNvbnN0cnVjdG9y
QmFzZSkpOwogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShDZWxs
VHlwZSwgSlNET01Db25zdHJ1Y3RvckJhc2UpOwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAog
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KEJhc2U6Omdsb2JhbE9iamVjdCgpKTsgfQogICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBnbG9iYWxPYmplY3QoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVj
dG9yTm90Q2FsbGFibGUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvck5vdENhbGxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
Rm9yU3RydWN0dXJlKEpTQzo6Vk0mLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpT
RE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZSkpOwogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShDZWxsVHlwZSwgSlNET01Db25zdHJ1Y3Rvck5vdENhbGxhYmxlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHJldmlz
aW9uIDI4NjU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRE9N
V3JhcHBlZCA9IHR5cGVuYW1lIEpTV3JhcHBlcjo6RE9NV3JhcHBlZDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNET01JdGVyYXRvclBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1By
b3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM4LDcg
KzEzOCw3IEBAIGJvb2wgSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpkZWZpbmVPd25Qcm8KICAgICBy
ZXR1cm4gdHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywg
IkRlZmluaW5nIGEgcHJvcGVydHkgb24gYSBXaW5kb3dQcm9wZXJ0aWVzIG9iamVjdCBpcyBub3Qg
YWxsb3dlZC4iX3MpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvd1Byb3BlcnRp
ZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSktPmRvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI4
NjU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KENlbGxUeXBlOjpkZXN0cm95ID09IEpTQzo6SlNDZWxsOjpkZXN0
cm95LCAiSlNET01XaW5kb3dQcm9wZXJ0aWVzIGlzIG5vdCBkZXN0cnVjdGlibGUgYWN0dWFsbHki
KTsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CkBAIC03Miw3ICs3Miw3IEBA
IHByaXZhdGU6CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFs
T2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjg2NTczKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywyNyArNDcsMzkgQEAgY29uc3QgSlNDOjpD
bGFzc0luZm8gSlNGaWxlU3lzdGVtRGlyZWN0bwogdGVtcGxhdGU8PgogY29uc3QgSlNDOjpDbGFz
c0luZm8gSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JQcm90b3R5cGU6OnNfaW5m
byA9IHsgIkRpcmVjdG9yeSBIYW5kbGUgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yUHJvdG90eXBlKSB9OwogCi1Jc29TdWJzcGFjZSogSlNGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3I6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFjZUZv
ckltcGwoVk0mIHZtKQogewotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGlmIChhdXRv
KiBzcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3Bh
Y2UoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5
SGFuZGxlSXRlcmF0b3I+IHx8ICFKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvcj4pCi0gICAgICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2UobWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yKSk7Ci0gICAgZWxzZQotICAgICAgICBjbGllbnREYXRhLnNl
dEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwg
SlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IpKTsKLSAgICBhdXRvKiBzcGFjZSA9
IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKTsKKyAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvclNwYWNlKCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IGhlYXBE
YXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7CisgICAgaWYgKCFz
cGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCisgICAgICAgICAgICBzcGFjZSAgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvcik7CisgICAgICAgIGhlYXBEYXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpKTsKKwog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0ZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
cjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBhdXRvKiBjbGllbnRTcGFjZSA9IG5ldyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UoKnNw
YWNlKTsKKyAgICBjbGllbnREYXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KGNsaWVudFNwYWNl
KSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlOwogfQogCiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcl9vblByb21pc2VTZXR0bGVk
Qm9keShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSosIEpTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKiBjYXN0ZWRUaGlzKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTMgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5G
TzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpT
dWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAK
ICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXph
dGlvbkdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2NTcz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIEpTSURCU2Vy
aWFsaXphdGlvbkdsb2JhbE9iamVjdDo6ZmluCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogfQogCi1Jc29TdWJzcGFjZSogSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpzdWJz
cGFjZUZvckltcGwoVk0mIHZtKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0lEQlNlcmlhbGl6
YXRpb25HbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCiB7CiAgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5pZGJTZXJpYWxp
emF0aW9uU3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
U2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAy
ODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25H
bG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDEzIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNDOjpW
TSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJik7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
aW5kb3dQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXaW5kb3dQcm94eS5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2luZG93UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3
LDcgQEAgV2luZG93UHJveHkqIEpTV2luZG93UHJveHk6OnRvV3JhcHBlZChWTQogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1dpbmRvd1Byb3h5OjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXaW5k
b3dQcm94eTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+d2luZG93UHJveHlTcGFj
ZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHku
aAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5k
b3dQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9CkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgSlNXaW5kb3dQcm94eShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUmLCBET01X
cmFwcGVyV29ybGQmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBBYnN0cmFj
dERPTVdpbmRvdyYpOwotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIFJlZjxET01XcmFwcGVyV29ybGQ+IG1fd29y
bGQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogCiAjaW5jbHVkZSAi
RE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNBdWRpb1dvcmts
ZXRHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNTIsMTUgKzUz
LDE0IEBACiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfbWV0
aG9kLmgiCiAjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKKyNpbmNsdWRlIDxtdXRleD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi1KU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQot
ICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQotICAgICwgbV9idWlsdGluTmFtZXModm0pCi0g
ICAgLCBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJn
czxSdW50aW1lQXJyYXk+KCkpCitKU0hlYXBEYXRhOjpKU0hlYXBEYXRhKEhlYXAmIGhlYXApCisg
ICAgOiBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJn
czxSdW50aW1lQXJyYXk+KCkpCiAgICAgLCBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGUoSlND
OjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdD4oKSkK
ICAgICAsIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFy
Z3M8SlNXaW5kb3dQcm94eT4oKSkKICAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3co
SlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNET01XaW5kb3c+KCkpCkBAIC03OSwxOSArNzks
NzQgQEAgSlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICAsIG1faGVh
cENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZShKU0M6Oklzb0hlYXBDZWxsVHlw
ZTo6QXJnczxKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlPigpKQogI2VuZGlmCiAgICAgLCBtX2hl
YXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdChKU0M6Oklzb0hlYXBD
ZWxsVHlwZTo6QXJnczxKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q+KCkpCi0gICAgLCBt
X2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZt
LmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKQotICAgICwg
bV9kb21Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNET01Db25zdHJ1Y3RvckJhc2UpCi0gICAgLCBtX2RvbU5hbWVzcGFj
ZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5
cGUoKSwgSlNET01PYmplY3QpCi0gICAgLCBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTRE9NV2luZG93
UHJvcGVydGllcykKLSAgICAsIG1fcnVudGltZUFycmF5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGUsIFJ1bnRpbWVBcnJheSkKLSAgICAs
IG1fcnVudGltZU1ldGhvZFNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgUnVudGltZU1ldGhvZCkgLy8gSGFzaDoweGY3MGM0YTg1Ci0gICAgLCBt
X3J1bnRpbWVPYmplY3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3J1bnRpbWVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3QpCi0gICAgLCBt
X3dpbmRvd1Byb3h5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgbV93aW5kb3dQcm94
eUhlYXBDZWxsVHlwZSwgSlNXaW5kb3dQcm94eSkKLSAgICAsIG1faWRiU2VyaWFsaXphdGlvblNw
YWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJp
YWxpemF0aW9uR2xvYmFsT2JqZWN0LCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QpCisg
ICAgLCBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKQorICAg
ICwgbV9kb21Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNET01Db25zdHJ1Y3RvckJhc2UpCisgICAgLCBtX2RvbU5hbWVzcGFj
ZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgSlNET01PYmplY3QpCisgICAgLCBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRE9NV2luZG93UHJvcGVy
dGllcykKKyAgICAsIG1fcnVudGltZUFycmF5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
bV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGUsIFJ1bnRpbWVBcnJheSkKKyAgICAsIG1fcnVudGlt
ZU1ldGhvZFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgUnVudGltZU1ldGhvZCkgLy8gSGFzaDoweGY3MGM0YTg1CisgICAgLCBtX3J1bnRpbWVPYmpl
Y3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3QpCisgICAgLCBtX3dpbmRvd1Byb3h5U3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZSwgSlNX
aW5kb3dQcm94eSkKKyAgICAsIG1faWRiU2VyaWFsaXphdGlvblNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0
LCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QpCiAgICAgLCBtX3N1YnNwYWNlcyhtYWtl
VW5pcXVlPERPTUlzb1N1YnNwYWNlcz4oKSkKIHsKIH0KIAorSlNIZWFwRGF0YSogSlNIZWFwRGF0
YTo6ZW5zdXJlSGVhcERhdGEoSGVhcCYgaGVhcCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUds
b2JhbEdDKCkpCisgICAgICAgIHJldHVybiBuZXcgSlNIZWFwRGF0YShoZWFwKTsKKworICAgIHN0
YXRpYyBKU0hlYXBEYXRhKiBzaW5nbGV0b24gPSBudWxscHRyOworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdIHsKKyAg
ICAgICAgc2luZ2xldG9uID0gbmV3IEpTSGVhcERhdGEoaGVhcCk7CisgICAgfSk7CisgICAgcmV0
dXJuIHNpbmdsZXRvbjsKK30KKworI2RlZmluZSBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3Vi
c3BhY2UpIHN1YnNwYWNlKG1faGVhcERhdGEtPnN1YnNwYWNlKQorCitKU1ZNQ2xpZW50RGF0YTo6
SlNWTUNsaWVudERhdGEoVk0mIHZtKQorICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQorICAg
ICwgbV9idWlsdGluTmFtZXModm0pCisvLyAgICAsIG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBl
KEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPFJ1bnRpbWVBcnJheT4oKSkKKy8vICAgICwgbV9y
dW50aW1lT2JqZWN0SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTQzo6
QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q+KCkpCisvLyAgICAsIG1fd2luZG93UHJveHlIZWFwQ2Vs
bFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNXaW5kb3dQcm94eT4oKSkKKy8vICAg
ICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdyhKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJn
czxKU0RPTVdpbmRvdz4oKSkKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGU+KCkpCisvLyAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNSZW1vdGVET01X
aW5kb3coSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNSZW1vdGVET01XaW5kb3c+KCkpCisv
LyAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNXb3JrZXJHbG9iYWxTY29wZShKU0M6Oklzb0hlYXBD
ZWxsVHlwZTo6QXJnczxKU1dvcmtlckdsb2JhbFNjb3BlPigpKQorLy8gICAgLCBtX2hlYXBDZWxs
VHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFy
Z3M8SlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZT4oKSkKKy8vI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4o
KSkKKy8vI2VuZGlmCisvLyAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2Nv
cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNXb3JrbGV0R2xvYmFsU2NvcGU+KCkpCisv
LyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JK
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGU+KCkpCisvLyNlbmRpZgorLy8jaWYgRU5BQkxFKFdFQl9BVURJ
TykKKy8vICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlKEpT
Qzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU+KCkpCisv
LyNlbmRpZgorLy8gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2Jh
bE9iamVjdChKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3Q+KCkpCisKKyAgICAsIG1faGVhcERhdGEoSlNIZWFwRGF0YTo6ZW5zdXJlSGVhcERh
dGEodm0uaGVhcCkpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9kb21CdWlsdGlu
Q29uc3RydWN0b3JTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbUNv
bnN0cnVjdG9yU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9kb21OYW1l
c3BhY2VPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbVdp
bmRvd1Byb3BlcnRpZXNTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3J1
bnRpbWVBcnJheVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGlt
ZU1ldGhvZFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGltZU9i
amVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fd2luZG93UHJveHlT
cGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2lkYlNlcmlhbGl6YXRpb25T
cGFjZSkKKworICAgICwgbV9jbGllbnRTdWJzcGFjZXMobWFrZVVuaXF1ZTxET01DbGllbnRJc29T
dWJzcGFjZXM+KCkpCit7Cit9CisKKyN1bmRlZiBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQKKwog
SlNWTUNsaWVudERhdGE6On5KU1ZNQ2xpZW50RGF0YSgpCiB7CiAgICAgQVNTRVJUKG1fd29ybGRT
ZXQuY29udGFpbnMobV9ub3JtYWxXb3JsZC5nZXQoKSkpOwpAQCAtMTQwLDcgKzE5NSw3IEBAIHZv
aWQgSlNWTUNsaWVudERhdGE6OmluaXROb3JtYWxXb3JsZChWTSoKICAgICBKU1ZNQ2xpZW50RGF0
YSogY2xpZW50RGF0YSA9IG5ldyBKU1ZNQ2xpZW50RGF0YSgqdm0pOwogICAgIHZtLT5jbGllbnRE
YXRhID0gY2xpZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogCi0gICAgdm0t
PmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQobWFrZVVuaXF1ZTxET01HQ091dHB1dENvbnN0cmFp
bnQ+KCp2bSwgKmNsaWVudERhdGEpKTsKKyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWlu
dChtYWtlVW5pcXVlPERPTUdDT3V0cHV0Q29uc3RyYWludD4oKnZtLCBjbGllbnREYXRhLT5oZWFw
RGF0YSgpKSk7CiAKICAgICBjbGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBlcldv
cmxkOjpjcmVhdGUoKnZtLCBET01XcmFwcGVyV29ybGQ6OlR5cGU6Ok5vcm1hbCk7CiAgICAgdm0t
Pm1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyKHR5cGUgPT0gV29ya2VyVGhyZWFkVHlwZTo6RGVkaWNhdGVkV29ya2VyIHx8IHR5
cGUgPT0gV29ya2VyVGhyZWFkVHlwZTo6V29ya2xldCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAkocmV2aXNpb24gMjg2NTcz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwyMyArMjUsOTIgQEAKICNpbmNsdWRlICJXZWJDb3JlQnVpbHRp
bk5hbWVzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbnMuaCIKICNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworY2xhc3MgRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
OwogY2xhc3MgRE9NSXNvU3Vic3BhY2VzOwogCi1jbGFzcyBKU1ZNQ2xpZW50RGF0YSA6IHB1Ymxp
YyBKU0M6OlZNOjpDbGllbnREYXRhIHsKK2NsYXNzIEpTSGVhcERhdGEgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEpTSGVhcERhdGEpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIGZyaWVuZCBjbGFzcyBKU1ZNQ2xpZW50RGF0YTsKK3B1YmxpYzoKKyAgICBKU0hlYXBEYXRh
KEhlYXAmKTsKKworICAgIHN0YXRpYyBKU0hlYXBEYXRhKiBlbnN1cmVIZWFwRGF0YShIZWFwJik7
CisKKyAgICBMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgRE9NSXNvU3Vic3Bh
Y2VzJiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9zdWJzcGFjZXMuZ2V0KCk7IH0KKworICAgIFZl
Y3RvcjxJc29TdWJzcGFjZSo+JiBvdXRwdXRDb25zdHJhaW50U3BhY2VzKCkgeyByZXR1cm4gbV9v
dXRwdXRDb25zdHJhaW50U3BhY2VzOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIHZvaWQgZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25zdCBGdW5jJiBmdW5jKQor
ICAgIHsKKyAgICAgICAgZm9yIChhdXRvKiBzcGFjZSA6IG1fb3V0cHV0Q29uc3RyYWludFNwYWNl
cykKKyAgICAgICAgICAgIGZ1bmMoKnNwYWNlKTsKKyAgICB9CisKKyAgICBJc29TdWJzcGFjZSog
ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9CisgICAgdm9pZCBzZXRG
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3Bh
Y2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQorCitwcml2YXRlOgorICAgIExv
Y2sgbV9sb2NrOworCisgICAgSXNvSGVhcENlbGxUeXBlIG1fcnVudGltZUFycmF5SGVhcENlbGxU
eXBlOworICAgIElzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGU7Cisg
ICAgSXNvSGVhcENlbGxUeXBlIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5cGU7CitwdWJsaWM6Cisg
ICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3c7CisgICAgSXNv
SGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZTsKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1JlbW90ZURPTVdpbmRv
dzsKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNj
b3BlOworICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGU7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIElzb0hlYXBDZWxs
VHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOworI2VuZGlm
CisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2Nv
cGU7CisjaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCisgICAgSXNvSGVhcENlbGxUeXBlIG1f
aGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTsKKyNlbmRpZgorI2lmIEVO
QUJMRShXRUJfQVVESU8pCisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNB
dWRpb1dvcmtsZXRHbG9iYWxTY29wZTsKKyNlbmRpZgorICAgIElzb0hlYXBDZWxsVHlwZSBtX2hl
YXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDsKKworcHJpdmF0ZToK
KyAgICBJc29TdWJzcGFjZSBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOworICAgIElzb1N1
YnNwYWNlIG1fZG9tQ29uc3RydWN0b3JTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtX2RvbU5hbWVz
cGFjZU9iamVjdFNwYWNlOworICAgIElzb1N1YnNwYWNlIG1fZG9tV2luZG93UHJvcGVydGllc1Nw
YWNlOworICAgIElzb1N1YnNwYWNlIG1fcnVudGltZUFycmF5U3BhY2U7CisgICAgSXNvU3Vic3Bh
Y2UgbV9ydW50aW1lTWV0aG9kU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0
U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOworICAgIElzb1N1YnNw
YWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxET01Jc29TdWJzcGFjZXM+IG1fc3Vic3BhY2VzOworICAgIFZlY3RvcjxJ
c29TdWJzcGFjZSo+IG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsKK307CisKKworY2xhc3MgSlNW
TUNsaWVudERhdGEgOiBwdWJsaWMgVk06OkNsaWVudERhdGEgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEpTVk1DbGllbnREYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgZnJp
ZW5kIGNsYXNzIFZNV29ybGRJdGVyYXRvcjsKIAogcHVibGljOgotICAgIGV4cGxpY2l0IEpTVk1D
bGllbnREYXRhKEpTQzo6Vk0mKTsKKyAgICBleHBsaWNpdCBKU1ZNQ2xpZW50RGF0YShWTSYpOwog
CiAgICAgdmlydHVhbCB+SlNWTUNsaWVudERhdGEoKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBpbml0Tm9ybWFsV29ybGQoSlNDOjpWTSosIFdvcmtlclRocmVhZFR5cGUp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGluaXROb3JtYWxXb3JsZChWTSosIFdv
cmtlclRocmVhZFR5cGUpOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiBub3JtYWxXb3JsZCgpIHsg
cmV0dXJuICptX25vcm1hbFdvcmxkOyB9CiAKQEAgLTU5LDMxICsxMjgsMzMgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmxkU2V0LnJlbW92ZSgmd29ybGQpOwogICAgIH0KIAorICAgIEpTSGVhcERh
dGEmIGhlYXBEYXRhKCkgeyByZXR1cm4gKm1faGVhcERhdGE7IH0KKwogICAgIFdlYkNvcmVCdWls
dGluTmFtZXMmIGJ1aWx0aW5OYW1lcygpIHsgcmV0dXJuIG1fYnVpbHRpbk5hbWVzOyB9CiAgICAg
SlNCdWlsdGluRnVuY3Rpb25zJiBidWlsdGluRnVuY3Rpb25zKCkgeyByZXR1cm4gbV9idWlsdGlu
RnVuY3Rpb25zOyB9CiAgICAgCi0gICAgSlNDOjpJc29TdWJzcGFjZSYgZG9tQnVpbHRpbkNvbnN0
cnVjdG9yU3BhY2UoKSB7IHJldHVybiBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOyB9Ci0g
ICAgSlNDOjpJc29TdWJzcGFjZSYgZG9tQ29uc3RydWN0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZG9t
Q29uc3RydWN0b3JTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIGRvbU5hbWVzcGFjZU9i
amVjdFNwYWNlKCkgeyByZXR1cm4gbV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZTsgfQotICAgIEpT
Qzo6SXNvU3Vic3BhY2UmIGRvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSgpIHsgcmV0dXJuIG1fZG9t
V2luZG93UHJvcGVydGllc1NwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgcnVudGltZUFy
cmF5U3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVBcnJheVNwYWNlOyB9Ci0gICAgSlNDOjpJc29T
dWJzcGFjZSYgcnVudGltZU1ldGhvZFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lTWV0aG9kU3Bh
Y2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBydW50aW1lT2JqZWN0U3BhY2UoKSB7IHJldHVy
biBtX3J1bnRpbWVPYmplY3RTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIHdpbmRvd1By
b3h5U3BhY2UoKSB7IHJldHVybiBtX3dpbmRvd1Byb3h5U3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1
YnNwYWNlJiBpZGJTZXJpYWxpemF0aW9uU3BhY2UoKSB7IHJldHVybiBtX2lkYlNlcmlhbGl6YXRp
b25TcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UqIGZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvclNwYWNlKCkgeyByZXR1cm4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7
IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdl
KHNwYWNlLCBudWxscHRyKTsgfQotCi0gICAgVmVjdG9yPEpTQzo6SXNvU3Vic3BhY2UqPiYgb3V0
cHV0Q29uc3RyYWludFNwYWNlcygpIHsgcmV0dXJuIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsg
fQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2Uo
KSB7IHJldHVybiBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOyB9CisgICAgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiBkb21Db25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21Db25zdHJ1
Y3RvclNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBkb21OYW1lc3BhY2VPYmpl
Y3RTcGFjZSgpIHsgcmV0dXJuIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2U7IH0KKyAgICBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UmIGRvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSgpIHsgcmV0dXJuIG1f
ZG9tV2luZG93UHJvcGVydGllc1NwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBy
dW50aW1lQXJyYXlTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZUFycmF5U3BhY2U7IH0KKyAgICBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVNZXRob2RTcGFjZSgpIHsgcmV0dXJuIG1fcnVu
dGltZU1ldGhvZFNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBydW50aW1lT2Jq
ZWN0U3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVPYmplY3RTcGFjZTsgfQorICAgIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSYgd2luZG93UHJveHlTcGFjZSgpIHsgcmV0dXJuIG1fd2luZG93UHJveHlT
cGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgaWRiU2VyaWFsaXphdGlvblNwYWNl
KCkgeyByZXR1cm4gbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIGZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkgeyByZXR1
cm4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZS5nZXQoKTsgfQorICAg
IHZvaWQgc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlx
dWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4gc3BhY2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhjaGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9
CisKKy8vICAgIFZlY3RvcjxJc29TdWJzcGFjZSo+JiBvdXRwdXRDb25zdHJhaW50U3BhY2VzKCkg
eyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOyB9CisvLworLy8gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKy8vICAgIHZvaWQgZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShj
b25zdCBGdW5jJiBmdW5jKQorLy8gICAgeworLy8gICAgICAgIGZvciAoYXV0byogc3BhY2UgOiBt
X291dHB1dENvbnN0cmFpbnRTcGFjZXMpCisvLyAgICAgICAgICAgIGZ1bmMoKnNwYWNlKTsKKy8v
ICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoT3V0
cHV0Q29uc3RyYWludFNwYWNlKGNvbnN0IEZ1bmMmIGZ1bmMpCi0gICAgewotICAgICAgICBmb3Ig
KGF1dG8qIHNwYWNlIDogbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzKQotICAgICAgICAgICAgZnVu
Yygqc3BhY2UpOwotICAgIH0KLQotICAgIERPTUlzb1N1YnNwYWNlcyYgc3Vic3BhY2VzKCkgeyBy
ZXR1cm4gKm1fc3Vic3BhY2VzLmdldCgpOyB9CisgICAgRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBj
bGllbnRTdWJzcGFjZXMoKSB7IHJldHVybiAqbV9jbGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KIAog
cHJpdmF0ZToKICAgICBIYXNoU2V0PERPTVdyYXBwZXJXb3JsZCo+IG1fd29ybGRTZXQ7CkBAIC05
Miw0MCArMTYzLDQzIEBAIHByaXZhdGU6CiAgICAgSlNCdWlsdGluRnVuY3Rpb25zIG1fYnVpbHRp
bkZ1bmN0aW9uczsKICAgICBXZWJDb3JlQnVpbHRpbk5hbWVzIG1fYnVpbHRpbk5hbWVzOwogCi0g
ICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGU7Ci0gICAg
SlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9ydW50aW1lT2JqZWN0SGVhcENlbGxUeXBlOwotICAgIEpT
Qzo6SXNvSGVhcENlbGxUeXBlIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5cGU7Ci1wdWJsaWM6Ci0g
ICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdzsKLSAg
ICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGU7Ci0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JK
U1JlbW90ZURPTVdpbmRvdzsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlw
ZUZvckpTV29ya2VyR2xvYmFsU2NvcGU7Ci0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFw
Q2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlOwotI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlOwotI2VuZGlmCi0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUg
bV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZTsKLSNpZiBFTkFCTEUoQ1NTX1BB
SU5USU5HX0FQSSkKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQot
ICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRH
bG9iYWxTY29wZTsKLSNlbmRpZgotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxU
eXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OwotCi1wcml2YXRlOgotICAgIEpT
Qzo6SXNvU3Vic3BhY2UgbV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZTsKLSAgICBKU0M6Oklz
b1N1YnNwYWNlIG1fZG9tQ29uc3RydWN0b3JTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1f
ZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX2RvbVdpbmRv
d1Byb3BlcnRpZXNTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZUFycmF5U3Bh
Y2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX3J1bnRpbWVNZXRob2RTcGFjZTsKLSAgICBKU0M6
Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2Ug
bV93aW5kb3dQcm94eVNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9pZGJTZXJpYWxpemF0
aW9uU3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IG1fZmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERP
TUlzb1N1YnNwYWNlcz4gbV9zdWJzcGFjZXM7Ci0gICAgVmVjdG9yPEpTQzo6SXNvU3Vic3BhY2Uq
PiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXM7CisgICAgSlNIZWFwRGF0YSogbV9oZWFwRGF0YTsK
Ky8vICAgIElzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZTsKKy8vICAg
IElzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGU7CisvLyAgICBJc29I
ZWFwQ2VsbFR5cGUgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZTsKKy8vcHVibGljOgorLy8gICAg
SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3c7CisvLyAgICBJc29I
ZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
OworLy8gICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNSZW1vdGVET01XaW5k
b3c7CisvLyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2Jh
bFNjb3BlOworLy8gICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZTsKKy8vI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKy8vICAgIElz
b0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
OworLy8jZW5kaWYKKy8vICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29y
a2xldEdsb2JhbFNjb3BlOworLy8jaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCisvLyAgICBJ
c29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
OworLy8jZW5kaWYKKy8vI2lmIEVOQUJMRShXRUJfQVVESU8pCisvLyAgICBJc29IZWFwQ2VsbFR5
cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlOworLy8jZW5kaWYK
Ky8vICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlv
bkdsb2JhbE9iamVjdDsKKy8vCisvL3ByaXZhdGU6CisKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UgbV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UgbV9kb21Db25zdHJ1Y3RvclNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2Rv
bU5hbWVzcGFjZU9iamVjdFNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2RvbVdp
bmRvd1Byb3BlcnRpZXNTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1l
QXJyYXlTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lTWV0aG9kU3Bh
Y2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNwYWNlOworICAg
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CisgICAgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBt
X2NsaWVudFN1YnNwYWNlczsKKy8vICAgIFZlY3RvcjxJc29TdWJzcGFjZSo+IG1fb3V0cHV0Q29u
c3RyYWludFNwYWNlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzA1NSwxMyArMzA1NSwxMyBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKVxuIik7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4i
KTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUg
PT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KVxuIik7CiAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBudWxscHRyO1xuIik7CiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7XG4iKTsK
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cbiIpOwotICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTtcbiIp
OwogCiAgICAgIyB2aXNpdCBmdW5jdGlvbgogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7
CkBAIC00ODQwLDM3ICs0ODQwLDUwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
CiAgICAgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24oJGludGVyZmFjZSkgaWYgJGludGVyZmFj
ZS0+aXRlcmFibGU7CiAKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZp
c2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpJc29T
dWJzcGFjZSogJHtjbGFzc05hbWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkdDQ2xpZW50OjpJc29TdWJzcGFjZSogJHtjbGFzc05h
bWV9OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7XG4iKTsKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNl
cygpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpKVxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBzcGFjZTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFt
ZX0uZ2V0KCkpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCFzcGFjZSkge1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwO1xuIik7CisKICAgICBpZiAoSXNET01HbG9i
YWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlw
ZUZvciR7Y2xhc3NOYW1lfSwgJHtjbGFzc05hbWV9KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX0sICR7Y2xhc3NO
YW1lfSk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4i
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+KVxuIik7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
ciR7aW50ZXJmYWNlTmFtZX0gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0Vf
SU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgJHtjbGFz
c05hbWV9KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBlbHNlXG4iKTsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
JHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgJHtjbGFzc05hbWV9KTtcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+IHx8ICEk
e2NsYXNzTmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4pXG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgJHtjbGFz
c05hbWV9KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgZWxzZVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCAke2NsYXNzTmFtZX0pO1xuIik7CiAgICAgfQotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpbnRlcmZhY2VOYW1lfSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
O1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1
bnJlYWNoYWJsZS1jb2RlXCIpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9X
QVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0
cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOwotICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpXG4iKTsKLSMgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCYk
e2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7XG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpXG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FS
TklOR1NfRU5EXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19F
TkRcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzcGFjZTtcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4iKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQo
KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVl
ZHNWaXNpdENoaWxkcmVuKSB7CkBAIC02NzIxLDI5ICs2NzM0LDQwIEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gJHtpdGVyYXRvck5hbWV9QmFzZTsKICAgICBERUNMQVJFX0lORk87CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9
PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnRE
YXRhLnN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+IHx8ICEke2l0ZXJhdG9yTmFtZX06Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4pCi0gICAgICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSgpLCAke2l0ZXJhdG9yTmFtZX0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgJHtpdGVy
YXRvck5hbWV9KTsKLSAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7
aXRlcmF0b3JOYW1lfS5nZXQoKTsKKyAgICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCkpCisg
ICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICAgICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKKworICAgICAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKKyAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0
ZXJhdG9yTmFtZX0uZ2V0KCk7CisgICAgICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+IHx8ICEk
e2l0ZXJhdG9yTmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJh
dG9yTmFtZX0+KQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAk
e2l0ZXJhdG9yTmFtZX0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgJHtpdGVyYXRvck5hbWV9KTsKKyAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpdGVyYXRvck5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpCiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwiKQotICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
JHtpdGVyYXRvck5hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKKyAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgcmV0dXJuIHNwYWNlOworICAg
ICAgICB9CisKKyAgICAgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJh
dG9yTmFtZX0gPSBtYWtlVW5pcXVlPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5h
bWV9LmdldCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03NTI2LDcgKzc1NTAsNyBAQCBzdWIgR2VuZXJhdGVQ
cm90b3R5cGVEZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBERUNMQVJF
X0lORk87XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz5cbiIpOwotICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICB7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKCR7cHJvdG90eXBlQ2xh
c3NOYW1lfSwgQmFzZSk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpO1xuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAkocmV2aXNpb24gMjg2
NTczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMu
cGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgbXkgJGlkbEZpbGVOYW1lc0xpc3Q7
CiBteSAkdGVzdEdsb2JhbENvbnRleHROYW1lOwogbXkgJHN1cHBsZW1lbnRhbERlcGVuZGVuY3lG
aWxlOwogbXkgJGlzb1N1YnNwYWNlc0hlYWRlckZpbGU7CitteSAkY2xpZW50SVNPU3Vic3BhY2Vz
SGVhZGVyRmlsZTsKIG15ICRjb25zdHJ1Y3RvcnNIZWFkZXJGaWxlOwogbXkgJHdpbmRvd0NvbnN0
cnVjdG9yc0ZpbGU7CiBteSAkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlOwpAQCAt
NzksNiArODAsNyBAQCBHZXRPcHRpb25zKCdkZWZpbmVzPXMnID0+IFwkZGVmaW5lcywKICAgICAg
ICAgICAgJ3Rlc3RHbG9iYWxDb250ZXh0TmFtZT1zJyA9PiBcJHRlc3RHbG9iYWxDb250ZXh0TmFt
ZSwKICAgICAgICAgICAgJ3N1cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlPXMnID0+IFwkc3VwcGxl
bWVudGFsRGVwZW5kZW5jeUZpbGUsCiAgICAgICAgICAgICdpc29TdWJzcGFjZXNIZWFkZXJGaWxl
PXMnID0+IFwkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSwKKyAgICAgICAgICAgJ2NsaWVudElTT1N1
YnNwYWNlc0hlYWRlckZpbGU9cycgPT4gXCRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlLAog
ICAgICAgICAgICAnY29uc3RydWN0b3JzSGVhZGVyRmlsZT1zJyA9PiBcJGNvbnN0cnVjdG9yc0hl
YWRlckZpbGUsCiAgICAgICAgICAgICd3aW5kb3dDb25zdHJ1Y3RvcnNGaWxlPXMnID0+IFwkd2lu
ZG93Q29uc3RydWN0b3JzRmlsZSwKICAgICAgICAgICAgJ3dvcmtlckdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3JzRmlsZT1zJyA9PiBcJHdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSwKQEAg
LTExMCw2ICsxMTIsNyBAQCBkaWUoJ011c3Qgc3BlY2lmeSBJREwgYXR0cmlidXRlcyBmaWxlIHVz
CiAKICRzdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkc3Vw
cGxlbWVudGFsRGVwZW5kZW5jeUZpbGUpOwogJGlzb1N1YnNwYWNlc0hlYWRlckZpbGUgPSBDeWd3
aW5QYXRoSWZOZWVkZWQoJGlzb1N1YnNwYWNlc0hlYWRlckZpbGUpOworJGNsaWVudElTT1N1YnNw
YWNlc0hlYWRlckZpbGUgPSBDeWd3aW5QYXRoSWZOZWVkZWQoJGNsaWVudElTT1N1YnNwYWNlc0hl
YWRlckZpbGUpOwogJGNvbnN0cnVjdG9yc0hlYWRlckZpbGUgPSBDeWd3aW5QYXRoSWZOZWVkZWQo
JGNvbnN0cnVjdG9yc0hlYWRlckZpbGUpOwogJHdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgPSBDeWd3
aW5QYXRoSWZOZWVkZWQoJHdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUpOwogJHdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkd29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnNGaWxlKTsKQEAgLTE2OSw2ICsxNzIsNyBAQCBteSAkaXNvU3Vic3BhY2Vz
SGVhZGVyQ29kZSA9IDw8RU5EOwogI3ByYWdtYSBvbmNlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIGNsYXNzIERPTUlzb1N1YnNwYWNlcyB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRE9NSXNvU3Vic3BhY2VzKTsKQEAgLTE3Nyw2ICsxODEsMjIgQEAg
cHVibGljOgogICAgIERPTUlzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKIEVORAogCitteSAkY2xp
ZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSA9IDw8RU5EOworI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNwcmFnbWEgb25jZQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCitjbGFzcyBET01DbGll
bnRJc29TdWJzcGFjZXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERPTUNsaWVudElzb1N1
YnNwYWNlcyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzKTsKK3B1YmxpYzoKKyAgICBET01DbGllbnRJc29TdWJzcGFjZXMoKSA9IGRlZmF1bHQ7CitF
TkQKKwogbXkgQGNvbnN0cnVjdG9ycyA9ICgpOwogbXkgJGNvbnN0cnVjdG9yc0hlYWRlckNvZGUg
PSA8PEVORDsKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtMjQyLDkgKzI2MiwxMSBA
QCBmb3JlYWNoIG15ICRpZGxGaWxlTmFtZSAoc29ydCBrZXlzICVpZGxGCiAKICAgICBteSAkaXND
YWxsYmFja0ludGVyZmFjZSA9IGlzQ2FsbGJhY2tJbnRlcmZhY2VGcm9tSURMKCRpZGxGaWxlKTsK
ICAgICBpZiAoISRpc0NhbGxiYWNrSW50ZXJmYWNlKSB7Ci0gICAgICAgICRpc29TdWJzcGFjZXNI
ZWFkZXJDb2RlIC49ICIgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IG1fc3Vi
c3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9O1xuIjsKKyAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRl
ckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+IG1fc3Vic3BhY2VGb3Ik
e2ludGVyZmFjZU5hbWV9O1xuIjsKKyAgICAgICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNv
ZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2NsaWVu
dFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfTtcbiI7CiAgICAgICAgIGlmIChjb250YWluc0l0
ZXJhYmxlSW50ZXJmYWNlRnJvbUlETCgkaWRsRmlsZSkpIHsKLSAgICAgICAgICAgICRpc29TdWJz
cGFjZXNIZWFkZXJDb2RlIC49ICIgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+
IG1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9SXRlcmF0b3I7XG4iOworICAgICAgICAgICAg
JGlzb1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+IG1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9SXRlcmF0b3I7XG4iOworICAgICAgICAg
ICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1l
fUl0ZXJhdG9yO1xuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE3LDYgKzMzOSwxMiBAQCBp
ZiAoJGlzb1N1YnNwYWNlc0hlYWRlckZpbGUpIHsKICAgICBXcml0ZUZpbGVJZkNoYW5nZWQoJGlz
b1N1YnNwYWNlc0hlYWRlckZpbGUsICRpc29TdWJzcGFjZXNIZWFkZXJDb2RlKTsKIH0KIAoraWYg
KCRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlKSB7CisgICAgJGNsaWVudElTT1N1YnNwYWNl
c0hlYWRlckNvZGUgLj0gIn07XG4iOworICAgICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJDb2Rl
IC49ICJ9IC8vIG5hbWVzcGFjZSBXZWJDb3JlXG4iOworICAgIFdyaXRlRmlsZUlmQ2hhbmdlZCgk
Y2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSwgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNv
ZGUpOworfQorCiBpZiAoJGNvbnN0cnVjdG9yc0hlYWRlckZpbGUpIHsKICAgICBteSAkY29uc3Ry
dWN0b3JzTGVuZ3RoID0gQGNvbnN0cnVjdG9yczsKICAgICAkY29uc3RydWN0b3JzSGVhZGVyQ29k
ZSAuPSAifTtcbiI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3Bw
CShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFJ1bnRpbWVBcnJh
eTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU0M6Oklz
b1N1YnNwYWNlKiBSdW50aW1lQXJyYXk6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBSdW50aW1lQXJyYXk6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSktPnJ1bnRpbWVBcnJheVNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAg
ICAgfQpAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgIFJ1bnRpbWVBcnJheShWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBCaW5kaW5nczo6QXJyYXkq
KTsKIAotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mKTsKIAogICAgIEJpbmRpbmdzQXJyYXkqIG1fYXJyYXk7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCShyZXZpc2lvbiAyODY1NzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgUnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlT
bG90KEoKICAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUlzb1N1YnNwYWNlKiBS
dW50aW1lTWV0aG9kOjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKQorR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBSdW50aW1lTWV0aG9kOjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKQogewogICAgIHJldHVy
biAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+cnVudGltZU1l
dGhvZFNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRo
b2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2Qu
aAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoUnVudGlt
ZU1ldGhvZCksICJSdW50aW1lTWV0aG9kIHN1YmNsYXNzZXMgdGhhdCBhZGQgZmllbGRzIG5lZWQg
dG8gb3ZlcnJpZGUgc3Vic3BhY2VGb3I8PigpIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2Vs
bFR5cGU6OmRlc3Ryb3kgPT0gSlNDOjpKU0NlbGw6OmRlc3Ryb3kpOwpAQCAtNzQsNyArNzQsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CiAKICAg
ICBCaW5kaW5nczo6TWV0aG9kKiBtX21ldGhvZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw3ICsz
MTMsNyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVjdEludmFsaWRBY2NlCiAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVHJ5aW5nIHRvIGFjY2VzcyBvYmplY3Qg
ZnJvbSBkZXN0cm95ZWQgcGx1Zy1pbi4iKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIFJ1bnRp
bWVPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBSdW50aW1lT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
LT5ydW50aW1lT2JqZWN0U3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5oCShyZXZpc2lvbiAyODY1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoUnVudGltZU9i
amVjdCksICJSdW50aW1lT2JqZWN0IHN1YmNsYXNzZXMgdGhhdCBhZGQgZmllbGRzIG5lZWQgdG8g
b3ZlcnJpZGUgc3Vic3BhY2VGb3I8PigpIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2VsbFR5
cGU6OmRlc3Ryb3kgPT0gUnVudGltZU9iamVjdDo6ZGVzdHJveSk7CkBAIC04Niw3ICs4Niw3IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKIAogICAgIFJlZlB0
cjxJbnN0YW5jZT4gbV9pbnN0YW5jZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CiAgICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9CkBAIC0x
MzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdG9Cb29sZWFuKEpTR2xvYmFsT2Jq
ZWN0KikgY29uc3Q7IC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBpcyBicm9rZW4gYmVjYXVzZSBu
b25lIG9mIHRoZSBzdXBlcmNsYXNzZXMgYXJlIG1hcmtlZCB2aXJ0dWFsLiBXZSBuZWVkIHRvIHNv
bHZlIHRoaXMgaW4gdGhlIGxvbmdlciB0ZXJtLgogCi0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoVk0mKTsKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoVk0mKTsKIAogICAgIFJlZlB0cjxPYmpjSW5zdGFuY2U+IF9pbnN0YW5j
ZTsKICAgICBTdHJpbmcgbV9pdGVtOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfcnVudGltZS5tbQkocmV2aXNpb24gMjg2NTczKQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsMTMgKzMzMiwx
MyBAQCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6dG9Cb29sZWFuKEpTCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBP
YmpjRmFsbGJhY2tPYmplY3RJbXA6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNDOjpJc29TdWJzcGFjZVBlclZNPiBwZXJWTShbXSAo
SlNDOjpWTSYgdm0pIHsKLSAgICAgICAgcmV0dXJuIElTT19TVUJTUEFDRV9QQVJBTUVURVJTKHZt
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBPYmpjRmFsbGJhY2tPYmplY3RJbXAp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6Oklzb1N1YnNwYWNlUGVyVk0+IHBlclZN
KFtdIChKU0M6OkhlYXAmIGhlYXApIHsKKyAgICAgICAgcmV0dXJuIElTT19TVUJTUEFDRV9QQVJB
TUVURVJTKGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBPYmpjRmFsbGJhY2tP
YmplY3RJbXApOwogICAgIH0pOwotICAgIHJldHVybiAmcGVyVk0uZ2V0KCkuZm9yVk0odm0pOwor
ICAgIHJldHVybiAmcGVyVk0uZ2V0KCkuY2xpZW50SXNvU3Vic3BhY2Vmb3JWTSh2bSk7CiB9CiAK
LX0KLX0KK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvRGlzYWxsb3dWTUVudHJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRD
b3JlL0Rpc2FsbG93Vk1FbnRyeS5jcHAJKHJldmlzaW9uIDI4NjU3MykKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvRGlzYWxsb3dWTUVudHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogdXNpbmcg
SlNDOjpEaXNhbGxvd1ZNRW50cnk7CiB1c2luZyBKU0M6OkpTTG9ja0hvbGRlcjsKLXVzaW5nIEpT
Qzo6TGFyZ2VIZWFwOwordXNpbmcgSlNDOjpIZWFwVHlwZTsKIHVzaW5nIEpTQzo6Vk07CiAKIHN0
YXRpYyB2b2lkIGVudGVyU2NvcGUoVk0mIHZtLCB1bnNpZ25lZCBlbnRyeUNvdW50LCB1bnNpZ25l
ZCByZW1haW5pbmdFbnRyaWVzKQpAQCAtNTEsNyArNTEsNyBAQCBURVNUKEphdmFTY3JpcHRDb3Jl
X0Rpc2FsbG93Vk1FbnRyeSwgTmVzCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwog
ICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0gICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhl
YXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSku
bGVha1JlZigpOwogICAgIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAg
ICAgIEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZNRW50cnlDb3VudCwgMHUpOwpAQCAtNjUsNyArNjUs
NyBAQCBURVNUKEphdmFTY3JpcHRDb3JlX0Rpc2FsbG93Vk1FbnRyeSwgQ29wCiAgICAgV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0gICAgVk0m
IHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6
Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSkubGVha1JlZigpOwogICAgIHsKICAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZNRW50cnlD
b3VudCwgMHUpOwpAQCAtODksNyArODksNyBAQCBURVNUKEphdmFTY3JpcHRDb3JlX0Rpc2FsbG93
Vk1FbnRyeSwgQ29wCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6
aW5pdGlhbGl6ZSgpOwogCi0gICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtS
ZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSkubGVha1JlZigp
OwogICAgIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIEVYUEVD
VF9FUSh2bS5kaXNhbGxvd1ZNRW50cnlDb3VudCwgMHUpOwpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvUHJvcGVydHlTbG90LmNw
cAkocmV2aXNpb24gMjg2NTczKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2Ny
aXB0Q29yZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogdXNpbmcgSlNDOjpKU0xvY2tIb2xkZXI7Ci11c2lu
ZyBKU0M6OkxhcmdlSGVhcDsKK3VzaW5nIEpTQzo6SGVhcFR5cGU7CiB1c2luZyBKU0M6OlByb3Bl
cnR5U2xvdDsKIHVzaW5nIEpTQzo6Vk07CiB1c2luZyBKU0M6OmpzVW5kZWZpbmVkOwpAQCAtNDIs
NyArNDIsNyBAQCBURVNUKEphdmFTY3JpcHRDb3JlX1Byb3BlcnR5U2xvdCwgRGlzYWxsCiAgICAg
V1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0g
ICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0g
PSBWTTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSkubGVha1JlZigpOwogICAgIHsKICAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZN
RW50cnlDb3VudCwgMHUpOwpAQCAtNzgsNyArNzgsNyBAQCBURVNUKEphdmFTY3JpcHRDb3JlX1By
b3BlcnR5U2xvdCwgVk1JbnF1CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAg
IEpTQzo6aW5pdGlhbGl6ZSgpOwogCi0gICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXAp
LmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6Y3JlYXRlKEhlYXBUeXBlOjpMYXJnZSkubGVh
a1JlZigpOwogICAgIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAg
IEVYUEVDVF9FUSh2bS5kaXNhbGxvd1ZNRW50cnlDb3VudCwgMHUpOwpAQCAtMTAyLDcgKzEwMiw3
IEBAIFRFU1QoSmF2YVNjcmlwdENvcmVfUHJvcGVydHlTbG90LCBDb3B5QXMKICAgICBXVEY6Omlu
aXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplKCk7CiAKLSAgICBWTSYg
dm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpj
cmVhdGUoSGVhcFR5cGU6OkxhcmdlKS5sZWFrUmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgRVhQRUNUX0VRKHZtLmRpc2FsbG93Vk1FbnRyeUNv
dW50LCAwdSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452120</attachid>
            <date>2022-02-15 18:01:02 -0800</date>
            <delta_ts>2022-02-17 18:07:06 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-233878b.patch</filename>
            <type>text/plain</type>
            <size>299538</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9i
YWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmFwaUdsb2JhbE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRh
bDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiB2bS5hcGlWYWx1ZVdyYXBwZXJTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBl
ck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEpTQVBJ
V3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbkltCiBERUZJTkVfVklTSVRfQ0hJTERSRU5fV0lU
SF9NT0RJRklFUihKU19FWFBPUlRfUFJJVkFURSwgSlNBUElXcmFwcGVyT2JqZWN0KTsKIAogdGVt
cGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVj
dD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vi
c3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKICAgICBzd2l0Y2gg
KG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gdm0uY2FsbGJhY2tDb25zdHJ1Y3RvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uY2FsbGJhY2tGdW5jdGlvblNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTIwLDcgKzEyMCw3IEBAIFN0cnVjdHVy
ZSogSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamUKIH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1
YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvcklt
cGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZt
LCBTdWJzcGFjZUFjY2VzcyBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2Ug
U3Vic3BhY2VBY2Nlc3M6Ok9uTWFpblRocmVhZDoKQEAgLTEzMyw3ICsxMzMsNyBAQCBJc29TdWJz
cGFjZSogSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsCiB9CiAKIHRlbXBsYXRlIDw+Ci1Jc29T
dWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnN1YnNwYWNlRm9ySW1w
bChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
Q2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBT
dWJzcGFjZUFjY2VzcyBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vi
c3BhY2VBY2Nlc3M6Ok9uTWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE1Miw3ICsxNTIsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSwgbW9kZSk7CiAgICAgfQpAQCAt
MTk5LDcgKzE5OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bE9iamVjdCopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJiwgU3Vic3BhY2VBY2Nlc3MpOworICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYsIFN1YnNwYWNl
QWNjZXNzKTsKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTF9BVFRSSUJV
VEVTIGN1c3RvbVRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiAKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRl
cm5hbEZ1bmN0aW9uIEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ub2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQ
SVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg5LDcgKzkwLDcgQEAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgSlNDYWxsYmFja09iagog
fQogCiB0ZW1wbGF0ZSA8PgotSXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFw
cGVyR2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9u
TWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdy
YXBwZXJPYmplY3RHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTAzLDcgKzEwMyw3IEBAIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIEpTQ2FsbGJhY2tPYmoK
IH0KIAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUp
CitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxs
YmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzY0NhbGxiYWNrRnVu
Y3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNo
IDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTA3Niw3ICsx
MDc2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdgogICAgIHN0
cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgc3Ryb25n
bHlWaXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgCi0gICAgVk06OlNw
YWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLmFkZCh0aGlzKTsKKyAgICBIZWFwOjpTcGFj
ZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CkBAIC0xNjY0LDcgKzE2NjQsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgfTsKICAgICB1cGRhdGVBY3Rpdml0eSgpOwogCi0g
ICAgVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLnJlbW92ZSh0aGlzKTsKKyAg
ICBIZWFwOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5yZW1vdmUodGhpcyk7CiAK
ICAgICAvLyBJbiBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoKSB3ZSBtYXkgaGF2ZSBk
ZWNpZGVkIHRvIHNraXAgdmlzaXRpbmcgdGhpcwogICAgIC8vIGNvZGVCbG9jay4gQnkgdGhlIHRp
bWUgd2UgZ2V0IGhlcmUsIHdlJ3JlIGRvbmUgd2l0aCB0aGUgdmVyaWZpZXIgR0MuIFNvLCBsZXQn
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVCbG9j
ay5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXZhbENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJs
b28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOSw5ICszOSw5IEBAIHB1YmxpYzoKICAgICBE
RUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKLSAgICAgICAg
cmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOworICAgICAgICByZXR1cm4gJnZtLmNv
ZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0
ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiAmdm0uZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKCk7CiAgICAgfQpA
QCAtOTAsNCArOTAsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVC
bG9jay5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRnVuY3Rpb25Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hA
dXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6
CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJu
ICZ2bS5jb2RlQmxvY2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVC
bG9jayogY3JlYXRlKFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9j
ayYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4
IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTQwLDkgKzQwLDkgQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1Nw
YWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKTsKICAgICB9
CiAKICAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgQ29w
eVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dy
YW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9v
LmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAgICAgREVD
TEFSRV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5jb2Rl
QmxvY2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVh
dGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEV2YWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS51bmxpbmtlZEV2YWxDb2RlQmxvY2tTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2suaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlz
SW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1NwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUxLDcgKzI1MSw3IEBAIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3QKICAgICAgICAgbV91bmxpbmtlZENvZGVC
bG9ja0ZvckNvbnN0cnVjdC5zZXQodm0sIHRoaXMsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICB2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkuc2V0LmFkZCh0
aGlzKTsKKyAgICB2bS5oZWFwLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQu
c2V0LmFkZCh0aGlzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTAsNyArMzEwLDcg
QEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluYWxpegogICAgICAgICBjbGVh
cklmRGVhZChtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgICAgIGNsZWFySWZEZWFk
KG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgICAgICBpZiAoaXNDbGVhcmVk
ICYmICFpc1N0aWxsVmFsaWQpCi0gICAgICAgICAgICB2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZVNwYWNlKCkuc2V0LnJlbW92ZSh0aGlzKTsKKyAgICAgICAgICAgIHZtLmhlYXAudW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQucmVtb3ZlKHRoaXMpOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsOSArNjYsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewotICAgICAgICByZXR1cm4gJnZtLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZVNwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwg
Q29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUgc2Ny
aXB0TW9kZSwgUmVmUHRyPFREWkVudmlyb25tZW50TGluaz4gcGFyZW50U2NvcGVURFpWYXJpYWJs
ZXMsIHN0ZDo6b3B0aW9uYWw8UHJpdmF0ZU5hbWVFbnZpcm9ubWVudD4gcGFyZW50UHJpdmF0ZU5h
bWVFbnZpcm9ubWVudCwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgTmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIFByaXZh
dGVCcmFuZFJlcXVpcmVtZW50IHByaXZhdGVCcmFuZFJlcXVpcmVtZW50LCBib29sIGlzQnVpbHRp
bkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0gZmFsc2UpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsK
ICAgICAgICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOwotICAgICAg
ICB2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkuc2V0LnJlbW92ZSh0aGlzKTsK
KyAgICAgICAgdm0uaGVhcC51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNl
dC5yZW1vdmUodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVy
ZXMgZmVhdHVyZXMsIExleGljYWxTY29wZUZlYXR1cmVzIGxleGljYWxTY29wZUZlYXR1cmVzLCBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgs
NyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTcGFjZTxtb2RlPigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVy
ZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmRl
YnVnZ2VyU2NvcGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNpbmNsdWRl
ICJJc29JbmxpbmVkSGVhcENlbGxUeXBlSW5saW5lcy5oIgorI2luY2x1ZGUgIklzb1N1YnNwYWNl
UGVyVk0uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUgIkpJVFdv
cmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKQEAg
LTM5MywxMCArMzk0LDEwIEBAIEhlYXA6OkhlYXAoVk0mIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIHN5bWJvbFRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0
aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFN5bWJvbFRhYmxlKSAvLyBIYXNoOjB4YzUyMTVhZmQKICAg
ICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VTcGFjZSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0
aEZpbmFsaXplcnMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQotICAgICwgY29kZUJs
b2NrU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2Vs
bFR5cGUsIENvZGVCbG9jaykgLy8gSGFzaDoweDc3ZTY2ZWM5Ci0gICAgLCBmdW5jdGlvbkV4ZWN1
dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBD
ZWxsVHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NWQxNThmMwotICAgICwgcHJv
Z3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZSwgUHJvZ3JhbUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNwot
ICAgICwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgq
dGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpIC8vIEhhc2g6MHhmNmI4MjhkOQorICAgICwgY29kZUJsb2NrU3BhY2VBbmRTZXQgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIENvZGVC
bG9jaykgLy8gSGFzaDoweDc3ZTY2ZWM5CisgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFu
ZFNldCBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZSwgRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NWQxNThmMworICAgICwgcHJvZ3JhbUV4
ZWN1dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZSwgUHJvZ3JhbUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNwor
ICAgICwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0Vf
SU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUpIC8vIEhhc2g6MHhmNmI4MjhkOQogCiB7CiAgICAgbV93b3JsZFN0YXRlLnN0
b3JlKDApOwpAQCAtNDQ3LDYgKzQ0OCw5IEBAIEhlYXA6On5IZWFwKCkKICAgICAKICAgICBmb3Ig
KFdlYWtCbG9jayogYmxvY2sgOiBtX2xvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcykKICAgICAgICAg
V2Vha0Jsb2NrOjpkZXN0cm95KCp0aGlzLCBibG9jayk7CisKKyAgICBmb3IgKGF1dG8qIHBlclZN
SXNvU3Vic3BhY2UgOiBwZXJWTUlzb1N1YnNwYWNlcykKKyAgICAgICAgcGVyVk1Jc29TdWJzcGFj
ZS0+cmVsZWFzZUlzb1N1YnNwYWNlKCp0aGlzKTsKIH0KIAogYm9vbCBIZWFwOjppc1BhZ2VkT3V0
KCkKQEAgLTY5MSw3ICs2OTUsNyBAQCB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB2bS5idWlsdGluRXhlY3V0
YWJsZXMoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZnVuY3Rpb25FeGVjdXRh
YmxlU3BhY2Uuc3BhY2UpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8RnVuY3Rpb25FeGVjdXRhYmxlPihmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zcGFj
ZSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTeW1ib2xUYWJs
ZT4oc3ltYm9sVGFibGVTcGFjZSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyczxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPihleGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlc1dpdGhGaW5hbGl6ZXJzKTsgLy8gV2UgcnVuIHRoaXMgYmVmb3JlIENvZGVCbG9jaydzIHVu
Y29uZGl0aW9uYWwgZmluYWxpemVyIHNpbmNlIENvZGVCbG9jayBsb29rcyBhdCB0aGUgb3duZXIg
ZXhlY3V0YWJsZSdzIGluc3RhbGxlZCBDb2RlQmxvY2sgaW4gaXRzIGZpbmFsaXplVW5jb25kaXRp
b25hbGx5LgogICAgIGZvckVhY2hDb2RlQmxvY2tTcGFjZSgKQEAgLTY5OSw3ICs3MDMsNyBAQCB2
b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplCiAgICAgICAgICAgICB0aGlz
LT5maW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPENvZGVCbG9jaz4oc3BhY2Uu
c2V0KTsKICAgICAgICAgfSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxp
emVyczxTdHJ1Y3R1cmVSYXJlRGF0YT4oc3RydWN0dXJlUmFyZURhdGFTcGFjZSk7Ci0gICAgZmlu
YWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4odW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQpOworICAgIGZpbmFsaXpl
TWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
KHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc2V0KTsKICAgICBpZiAobV93
ZWFrU2V0U3BhY2UpCiAgICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8SlNXZWFrU2V0PigqbV93ZWFrU2V0U3BhY2UpOwogICAgIGlmIChtX3dlYWtNYXBTcGFjZSkK
QEAgLTEwNTcsNyArMTA2MSw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxv
Y2tzKEQKICAgICBSRUxFQVNFX0FTU0VSVCghbV9jb2xsZWN0aW9uU2NvcGUpOwogCiAgICAgSGVh
cEl0ZXJhdGlvblNjb3BlIGhlYXBJdGVyYXRpb25TY29wZSgqdGhpcyk7Ci0gICAgdW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQuZm9yRWFjaExpdmVDZWxsKAorICAgIHVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc2V0LmZvckVhY2hMaXZlQ2VsbCgKICAgICAg
ICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmNs
ZWFyQ29kZSh2bSk7CkBAIC0zMzAzLDQgKzMzMDcsMTk3IEBAIERZTkFNSUNfU1BBQ0VfQU5EX1NF
VF9ERUZJTkVfTUVNQkVSX1NMT1cKIAogI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJ
TkVfTUVNQkVSX1NMT1cKIAorCituYW1lc3BhY2UgR0NDbGllbnQgeworCisjZGVmaW5lIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChzdWJzcGFjZSkgc3Vic3BhY2UoaGVhcC5zdWJzcGFjZSkKKyNk
ZWZpbmUgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChzdWJzcGFj
ZSkgc3Vic3BhY2UoaGVhcC5zdWJzcGFjZSMjQW5kU2V0LnNwYWNlKQorCitIZWFwOjpIZWFwKEpT
Qzo6SGVhcCYgaGVhcCkKKyAgICA6IG1fc2VydmVyKGhlYXApCisgICAgLCBDTElFTlRfSVNPX1NV
QlNQQUNFX0lOSVQoYXJyYXlTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChi
aWdJbnRTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjYWxsZWVTcGFjZSkK
KyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjbG9uZWRBcmd1bWVudHNTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChkYXRlSW5zdGFuY2VTcGFjZSkKKyAgICAsIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVChkb21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChleGNlcHRpb25TcGFjZSkKKyAgICAsIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCisgICAg
LCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZnVuY3Rpb25TcGFjZSkKKyAgICAsIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChnZXR0ZXJTZXR0ZXJTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVChnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZSkKKyAgICAsIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChpbnRlcm5hbEZ1bmN0aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNP
X1NVQlNQQUNFX0lOSVQoanNQcm94eVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9J
TklUKG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5J
VChudW1iZXJPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwbGFp
bk9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHByb21pc2VTcGFj
ZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQocHJvcGVydHlUYWJsZVNwYWNl
KQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHJlZ0V4cFNwYWNlKQorICAgICwgQ0xJ
RU5UX0lTT19TVUJTUEFDRV9JTklUKHJlZ0V4cE9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lT
T19TVUJTUEFDRV9JTklUKHJvcGVTdHJpbmdTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChzY29wZWRBcmd1bWVudHNTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0Vf
SU5JVChzcGFyc2VBcnJheVZhbHVlTWFwU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQoc3RyaW5nU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3RyaW5n
T2JqZWN0U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3RydWN0dXJlQ2hh
aW5TcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzdHJ1Y3R1cmVSYXJlRGF0
YVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cnVjdHVyZVNwYWNlKQor
ICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzeW1ib2xUYWJsZVNwYWNlKQorICAgICwgQ0xJ
RU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChjb2RlQmxvY2tTcGFjZSkK
KyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQoZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVRfRlJPTV9T
UEFDRV9BTkRfU0VUKHByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NV
QlNQQUNFX0lOSVRfRlJPTV9TUEFDRV9BTkRfU0VUKHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2UpCit7Cit9CisKK0hlYXA6On5IZWFwKCkKK3sKKyAgICBmb3IgKGF1dG8qIHBlclZNSXNv
U3Vic3BhY2UgOiBwZXJWTUlzb1N1YnNwYWNlcykKKyAgICAgICAgcGVyVk1Jc29TdWJzcGFjZS0+
cmVsZWFzZUNsaWVudElzb1N1YnNwYWNlKHZtKCkpOworfQorCisjdW5kZWYgQ0xJRU5UX0lTT19T
VUJTUEFDRV9JTklUCisjdW5kZWYgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0Vf
QU5EX1NFVAorCisKKyNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKG5hbWUpIFwKKyAgICBJc29TdWJzcGFjZSogSGVhcDo6bmFtZSMjU2xvdygpIFwKKyAgICB7
IFwKKyAgICAgICAgQVNTRVJUKCFtXyMjbmFtZSk7IFwKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7
IHNlcnZlcigpLm1fbG9jayB9OyBcCisgICAgICAgIEpTQzo6SXNvU3Vic3BhY2UmIHNlcnZlclNw
YWNlID0gKnNlcnZlcigpLm5hbWU8U3Vic3BhY2VBY2Nlc3M6Ok9uTWFpblRocmVhZD4oKTsgXAor
ICAgICAgICBhdXRvIHNwYWNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4oc2VydmVyU3BhY2Up
OyBcCisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IFwKKyAgICAgICAgbV8jI25hbWUg
PSBXVEZNb3ZlKHNwYWNlKTsgXAorICAgICAgICByZXR1cm4gbV8jI25hbWUuZ2V0KCk7IFwKKyAg
ICB9CisKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlHbG9iYWxP
YmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlW
YWx1ZVdyYXBwZXJTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhhcnJheUJ1ZmZlclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGFycmF5SXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhhc3luY0dlbmVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGJpZ0ludDY0QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhiaWdJbnRPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhiaWdVaW50NjRBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGJvb2xlYW5PYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhib3VuZEZ1bmN0aW9uU3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2FsbGJhY2tDb25zdHJ1Y3RvclNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrR2xvYmFs
T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2Fs
bGJhY2tGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGNhbGxiYWNrT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coY3VzdG9tR2V0dGVyRnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGRhdGFWaWV3U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZGVidWdnZXJTY29wZVNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGVycm9ySW5zdGFuY2VTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmbG9hdDMyQXJyYXlTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmbG9hdDY0QXJyYXlTcGFj
ZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmdW5jdGlvblJhcmVE
YXRhU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZ2VuZXJh
dG9yU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZ2xvYmFs
T2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW5q
ZWN0ZWRTY3JpcHRIb3N0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coaW50OEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coaW50MTZBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGludDMyQXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coanNNb2R1bGVSZWNvcmRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhtYXBCdWNrZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhtYXBJdGVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG1hcFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKG1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlPYmplY3RTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9rZVNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHJlbW90ZUZ1bmN0aW9u
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NvcGVkQXJn
dW1lbnRzVGFibGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaGVyU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coc2V0QnVja2V0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coc2V0SXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhzZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhzaGFkb3dSZWFsbVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHN0cmljdEV2YWxBY3RpdmF0aW9uU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3RyaW5nSXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzb3VyY2VDb2RlU3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3ltYm9sU3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3ltYm9sT2JqZWN0U3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxD
YWxlbmRhclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRl
bXBvcmFsRHVyYXRpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh0ZW1wb3JhbEluc3RhbnRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh0ZW1wb3JhbFBsYWluVGltZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsVGltZVpvbmVTcGFjZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1aW50OEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codWludDhDbGFtcGVkQXJyYXlTcGFjZSkKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1aW50MTZBcnJheVNwYWNlKQorRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVpbnQzMkFycmF5U3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRFdmFsQ29kZUJs
b2NrU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9ja1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1NwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1Nw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYWtNYXBTcGFj
ZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWFrU2V0U3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2Vha09iamVjdFJlZlNw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdpdGhTY29wZVNw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGZpbmFsaXphdGlv
blJlZ2lzdHJ5U3BhY2UpCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cob2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFj
ZSkKKyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpV3JhcHBlck9iamVjdFNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzY0NhbGxiYWNrRnVuY3Rpb25TcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3RTcGFjZSkKKyNlbmRpZgorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGludGxDb2xsYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKGludGxEYXRlVGltZUZvcm1hdFNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxEaXNwbGF5TmFtZXNTcGFjZSkKK0RZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTGlzdEZvcm1hdFNwYWNlKQorRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxMb2NhbGVTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTnVtYmVyRm9ybWF0U3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFBsdXJhbFJ1
bGVzU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFJl
bGF0aXZlVGltZUZvcm1hdFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudGVyU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3BhY2UpCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9XYXNt
SUNDYWxsZWVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3
ZWJBc3NlbWJseUV4Y2VwdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseU1lbW9yeVNw
YWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5
TW9kdWxlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlUYWdTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlKQor
I2VuZGlmCisKKyN1bmRlZiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cK
KworI2RlZmluZSBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9TTE9XKG5hbWUp
IFwKKyAgICBJc29TdWJzcGFjZSogSGVhcDo6bmFtZSMjU2xvdygpIFwKKyAgICB7IFwKKyAgICAg
ICAgQVNTRVJUKCFtXyMjbmFtZSk7IFwKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IHNlcnZlcigp
Lm1fbG9jayB9OyBcCisgICAgICAgIEpTQzo6SXNvU3Vic3BhY2UmIHNlcnZlclNwYWNlID0gKnNl
cnZlcigpLm5hbWU8U3Vic3BhY2VBY2Nlc3M6Ok9uTWFpblRocmVhZD4oKTsgXAorICAgICAgICBh
dXRvIHNwYWNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4oc2VydmVyU3BhY2UpOyBcCisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IFwKKyAgICAgICAgbV8jI25hbWUgPSBXVEZNb3Zl
KHNwYWNlKTsgXAorICAgICAgICByZXR1cm4gbV8jI25hbWUuZ2V0KCk7IFwKKyAgICB9CisKK0RZ
TkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSX1NMT1coZXZhbEV4ZWN1dGFibGVTcGFj
ZSkKK0RZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGVTcGFjZSkKKworI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVf
TUVNQkVSX1NMT1cKKworfSAvLyBuYW1lc3BhY2UgR0NDbGllbnQKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDYgKzczLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBQcm9maWxlcjsKIGNsYXNzIEhlYXBW
ZXJpZmllcjsKIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKK2NsYXNzIElzb1N1YnNwYWNlUGVy
Vk07CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogY2xh
c3MgSlNDZWxsOwpAQCAtMTA2LDYgKzEwNywxMCBAQCBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIFNw
ZWN1bGF0aXZlSklUOwogfQogCituYW1lc3BhY2UgR0NDbGllbnQgeworY2xhc3MgSGVhcDsKK30K
KwogdHlwZWRlZiBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiBQcm90ZWN0Q291bnRTZXQ7CiB0eXBl
ZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRTZXQ7CiAKQEAgLTM4OSw2
ICszOTQsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFya2luZ0ZvckdDVmVyaWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lzTWFya2luZ0ZvckdDVmVyaWZpZXI7IH0KIAorICAgIExvY2smIGxv
Y2soKSB7IHJldHVybiBtX2xvY2s7IH0KKwogICAgIHZvaWQgYXBwZW5kUG9zc2libHlBY2Nlc3Nl
ZFN0cmluZ0Zyb21Db25jdXJyZW50VGhyZWFkcyhTdHJpbmcmJiBzdHJpbmcpCiAgICAgewogICAg
ICAgICBtX3Bvc3NpYmx5QWNjZXNzZWRTdHJpbmdzRnJvbUNvbmN1cnJlbnRUaHJlYWRzLmFwcGVu
ZChXVEZNb3ZlKHN0cmluZykpOwpAQCAtNDI1LDYgKzQzMiw4IEBAIHByaXZhdGU6CiAgICAgY2xh
c3MgSGVhcFRocmVhZDsKICAgICBmcmllbmQgY2xhc3MgSGVhcFRocmVhZDsKIAorICAgIGZyaWVu
ZCBjbGFzcyBHQ0NsaWVudDo6SGVhcDsKKwogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1p
bkV4dHJhTWVtb3J5ID0gMjU2OwogICAgIAogICAgIGNsYXNzIENGaW5hbGl6ZXJPd25lciBmaW5h
bCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewpAQCAtNTc1LDYgKzU4NCw3IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCB2ZXJpZnlHQygpOwogCisgICAgTG9jayBtX2xvY2s7CiAgICAgY29u
c3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBNdXRhdG9yU3RhdGUgbV9tdXRhdG9yU3RhdGUg
eyBNdXRhdG9yU3RhdGU6OlJ1bm5pbmcgfTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpA
QCAtODc5LDcgKzg4OSw2IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJz
cGFjZSogbmFtZSMjU2xvdygpOyBcCiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPiBt
XyMjbmFtZTsKIAotCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFwaVdyYXBwZXJPYmplY3RTcGFjZSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG9iakNDYWxsYmFja0Z1bmN0aW9uU3BhY2UpCkBA
IC0xMDIyLDM0ICsxMDMxLDIxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT0JKRUNUX09G
RlNFVE9GKFNwYWNlQW5kU2V0LCBzZXQpKTsKICAgICAgICAgfQogICAgIH07Ci0gICAgCi0gICAg
U3BhY2VBbmRTZXQgY29kZUJsb2NrU3BhY2U7CisKKyAgICBTcGFjZUFuZFNldCBjb2RlQmxvY2tT
cGFjZUFuZFNldDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JF
YWNoQ29kZUJsb2NrU3BhY2UoY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAgIGZ1bmMo
Y29kZUJsb2NrU3BhY2UpOworICAgICAgICBmdW5jKGNvZGVCbG9ja1NwYWNlQW5kU2V0KTsKICAg
ICB9CiAKICAgICBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUihldmFsRXhlY3V0
YWJsZVNwYWNlKQogICAgIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCi0gICAgU3BhY2VBbmRTZXQgZnVuY3Rpb25FeGVjdXRh
YmxlU3BhY2U7Ci0gICAgU3BhY2VBbmRTZXQgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICBT
cGFjZUFuZFNldCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldDsKKyAgICBTcGFjZUFuZFNl
dCBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlQW5kU2V0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KICAgICB2b2lkIGZvckVhY2hTY3JpcHRFeGVjdXRhYmxlU3BhY2UoY29uc3QgRnVuYyYg
ZnVuYykKICAgICB7CiAgICAgICAgIGlmIChtX2V2YWxFeGVjdXRhYmxlU3BhY2UpCiAgICAgICAg
ICAgICBmdW5jKCptX2V2YWxFeGVjdXRhYmxlU3BhY2UpOwotICAgICAgICBmdW5jKGZ1bmN0aW9u
RXhlY3V0YWJsZVNwYWNlKTsKKyAgICAgICAgZnVuYyhmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFu
ZFNldCk7CiAgICAgICAgIGlmIChtX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCiAgICAg
ICAgICAgICBmdW5jKCptX21vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UpOwotICAgICAgICBm
dW5jKHByb2dyYW1FeGVjdXRhYmxlU3BhY2UpOworICAgICAgICBmdW5jKHByb2dyYW1FeGVjdXRh
YmxlU3BhY2VBbmRTZXQpOwogICAgIH0KIAotICAgIFNwYWNlQW5kU2V0IHVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2U7CisgICAgU3BhY2VBbmRTZXQgdW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGVTcGFjZUFuZFNldDsKIAorICAgIFZlY3RvcjxJc29TdWJzcGFjZVBlclZNKj4gcGVyVk1J
c29TdWJzcGFjZXM7CiAjdW5kZWYgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVIK
IH07CiAKK25hbWVzcGFjZSBHQ0NsaWVudCB7CisKK2NsYXNzIEhlYXAgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEhlYXApOworcHVibGljOgorICAgIEhlYXAoSlNDOjpIZWFwJik7CisgICAg
fkhlYXAoKTsKKworICAgIFZNJiB2bSgpIGNvbnN0OworICAgIEpTQzo6SGVhcCYgc2VydmVyKCkg
eyByZXR1cm4gbV9zZXJ2ZXI7IH0KKworcHJpdmF0ZToKKyAgICBKU0M6OkhlYXAmIG1fc2VydmVy
OworCisgICAgSXNvU3Vic3BhY2UgYXJyYXlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBiaWdJbnRT
cGFjZTsKKyAgICBJc29TdWJzcGFjZSBjYWxsZWVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBjbG9u
ZWRBcmd1bWVudHNTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBjdXN0b21HZXR0ZXJTZXR0ZXJTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSBkYXRlSW5zdGFuY2VTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBk
b21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBleGNlcHRpb25T
cGFjZTsKKyAgICBJc29TdWJzcGFjZSBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2U7Cisg
ICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25TcGFjZTsKKyAgICBJc29TdWJzcGFjZSBnZXR0ZXJTZXR0
ZXJTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsK
KyAgICBJc29TdWJzcGFjZSBpbnRlcm5hbEZ1bmN0aW9uU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ug
anNQcm94eVNwYWNlOworICAgIElzb1N1YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKKyAg
ICBJc29TdWJzcGFjZSBudW1iZXJPYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwbGFpbk9i
amVjdFNwYWNlOworICAgIElzb1N1YnNwYWNlIHByb21pc2VTcGFjZTsKKyAgICBJc29TdWJzcGFj
ZSBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgcHJvcGVydHlU
YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIHJlZ0V4cFNwYWNlOworICAgIElzb1N1YnNwYWNl
IHJlZ0V4cE9iamVjdFNwYWNlOworICAgIElzb1N1YnNwYWNlIHJvcGVTdHJpbmdTcGFjZTsKKyAg
ICBJc29TdWJzcGFjZSBzY29wZWRBcmd1bWVudHNTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzcGFy
c2VBcnJheVZhbHVlTWFwU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RyaW5nU3BhY2U7CisgICAg
SXNvU3Vic3BhY2Ugc3RyaW5nT2JqZWN0U3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RydWN0dXJl
Q2hhaW5TcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlOworICAg
IElzb1N1YnNwYWNlIHN0cnVjdHVyZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGJyYW5kZWRTdHJ1
Y3R1cmVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzeW1ib2xUYWJsZVNwYWNlOworCisjZGVmaW5l
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmFtZSkgXAorICAgIHRlbXBsYXRl
PFN1YnNwYWNlQWNjZXNzIG1vZGU+IFwKKyAgICBJc29TdWJzcGFjZSogbmFtZSgpIFwKKyAgICB7
IFwKKyAgICAgICAgaWYgKG1fIyNuYW1lIHx8IG1vZGUgPT0gU3Vic3BhY2VBY2Nlc3M6OkNvbmN1
cnJlbnRseSkgXAorICAgICAgICAgICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgICAg
IHJldHVybiBuYW1lIyNTbG93KCk7IFwKKyAgICB9IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJ
c29TdWJzcGFjZSogbmFtZSMjU2xvdygpOyBcCisgICAgc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPiBtXyMjbmFtZTsKKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNl
KQorI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFwaVdyYXBwZXJPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzY0NhbGxiYWNrRnVuY3Rpb25TcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrQVBJV3JhcHBlckds
b2JhbE9iamVjdFNwYWNlKQorI2VuZGlmCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihhcGlHbG9iYWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGFwaVZhbHVlV3JhcHBlclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoYXJyYXlCdWZmZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKGFycmF5SXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFzeW5jR2VuZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdJbnQ2NEFycmF5U3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdJbnRPYmplY3RTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGJpZ1VpbnQ2NEFycmF5U3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihib29sZWFuT2JqZWN0U3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihib3VuZEZ1bmN0aW9uU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0NvbnN0cnVj
dG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFj
a0dsb2JhbE9iamVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoY2FsbGJhY2tGdW5jdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoY2FsbGJhY2tPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGN1c3RvbUdldHRlckZ1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZGF0YVZpZXdTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGRlYnVnZ2VyU2NvcGVTcGFjZSkKKyAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGVycm9ySW5zdGFuY2VTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGZsb2F0MzJBcnJheVNwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZmxvYXQ2NEFycmF5U3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihmdW5jdGlvblJhcmVEYXRh
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihnZW5lcmF0b3JT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGdsb2JhbE9iamVj
dFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW5qZWN0ZWRT
Y3JpcHRIb3N0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihp
bnQ4QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGlu
dDE2QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGlu
dDMyQXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGph
dmFTY3JpcHRDYWxsRnJhbWVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGpzTW9kdWxlUmVjb3JkU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihtYXBCdWNrZXRTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKG1hcEl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihtYXBTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKG1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRl
cnNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZl
dGNoZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNldEJ1
Y2tldFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2V0SXRl
cmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNldFNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2hhZG93UmVhbG1T
cGFjZSk7CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzdHJpY3RFdmFs
QWN0aXZhdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
c3RyaW5nSXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHNvdXJjZUNvZGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHN5bWJvbFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
c3ltYm9sT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Uih0ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsQ2FsZW5kYXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsRHVyYXRpb25TcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsSW5zdGFudFNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxQbGFpblRpbWVTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsVGltZVpvbmVT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVpbnQ4QXJyYXlT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVpbnQ4Q2xhbXBl
ZEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1aW50
MTZBcnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodWlu
dDMyQXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVu
bGlua2VkRXZhbENvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIodW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3Bh
Y2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KGZpbmFsaXphdGlvblJlZ2lzdHJ5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3ZWFrT2JqZWN0UmVmU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih3ZWFrU2V0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3ZWFrTWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUih3aXRoU2NvcGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGludGxDb2xsYXRvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoaW50bERhdGVUaW1lRm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnRsRGlzcGxheU5hbWVzU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsTGlzdEZvcm1hdFNwYWNlKQorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bExvY2FsZVNwYWNlKQorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bE51bWJlckZvcm1hdFNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFBsdXJhbFJ1bGVzU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsUmVsYXRpdmVUaW1lRm9y
bWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2Vn
bWVudEl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihpbnRsU2VnbWVudGVyU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihpbnRsU2VnbWVudHNTcGFjZSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUV4Y2VwdGlv
blNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlGdW5jdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
d2ViQXNzZW1ibHlHbG9iYWxTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHdlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TWVtb3J5U3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5VGFi
bGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2Vt
Ymx5VGFnU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlKQorI2VuZGlmCisKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQor
CisjdW5kZWYgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUgorCisgICAgSXNvU3Vi
c3BhY2UgY29kZUJsb2NrU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2U7CisgICAgSXNvU3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29T
dWJzcGFjZSB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworCisvLyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPj4gaXNvU3Vic3BhY2VzTmVlZGluZ0Rlc3RydWN0
aW9uOworcHVibGljOgorICAgIFZlY3RvcjxJc29TdWJzcGFjZVBlclZNKj4gcGVyVk1Jc29TdWJz
cGFjZXM7CisKKyAgICBmcmllbmQgY2xhc3MgSlNDOjpWTTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEdDQ2xpZW50CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcwLDQgKzI3
MCwxMyBAQCB2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jCiAgICAgICAg
IGZ1bmMoKnZpc2l0b3IpOwogfQogCituYW1lc3BhY2UgR0NDbGllbnQgeworCitBTFdBWVNfSU5M
SU5FIFZNJiBIZWFwOjp2bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Vk0q
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihWTSwgY2xp
ZW50SGVhcCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiBJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBjb25z
dCBIZWFwQ2VsbFR5cGUmIGhlYXBDZWxsVHlwZSwgc2l6ZV90IHNpemUsIHVpbnQ4X3QgbnVtYmVy
T2ZMb3dlclRpZXJDZWxscywgc3RkOjp1bmlxdWVfcHRyPElzb01lbW9yeUFsbG9jYXRvckJhc2U+
JiYgYWxsb2NhdG9yKQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKICAgICAsIG1fZGlyZWN0
b3J5KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUp
KQotICAgICwgbV9sb2NhbEFsbG9jYXRvcigmbV9kaXJlY3RvcnkpCiAgICAgLCBtX2lzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoYWxsb2NhdG9yID8gV1RGTW92ZShhbGxvY2F0b3IpIDogbWFrZVVu
aXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihuYW1lKSkKIHsKICAgICBtX3JlbWFpbmlu
Z0xvd2VyVGllckNlbGxDb3VudCA9IG51bWJlck9mTG93ZXJUaWVyQ2VsbHM7CkBAIC0xMTksNSAr
MTE4LDE0IEBAIHZvaWQgSXNvU3Vic3BhY2U6OmRlc3Ryb3lMb3dlclRpZXJGcmVlTGkKICAgICB9
KTsKIH0KIAorbmFtZXNwYWNlIEdDQ2xpZW50IHsKKworSXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNl
KEpTQzo6SXNvU3Vic3BhY2UmIHNlcnZlcikKKyAgICA6IG1fbG9jYWxBbGxvY2F0b3IoJnNlcnZl
ci5tX2RpcmVjdG9yeSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgR0NDbGllbnQKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBJc29DZWxsU2V0OwogCituYW1lc3BhY2UgR0NDbGllbnQgeworY2xhc3Mg
SXNvU3Vic3BhY2U7Cit9CisKIGNsYXNzIElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsK
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUs
IEhlYXAmLCBjb25zdCBIZWFwQ2VsbFR5cGUmLCBzaXplX3Qgc2l6ZSwgdWludDhfdCBudW1iZXJP
Zkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4m
JiA9IG51bGxwdHIpOwpAQCAtNDIsMTAgKzQ2LDYgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGNl
bGxTaXplKCkgeyByZXR1cm4gbV9kaXJlY3RvcnkuY2VsbFNpemUoKTsgfQogCi0gICAgQWxsb2Nh
dG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwotCi0gICAgdm9pZCog
YWxsb2NhdGUoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlKTsKLQogICAgIHZvaWQgc3dlZXBMb3dlclRpZXJDZWxsKFByZWNpc2VBbGxvY2F0aW9u
Kik7CiAgICAgdm9pZCBjbGVhcklzb0NlbGxTZXRCaXQoUHJlY2lzZUFsbG9jYXRpb24qKTsKIApA
QCAtNTgsMjQgKzU4LDU1IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
SXNvQ2VsbFNldDsKKyAgICBmcmllbmQgY2xhc3MgR0NDbGllbnQ6Oklzb1N1YnNwYWNlOwogICAg
IAogICAgIHZvaWQgZGlkUmVzaXplQml0cyh1bnNpZ25lZCBuZXdTaXplKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpZFJlbW92ZUJsb2NrKHVuc2lnbmVkIGJsb2NrSW5kZXgpIG92ZXJyaWRlOwogICAg
IHZvaWQgZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSopIG92
ZXJyaWRlOwotICAgIAorCisgICAgc3RhdGljIElzb1N1YnNwYWNlJiBmcm9tQmxvY2tEaXJlY3Rv
cnkoQmxvY2tEaXJlY3RvcnkmKTsKKwogICAgIEJsb2NrRGlyZWN0b3J5IG1fZGlyZWN0b3J5Owot
ICAgIExvY2FsQWxsb2NhdG9yIG1fbG9jYWxBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PElzb01lbW9yeUFsbG9jYXRvckJhc2U+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAg
ICBTZW50aW5lbExpbmtlZExpc3Q8UHJlY2lzZUFsbG9jYXRpb24sIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxQcmVjaXNlQWxsb2NhdGlvbj4+IG1fbG93ZXJUaWVyRnJlZUxpc3Q7CiAgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PElzb0NlbGxTZXQsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0
Pj4gbV9jZWxsU2V0czsKIH07CiAKK0FMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIElzb1N1YnNw
YWNlOjpmcm9tQmxvY2tEaXJlY3RvcnkoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkKK3sKKyAg
ICByZXR1cm4gKmJpdHdpc2VfY2FzdDxJc29TdWJzcGFjZSo+KGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KCZkaXJlY3RvcnkpIC0gT0JKRUNUX09GRlNFVE9GKElzb1N1YnNwYWNlLCBtX2RpcmVjdG9y
eSkpOworfQorCituYW1lc3BhY2UgR0NDbGllbnQgeworCitjbGFzcyBJc29TdWJzcGFjZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSXNvU3Vic3BhY2UpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlKEpT
Qzo6SXNvU3Vic3BhY2UmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+SXNvU3Vic3BhY2UoKSA9
IGRlZmF1bHQ7CisgICAgLy8gbWxhbSBGSVhNRSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHJl
bGlucXVpc2ggdGhlIExvY2FsQWxsb2NhdG9yIHRvIHRoZSBzZXJ2ZXIgb24gZGVzdHJ1Y3Rpb24u
CisKKyAgICBzaXplX3QgY2VsbFNpemUoKSB7IHJldHVybiBtX2xvY2FsQWxsb2NhdG9yLmNlbGxT
aXplKCk7IH0KKworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JG
b3JNb2RlKTsKKworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29u
dGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisKKyAgICBKU0M6Oklzb1N1YnNwYWNlJiBz
ZXJ2ZXIoKTsKKworcHJpdmF0ZToKKyAgICBMb2NhbEFsbG9jYXRvciBtX2xvY2FsQWxsb2NhdG9y
OworfTsKKwogQUxXQVlTX0lOTElORSBBbGxvY2F0b3IgSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZv
cihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSA9PSBj
ZWxsU2l6ZSgpKTsKICAgICByZXR1cm4gQWxsb2NhdG9yKCZtX2xvY2FsQWxsb2NhdG9yKTsKIH0K
IAorfSAvLyBuYW1lc3BhY2UgR0NDbGllbnQKKwogI2RlZmluZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwQ2VsbFR5cGUsIHR5cGUpICgiSXNvbGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhl
YXApLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5cGUpLCB0eXBlOjpudW1iZXJPZkxvd2VyVGll
ckNlbGxzKQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNl
IEdDQ2xpZW50IHsKKwogQUxXQVlTX0lOTElORSB2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUo
Vk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpID09
IGNlbGxTaXplKCkpOwpAQCAtMzUsNiArMzcsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIElzb1N1
YnNwYWNlOjphbGxvY2F0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorfSAvLyBuYW1lc3BhY2Ug
R0NDbGllbnQKKwogaW5saW5lIHZvaWQgSXNvU3Vic3BhY2U6OmNsZWFySXNvQ2VsbFNldEJpdChQ
cmVjaXNlQWxsb2NhdGlvbiogcHJlY2lzZUFsbG9jYXRpb24pCiB7CiAgICAgdW5zaWduZWQgbG93
ZXJUaWVySW5kZXggPSBwcmVjaXNlQWxsb2NhdGlvbi0+bG93ZXJUaWVySW5kZXgoKTsKQEAgLTYw
LDUgKzY0LDE1IEBAIHZvaWQgSXNvU3Vic3BhY2U6OmZvckVhY2hMb3dlclRpZXJGcmVlTGkKICAg
ICBtX2xvd2VyVGllckZyZWVMaXN0LmZvckVhY2goZnVuYyk7CiB9CiAKK25hbWVzcGFjZSBHQ0Ns
aWVudCB7CisKKy8vIG1sYW0gRklYTUUgZG8gd2UgbmVlZCB0aGlzPyBEZWxldGUgaWYgbm90IHVz
ZWQuCitpbmxpbmUgSlNDOjpJc29TdWJzcGFjZSYgSXNvU3Vic3BhY2U6OnNlcnZlcigpCit7Cisg
ICAgcmV0dXJuIEpTQzo6SXNvU3Vic3BhY2U6OmZyb21CbG9ja0RpcmVjdG9yeShtX2xvY2FsQWxs
b2NhdG9yLmRpcmVjdG9yeSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgR0NDbGllbnQKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlUGVyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb1N1YnNwYWNlUGVyVk0uY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
LDI1ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBJc29TdWJzcGFjZVBlclZN
OjpBdXRvcmVtb3ZpbmdJc29TdWJzcGFjZSBmaW5hbCA6IHB1YmxpYyBJc29TdWJzcGFjZSB7Ci1w
dWJsaWM6Ci0gICAgQXV0b3JlbW92aW5nSXNvU3Vic3BhY2UoSXNvU3Vic3BhY2VQZXJWTSYgcGVy
Vk0sIENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgY29uc3QgSGVhcENlbGxUeXBlJiBoZWFwQ2Vs
bFR5cGUsIHNpemVfdCBzaXplKQotICAgICAgICA6IElzb1N1YnNwYWNlKG5hbWUsIGhlYXAsIGhl
YXBDZWxsVHlwZSwgc2l6ZSwgLyogbnVtYmVyT2ZMb3dlclRpZXJDZWxscyAqLyAwKQotICAgICAg
ICAsIG1fcGVyVk0ocGVyVk0pCi0gICAgewotICAgIH0KLSAgICAKLSAgICB+QXV0b3JlbW92aW5n
SXNvU3Vic3BhY2UoKSBmaW5hbAotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGVy
Vk0ubV9sb2NrIH07Ci0gICAgICAgIG1fcGVyVk0ubV9zdWJzcGFjZVBlclZNLnJlbW92ZSgmc3Bh
Y2UoKS5oZWFwKCkudm0oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIElzb1N1YnNwYWNlUGVy
Vk0mIG1fcGVyVk07Ci19OwotCi1Jc29TdWJzcGFjZVBlclZNOjpJc29TdWJzcGFjZVBlclZNKEZ1
bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhWTSYpPiBzdWJzcGFjZVBhcmFtZXRlcnMpCitJc29T
dWJzcGFjZVBlclZNOjpJc29TdWJzcGFjZVBlclZNKEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVy
cyhIZWFwJik+IHN1YnNwYWNlUGFyYW1ldGVycykKICAgICA6IG1fc3Vic3BhY2VQYXJhbWV0ZXJz
KFdURk1vdmUoc3Vic3BhY2VQYXJhbWV0ZXJzKSkKIHsKIH0KQEAgLTU5LDE2ICs0MSw2MiBAQCBJ
c29TdWJzcGFjZVBlclZNOjp+SXNvU3Vic3BhY2VQZXJWTSgpCiAgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7CiB9CiAKLUlzb1N1YnNwYWNlJiBJc29TdWJzcGFjZVBlclZNOjpmb3JWTShW
TSYgdm0pCitJc29TdWJzcGFjZSYgSXNvU3Vic3BhY2VQZXJWTTo6aXNvU3Vic3BhY2Vmb3JIZWFw
KEhlYXAmIGhlYXApCiB7CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIGF1dG8g
cmVzdWx0ID0gbV9zdWJzcGFjZVBlclZNLmFkZCgmdm0sIG51bGxwdHIpOworICAgIGF1dG8gcmVz
dWx0ID0gbV9zdWJzcGFjZVBlckhlYXAuYWRkKCZoZWFwLCBudWxscHRyKTsKICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgU3Vic3BhY2VQYXJhbWV0ZXJzIHBhcmFtcyA9IG1f
c3Vic3BhY2VQYXJhbWV0ZXJzKHZtKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IG5ldyBBdXRvcmVtb3ZpbmdJc29TdWJzcGFjZSgqdGhpcywgcGFyYW1zLm5hbWUsIHZtLmhlYXAs
ICpwYXJhbXMuaGVhcENlbGxUeXBlLCBwYXJhbXMuc2l6ZSk7CisgICAgICAgIFN1YnNwYWNlUGFy
YW1ldGVycyBwYXJhbXMgPSBtX3N1YnNwYWNlUGFyYW1ldGVycyhoZWFwKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBJc29TdWJzcGFjZShwYXJhbXMubmFtZSwgaGVhcCwg
KnBhcmFtcy5oZWFwQ2VsbFR5cGUsIHBhcmFtcy5zaXplLCAwKTsKKworICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcC5sb2NrKCkgfTsKKyAgICAgICAgaGVhcC5wZXJWTUlzb1N1YnNwYWNlcy5h
cHBlbmQodGhpcyk7CiAgICAgfQogICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
IH0KIAorR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBJc29TdWJzcGFjZVBlclZNOjpjbGllbnRJc29T
dWJzcGFjZWZvclZNKFZNJiB2bSkKK3sKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBt
X2xvY2sgfTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2NsaWVudFN1YnNwYWNlUGVyVk0uYWRk
KCZ2bSwgbnVsbHB0cik7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkgJiYgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKKyAgICB9CisKKyAgICBJc29TdWJzcGFjZSYgc3Vic3BhY2UgPSBpc29TdWJzcGFjZWZv
ckhlYXAodm0uaGVhcCk7CisKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgLy8g
V2UndmUgYWxyZWFkeSBhZGRlZCB0aGUgZW50cnkgYWJvdmUuIEhlbmNlLCBpdCBpcyBndWFyYW50
ZWVkIHRvIG5vdCBiZSBhCisgICAgLy8gbmV3IGVudHJ5LiBIb3dldmVyLCBhbm90aGVyIHRocmVh
ZCBtYXkgaGF2ZSBpbml0aWFsaXplZCBpdHMgdmFsdWUuIEhlbmNlLAorICAgIC8vIHdlIG5lZWQg
dG8gcmUtZmV0Y2ggdGhlIHJlc3VsdCwgYW5kIGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyBzdGlsbCBu
dWxsLgorICAgIGF1dG8gcmVzdWx0ID0gbV9jbGllbnRTdWJzcGFjZVBlclZNLmFkZCgmdm0sIG51
bGxwdHIpOworICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IEdDQ2xpZW50OjpJc29TdWJzcGFjZShzdWJzcGFjZSk7
CisgICAgICAgIHZtLmNsaWVudEhlYXAucGVyVk1Jc29TdWJzcGFjZXMuYXBwZW5kKHRoaXMpOwor
ICAgIH0KKyAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgSXNv
U3Vic3BhY2VQZXJWTTo6cmVsZWFzZUlzb1N1YnNwYWNlKEhlYXAmIGhlYXApCit7CisgICAgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9j
ayB9OworICAgICAgICBzdWJzcGFjZSA9IG1fc3Vic3BhY2VQZXJIZWFwLnRha2UoJmhlYXApOwor
ICAgIH0KKyAgICBkZWxldGUgc3Vic3BhY2U7Cit9CisKK3ZvaWQgSXNvU3Vic3BhY2VQZXJWTTo6
cmVsZWFzZUNsaWVudElzb1N1YnNwYWNlKFZNJiB2bSkKK3sKKyAgICBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIGNsaWVudFN1YnNwYWNlOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1f
bG9jayB9OworICAgICAgICBjbGllbnRTdWJzcGFjZSA9IG1fY2xpZW50U3Vic3BhY2VQZXJWTS50
YWtlKCZ2bSk7CisgICAgfQorICAgIGRlbGV0ZSBjbGllbnRTdWJzcGFjZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNw
YWNlUGVyVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29T
dWJzcGFjZVBlclZNLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDkg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBWTTsKKwogLy8gVGhp
cyBpcyBhbiBhcHByb3ByaWF0ZSB3YXkgdG8gc3Rhc2ggSXNvU3Vic3BhY2VzIGZvciByYXJlbHkt
dXNlZCBjbGFzc2VzIG9yIGNsYXNzZXMgdGhhdCBhcmUgbW9zdGx5CiAvLyBzdXJlIHRvIGJlIG1h
aW4tdGhyZWFkLW9ubHkuIEJ1dCBpZiBhIGNsYXNzIHR5cGljYWxseSBnZXRzIGluc3RhbnRpYXRl
ZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQKIC8vIG9uY2UsIHRoZW4gdGhpcyBpcyBub3QgZ3Jl
YXQsIGJlY2F1c2UgY29uY3VycmVudCBhbGxvY2F0aW9ucyB3aWxsIHByb2JhYmx5IGNvbnRlbmQg
b24gdGhpcyB0aGluZydzCkBAIC01MywxOCArNTYsMjAgQEAgcHVibGljOgogICAgICAgICBzaXpl
X3Qgc2l6ZSB7IDAgfTsKICAgICB9OwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1
YnNwYWNlUGVyVk0oRnVuY3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKFZNJik+KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZVBlclZNKEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVy
cyhIZWFwJik+KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SXNvU3Vic3BhY2VQZXJWTSgpOwog
ICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlJiBmb3JWTShWTSYpOworICAg
IElzb1N1YnNwYWNlJiBpc29TdWJzcGFjZWZvckhlYXAoSGVhcCYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY2xpZW50SXNvU3Vic3BhY2Vmb3JWTShWTSYp
OwogCi1wcml2YXRlOgotICAgIGNsYXNzIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlOwotICAgIGZy
aWVuZCBjbGFzcyBBdXRvcmVtb3ZpbmdJc29TdWJzcGFjZTsKKyAgICB2b2lkIHJlbGVhc2VJc29T
dWJzcGFjZShIZWFwJik7CisgICAgdm9pZCByZWxlYXNlQ2xpZW50SXNvU3Vic3BhY2UoVk0mKTsK
IAorcHJpdmF0ZToKICAgICBMb2NrIG1fbG9jazsKLSAgICBIYXNoTWFwPFZNKiwgSXNvU3Vic3Bh
Y2UqPiBtX3N1YnNwYWNlUGVyVk0gV1RGX0dVQVJERURfQllfTE9DSyhtX2xvY2spOwotICAgIEZ1
bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhWTSYpPiBtX3N1YnNwYWNlUGFyYW1ldGVyczsKKyAg
ICBIYXNoTWFwPEhlYXAqLCBJc29TdWJzcGFjZSo+IG1fc3Vic3BhY2VQZXJIZWFwIFdURl9HVUFS
REVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBIYXNoTWFwPFZNKiwgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKj4gbV9jbGllbnRTdWJzcGFjZVBlclZNIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsK
KyAgICBGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoSGVhcCYpPiBtX3N1YnNwYWNlUGFyYW1l
dGVyczsKIH07CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlMoaGVhcENlbGxUeXBl
LCB0eXBlKSA6OkpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6U3Vic3BhY2VQYXJhbWV0ZXJzKCJJc29s
YXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5cGUpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDkgQEAgdm9pZCogTG9jYWxBbGxv
Y2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoSAogICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IG51bGxw
dHIpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCisgICAgLy8gbWxhbSBGSVhNRSBJIHRoaW5r
IHdlIG5lZWQgdG8gc3luY2hyb25pemUgaGVyZSB0byBwcmV2ZW50IGRpZmZlcmVudCBWTQorICAg
IC8vIG1haW4gdGhyZWFkcyBmcm9tIHJhY2luZy4KKwogICAgIFN1YnNwYWNlKiBzdWJzcGFjZSA9
IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlOwogICAgIGlmIChzdWJzcGFjZS0+aXNJc29TdWJzcGFj
ZSgpKSB7CiAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxJc29TdWJzcGFj
ZSo+KHN1YnNwYWNlKS0+dHJ5QWxsb2NhdGVGcm9tTG93ZXJUaWVyKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jh
d1NlCiAgICAgCiBwdWJsaWM6CiAgICAgTG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqKTsK
LSAgICB+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+TG9jYWxBbGxv
Y2F0b3IoKTsKICAgICAKICAgICB2b2lkKiBhbGxvY2F0ZShIZWFwJiwgR0NEZWZlcnJhbENvbnRl
eHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIApAQCAtNTYsNyArNTYsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAgICAgCiAgICAg
Ym9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqKSBjb25zdDsKLSAgICAKKworICAgIEJs
b2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiAqbV9kaXJlY3Rvcnk7IH0K
KwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU3RhdGUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotZW51bSBjbGFzcyBN
dXRhdG9yU3RhdGUgeworZW51bSBjbGFzcyBNdXRhdG9yU3RhdGUgOiB1aW50OF90IHsKICAgICAv
LyBUaGUgbXV0YXRvciBpcyBydW5uaW5nIHdoZW4gaXQncyBub3QgaW5zaWRlIGEgSGVhcCBzbG93
IHBhdGguCiAgICAgUnVubmluZywKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlw
dEhvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gdm0uaW5qZWN0ZWRTY3JpcHRIb3N0U3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uamF2YVNjcmlwdENhbGxGcmFtZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWdncmVnYXRlRXJyb3JQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
Z2dyZWdhdGVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BZ2dyZWdhdGVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEVycm9yUHJv
dG90eXBlQmFzZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBZ2dyZWdhdGVFcnJv
clByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
SXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0
eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFycmF5SXRlcmF0b3JQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnJvbVN5bmNJdGVyYXRvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fz
eW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOSBPbGVrc2FuZHIgU2thY2hrb3YgPGdza2FjaGtvdkBnbWFpbC5jb20+LgotICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlv
blByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4uCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShBc3luY0Z1bmN0aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
c3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgT2xla3NhbmRyIFNrYWNoa292IDxnc2th
Y2hrb3ZAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1
LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNHZW5lcmF0b3JGdW5jdGlvblBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dl
bmVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBPbGVrc2FuZHIgU2thY2hr
b3YgPGdza2FjaGtvdkBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jR2VuZXJh
dG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5
bmNJdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IE9sZWtzYW5kciBTa2Fj
aGtvdiA8Z3NrYWNoa292QGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25G
aW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBdG9taWNzT2JqZWN0
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRPYmplY3QuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3
IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLmJpZ0ludE9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBl
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jp
Z0ludFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPi4KLSAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShCaWdJbnRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsNyArMzMsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTV3JhcHBlck9iamVjdDsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5ib29sZWFuT2Jq
ZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CcmFuZGVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnJhbmRlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CcmFuZGVkU3RydWN0dXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5B
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDUsNyArNDUsNyBA
QCBjbGFzcyBCcmFuZGVkU3RydWN0dXJlIGZpbmFsIDogcHVibGljIFN0CiBwdWJsaWM6CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2
bS5icmFuZGVkU3RydWN0dXJlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0
aW9uLCAiIik7CiAgICAgICAgIHJldHVybiAmdm0uY2xvbmVkQXJndW1lbnRzU3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2JqZWN0LmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKENvbnNvbGVPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRl
clNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1
c3RvbUdldHRlclNldHRlci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEN1c3RvbVNldHRlciA9IFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2UoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9ET01BdHRyaWJ1dGVHZXR0
ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
T01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gQ3VzdG9t
R2V0dGVyU2V0dGVyOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2UoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2Uu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiAmdm0uZGF0ZUluc3RhbmNlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTMyLDcgKzMyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoRGF0ZVByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAw
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uZXJyb3JJ
bnN0YW5jZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00
Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEVycm9yUHJvdG90eXBlQmFzZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmV2YWxFeGVjdXRhYmxlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmV4Y2VwdGlvblNwYWNlKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0cnlQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
aW5hbGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaW5hbGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShG
aW5hbGl6YXRpb25SZWdpc3RyeVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDQsOSArNDQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJ
bW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAg
ICAgICByZXR1cm4gJnZtLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkuc3BhY2U7CisgICAgICAg
IHJldHVybiAmdm0uZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKTsKICAgICB9CiAKICAgICBzdGF0
aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiB0
b3BMZXZlbEV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgSW50cmluc2ljIGludHJpbnNpYywg
Ym9vbCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uZnVuY3Rpb25SYXJlRGF0
YVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JGdW5j
dGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgot
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAgICBy
ZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
WXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShHZW5lcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNl
dHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRl
clNldHRlci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dCB8IFN0cnVj
dHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuICZ2bS5nZXR0ZXJTZXR0ZXJTcGFjZSgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOyAvLyBUaGlzIGlzIG5ldmVyIGFjY2Vzc2VkIGRpcmVjdGx5LCBz
aW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmthZ2Ugb24gc29tZSBjb21waWxlcnMuCiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25z
dGV4cHIgKFR5cGUgPT0gSGFzaFRhYmxlVHlwZTo6S2V5KQogICAgICAgICAgICAgcmV0dXJuIHZt
LnNldEJ1Y2tldFNwYWNlPG1vZGU+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
Q2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAo
QykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9
PSBzaXplb2YoSW50ZXJuYWxGdW5jdGlvbiksICJJbnRlcm5hbEZ1bmN0aW9uIHN1YmNsYXNzZXMg
dGhhdCBhZGQgZmllbGRzIG5lZWQgdG8gb3ZlcnJpZGUgc3Vic3BhY2VGb3I8PigpIik7CiAgICAg
ICAgIHJldHVybiAmdm0uaW50ZXJuYWxGdW5jdGlvblNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFu
V2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAy
MiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRs
Q29sbGF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKEludGxDb2xsYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5
IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
aW50bERhdGVUaW1lRm9ybWF0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5k
eUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsRGF0ZVRpbWVGb3Jt
YXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxh
eU5hbWVzLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEaXNwbGF5TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uaW50bERpc3BsYXlOYW1lc1NwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc1By
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsRGlzcGxh
eU5hbWVzUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1h
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0
Rm9ybWF0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMaXN0Rm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLmludGxMaXN0Rm9ybWF0U3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0
Rm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxMaXN0Rm9ybWF0UHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50
bExvY2FsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAy
MCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRs
TG9jYWxlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdv
bmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY0LDcg
KzE2NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bE51bWJlckZvcm1hdFNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSW50bE51bWJlckZvcm1hdFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFu
d2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTczLDcgKzczLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bE9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29u
ZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uaW50bFBsdXJh
bFJ1bGVzU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkK
LSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShJbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxh
dGl2ZVRpbWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLmludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2
ZVRpbWVGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVG
b3JtYXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSW50bFJlbGF0aXZlVGltZUZvcm1hdFByb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0uaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRl
cmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsU2VnbWVudEl0ZXJh
dG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRl
ci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLmludGxTZWdtZW50ZXJTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyUHJv
dG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50ZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsU2VnbWVudGVyUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHMuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQyLDcgKzQxLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsU2VnbWVudHNT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50c1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50c1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHNQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50
bFNlZ21lbnRzUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0
ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICZ2bS5hcnJheVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmFycmF5QnVmZmVy
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShK
U0FycmF5QnVmZmVyUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5SXRlcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0
Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmFycmF5SXRlcmF0b3JTcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXN5
bmNHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQy
LDcgKzQyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hc3luY0dlbmVyYXRvclNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uYmlnSW50U3BhY2UoKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
b3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWNfYXNzZXJ0KFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0hhc0luc3RhbmNl
LCAiIik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uYm91bmRGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSW1wbGVtZW50
c0hhc0luc3RhbmNlIHwgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmNhbGxl
ZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
dXN0b21HZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5jdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0
b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS5jdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXcuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBUeXBlZEFycmF5Q29udGVudFR5cGUgY29udGVudFR5cGUgPSBU
eXBlZEFycmF5Q29udGVudFR5cGU6Ok5vbmU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uZGF0YVZpZXdTcGFjZTxtb2Rl
PigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNEYXRhVmlld1Byb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9u
UmVnaXN0cnkuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3
ICs0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uZmluYWxpemF0aW9uUmVnaXN0cnlT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endh
cmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gK
ICAqCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRw
dHJfdCByYXJlRGF0YVRhZyA9IDB4MTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5mdW5jdGlvblNwYWNlKCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyYXRvci5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZtLmdlbmVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYwLDcgKzI2MCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBzd2l0Y2ggKEFkYXB0b3I6OnR5cGVWYWx1ZSkgewogICAgICAg
ICBjYXNlIFR5cGVJbnQ4OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUs
NyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZ2xvYmFsTGV4aWNhbEVudmly
b25tZW50U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjI5LDcgKzYyOSw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3Mg
bW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gdm0uZ2xvYmFsT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLm1hcFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGlu
dGVybmFsRmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6OmludGVybmFsRmllbGQoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5tYXBJdGVyYXRvclNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUxvYWRlci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShKU01vZHVsZUxvYWRlciwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFj
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5tb2R1bGVOYW1lc3BhY2VP
YmplY3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICByZXR1cm4gdm0uanNNb2R1bGVSZWNvcmRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS5uYXRpdmVTdGRGdW5jdGlvblNwYWNlPG1vZGU+KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU09OT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2Uu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDwyPjsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ucHJv
bWlzZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Byb21pc2VQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBl
bnVtZXJhdGlvbk1vZGVNYXNrID0gKEdlbmVyaWNNb2RlIDw8IDEpIC0gMTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0u
cHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyAr
MzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IE92ZXJyaWRl
c0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihK
U1Byb3h5KSk7CiAgICAgICAgIHJldHVybiAmdm0uanNQcm94eVNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDIxIElnYWxpYSBTLkwuCiAgKiBBdXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBp
Z2FsaWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDgsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnJlbW90ZUZ1bmN0aW9uU3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njcmlw
dEZldGNoUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1
c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2bS5zY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NyaXB0RmV0
Y2hlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Ny
aXB0RmV0Y2hlci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0
Myw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNjcmlw
dEZldGNoZXJTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGlj
OgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc2V0U3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVy
YXRvci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVi
bGljOgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW50ZXJuYWxGaWVsZChGaWVsZCBmaWVs
ZCkgeyByZXR1cm4gQmFzZTo6aW50ZXJuYWxGaWVsZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oZmll
bGQpKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLnNldEl0ZXJhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NvdXJjZUNvZGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zb3VyY2VDb2RlU3BhY2U8bW9kZT4oKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIC8vIFdlIHNwZWNpYWxpemUgdGhl
IHN0cmluZyBzdWJzcGFjZSB0byBnZXQgdGhlIGZhc3Rlc3QgcG9zc2libGUgc3dlZXAuIFRoaXMg
d291bGRuJ3QgYmUKICAgICAvLyBuZWNlc3NhcnkgaWYgSlNTdHJpbmcgZGlkbid0IGhhdmUgYSBk
ZXN0cnVjdG9yLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gJnZtLnN0cmluZ1NwYWNlKCk7CiAgICAgfQpAQCAtMjcyLDcgKzI3Miw3IEBAIGNsYXNzIEpT
Um9wZVN0cmluZyBmaW5hbCA6IHB1YmxpYyBKU1N0cmkKICAgICBmcmllbmQgY2xhc3MgSlNTdHJp
bmc7CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiAmdm0ucm9wZVN0cmluZ1NwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZ
dXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LnN0cmluZ0l0ZXJhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICsz
OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3
ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0
UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS53ZWFrT2JqZWN0UmVmU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNT
Y29wZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS53aXRoU2NvcGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5
cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoTWFwSXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKE1hcFByb3RvdHlwZSwgQmFzZSk7
CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0y
OSw3ICsyOSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShNYXRoT2JqZWN0LCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLm1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzMxLDcgQEAgcHJpdmF0ZToKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gRXJyb3JQcm90b3R5cGVCYXNlOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShOYXRpdmVFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmF0aXZlRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuICZ2bS5uYXRpdmVFeGVjdXRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dy
YXBwZXJPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICByZXR1cm4gJnZtLm51bWJlck9iamVjdFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBJc0lt
bXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShPYmplY3RQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1NSw2ICszNTUsNyBAQCBib29s
IGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIFwKICAgICB2KEdDTG9nTGV2ZWws
IGxvZ0dDLCBHQ0xvZ2dpbmc6Ok5vbmUsIE5vcm1hbCwgImRlYnVnZ2luZyBvcHRpb24gdG8gbG9n
IEdDIGFjdGl2aXR5ICgwID0gTm9uZSwgMSA9IEJhc2ljLCAyID0gVmVyYm9zZSkiKSBcCiAgICAg
dihCb29sLCB1c2VHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VH
bG9iYWxHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZ2NBdEVuZCwg
ZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBqc2MgQ0xJIHdpbGwgZG8gYSBHQyBiZWZvcmUg
ZXhpdGluZyIpIFwKICAgICB2KEJvb2wsIGZvcmNlR0NTbG93UGF0aHMsIGZhbHNlLCBOb3JtYWws
ICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9ucyBkb3duIHRo
ZWlyIHNsb3cgcGF0aHMuIikgXAogICAgIHYoQm9vbCwgZm9yY2VEaWREZWZlckdDV29yaywgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIERlZmVyR0MgZGVzdHJ1Y3Rp
b25zIHRvIHBlcmZvcm0gYSBHQy4iKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOSw5ICszOSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAmdm0ucHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSgpLnNwYWNlOworICAgICAg
ICByZXR1cm4gJnZtLnByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKTsKICAgICB9CiAKICAgICBzdGF0
aWMgUHJvZ3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTI3LDcg
KzEyNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAm
dm0ucHJvcGVydHlUYWJsZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3Rv
dHlwZSB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IFByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5wcm94eU9iamVjdFNwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eVJldm9rZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLnByb3h5UmV2b2tlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFJlZmxlY3RPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDcsNyArNDcs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuICZ2bS5yZWdFeHBTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzMsNyArMzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCFDZWxsVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiwgIiIp
OwogICAgICAgICByZXR1cm4gJnZtLnJlZ0V4cE9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzMxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShSZWdFeHBQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90
b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWxleGV5IFNodmF5a2EgPHNodmFp
a2FsZXNoQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoUmVnRXhwU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJp
dmF0ZToKIAogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCFDZWxsVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiwgIiIp
OwogICAgICAgICByZXR1cm4gJnZtLnNjb3BlZEFyZ3VtZW50c1NwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxl
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOCw3ICsxMDgsNyBA
QCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmNsZWFyQ29kZShJc29DZWxsCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIEFTU0VSVCgmVk06OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNl
KCkpID09ICZjbGVhcmFibGVDb2RlU2V0KTsKKyAgICBBU1NFUlQoJkhlYXA6OlNwYWNlQW5kU2V0
OjpzZXRGb3IoKnN1YnNwYWNlKCkpID09ICZjbGVhcmFibGVDb2RlU2V0KTsKICAgICBjbGVhcmFi
bGVDb2RlU2V0LnJlbW92ZSh0aGlzKTsKIH0KIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgU2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoVk0mIHYKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgYXV0byYgY2xlYXJhYmxlQ29kZVNldCA9IFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpz
dWJzcGFjZSgpKTsKKyAgICBhdXRvJiBjbGVhcmFibGVDb2RlU2V0ID0gSGVhcDo6U3BhY2VBbmRT
ZXQ6OnNldEZvcigqc3Vic3BhY2UoKSk7CiAgICAgaWYgKGhhc0NsZWFyYWJsZUNvZGUodm0pKQog
ICAgICAgICBjbGVhcmFibGVDb2RlU2V0LmFkZCh0aGlzKTsKICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBl
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nl
dEl0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAg
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKFNldEl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTZXRQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93UmVhbG1PYmplY3QuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93UmVhbG1PYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcg
KzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zaGFkb3dSZWFsbVNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hh
ZG93UmVhbG1Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaGFkb3dSZWFsbVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dSZWFsbVByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEg
Uy5MLgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShTaGFkb3dSZWFsbVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNl
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZh
bEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTU2NvcGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0uc3RyaWN0RXZhbEFjdGl2YXRpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzYsNyArMzYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTdHJpbmdJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7
CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0
IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiAmdm0uc3RyaW5nT2JqZWN0U3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIH5TdHJ1Y3R1cmUoKTsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJ1
Y3R1cmVTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0
LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICZ2bS5zdHJ1Y3R1cmVDaGFpblNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2UoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2wuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zeW1ib2xTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9i
amVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnN5bWJvbE9iamVjdFNwYWNlPG1vZGU+KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShTeW1ib2xQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1NCw3ICs0NTQs
NyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBXVEY6Okl0ZXJhdG9yUmFuZ2U8dHlwZW5hbWUgUHJp
dmF0ZU5hbWVFbnZpcm9ubWVudDo6aXRlcmF0b3I+IFByaXZhdGVOYW1lSXRlcmF0b3JSYW5nZTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gJnZtLnN5bWJvbFRhYmxlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhci5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gdm0udGVtcG9yYWxDYWxlbmRhclNwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRh
clByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1By
b3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxDYWxl
bmRhclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
RHVyYXRpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzUsNyBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0udGVtcG9y
YWxEdXJhdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnQuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICs0MCw3IEBAIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1w
b3JhbEluc3RhbnRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5zdGFudFByb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bEluc3RhbnRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxJ
bnN0YW50UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE5vdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsTm93
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsTm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVt
cG9yYWxOb3csIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3Qu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICog
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShUZW1wb3JhbE9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxQbGFp
blRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbFBsYWluVGltZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsUGxhaW5UaW1lU3Bh
Y2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbFBsYWluVGltZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsUGxhaW5UaW1l
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShUZW1wb3JhbFBsYWluVGltZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxUaW1lWm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLnRlbXBvcmFsVGltZVpvbmVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRp
bWVab25lUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsVGltZVpvbmVQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4
LDYgKzIwOCw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwKICAg
ICAsIG1fcmFuZG9tKE9wdGlvbnM6OnNlZWRPZlZNUmFuZG9tRm9yRnV6emVyKCkgPyBPcHRpb25z
OjpzZWVkT2ZWTVJhbmRvbUZvckZ1enplcigpIDogY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIoKSkKICAgICAsIG1faW50ZWdyaXR5UmFuZG9tKCp0aGlzKQogICAgICwgaGVhcCgqdGhpcywg
aGVhcFR5cGUpCisgICAgLCBjbGllbnRIZWFwKGhlYXApCiAgICAgLCB2bVR5cGUodm1UeXBlKQog
ICAgICwgY2xpZW50RGF0YShudWxscHRyKQogICAgICwgdG9wRW50cnlGcmFtZShudWxscHRyKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMs
NiArMzMzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIEhlYXAgaGVhcDsKKyAgICBHQ0Ns
aWVudDo6SGVhcCBjbGllbnRIZWFwOwogCiAgICAgY29uc3QgSGVhcENlbGxUeXBlJiBjZWxsSGVh
cENlbGxUeXBlKCkgeyByZXR1cm4gaGVhcC5jZWxsSGVhcENlbGxUeXBlOyB9CiAgICAgY29uc3Qg
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUmIGRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSgpIHsgcmV0dXJuIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOyB9
OwpAQCAtMzQ5LDQyICszNTAsNDIgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgQ29tcGxl
dGVTdWJzcGFjZSYgdmFyaWFibGVTaXplZENlbGxTcGFjZSgpIHsgcmV0dXJuIGhlYXAudmFyaWFi
bGVTaXplZENlbGxTcGFjZTsgfQogICAgIEFMV0FZU19JTkxJTkUgQ29tcGxldGVTdWJzcGFjZSYg
ZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoKSB7IHJldHVybiBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dFNwYWNlOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBhcnJheVNwYWNlKCkg
eyByZXR1cm4gaGVhcC5hcnJheVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFj
ZSYgYmlnSW50U3BhY2UoKSB7IHJldHVybiBoZWFwLmJpZ0ludFNwYWNlOyB9Ci0gICAgQUxXQVlT
X0lOTElORSBJc29TdWJzcGFjZSYgY2FsbGVlU3BhY2UoKSB7IHJldHVybiBoZWFwLmNhbGxlZVNw
YWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgY2xvbmVkQXJndW1lbnRzU3Bh
Y2UoKSB7IHJldHVybiBoZWFwLmNsb25lZEFyZ3VtZW50c1NwYWNlOyB9Ci0gICAgQUxXQVlTX0lO
TElORSBJc29TdWJzcGFjZSYgY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2UoKSB7IHJldHVybiBoZWFw
LmN1c3RvbUdldHRlclNldHRlclNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFj
ZSYgZGF0ZUluc3RhbmNlU3BhY2UoKSB7IHJldHVybiBoZWFwLmRhdGVJbnN0YW5jZVNwYWNlOyB9
Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVy
U3BhY2UoKSB7IHJldHVybiBoZWFwLmRvbUF0dHJpYnV0ZUdldHRlclNldHRlclNwYWNlOyB9Ci0g
ICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgZXhjZXB0aW9uU3BhY2UoKSB7IHJldHVybiBo
ZWFwLmV4Y2VwdGlvblNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgZXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5leGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBmdW5j
dGlvblNwYWNlKCkgeyByZXR1cm4gaGVhcC5mdW5jdGlvblNwYWNlOyB9Ci0gICAgQUxXQVlTX0lO
TElORSBJc29TdWJzcGFjZSYgZ2V0dGVyU2V0dGVyU3BhY2UoKSB7IHJldHVybiBoZWFwLmdldHRl
clNldHRlclNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgZ2xvYmFsTGV4
aWNhbEVudmlyb25tZW50U3BhY2UoKSB7IHJldHVybiBoZWFwLmdsb2JhbExleGljYWxFbnZpcm9u
bWVudFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgaW50ZXJuYWxGdW5j
dGlvblNwYWNlKCkgeyByZXR1cm4gaGVhcC5pbnRlcm5hbEZ1bmN0aW9uU3BhY2U7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBqc1Byb3h5U3BhY2UoKSB7IHJldHVybiBoZWFwLmpz
UHJveHlTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIG5hdGl2ZUV4ZWN1
dGFibGVTcGFjZSgpIHsgcmV0dXJuIGhlYXAubmF0aXZlRXhlY3V0YWJsZVNwYWNlOyB9Ci0gICAg
QUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgbnVtYmVyT2JqZWN0U3BhY2UoKSB7IHJldHVybiBo
ZWFwLm51bWJlck9iamVjdFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYg
cGxhaW5PYmplY3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAucGxhaW5PYmplY3RTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHByb21pc2VTcGFjZSgpIHsgcmV0dXJuIGhlYXAu
cHJvbWlzZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgcHJvcGVydHlO
YW1lRW51bWVyYXRvclNwYWNlKCkgeyByZXR1cm4gaGVhcC5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBwcm9wZXJ0eVRhYmxlU3Bh
Y2UoKSB7IHJldHVybiBoZWFwLnByb3BlcnR5VGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIHJlZ0V4cFNwYWNlKCkgeyByZXR1cm4gaGVhcC5yZWdFeHBTcGFjZTsg
fQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHJlZ0V4cE9iamVjdFNwYWNlKCkgeyBy
ZXR1cm4gaGVhcC5yZWdFeHBPYmplY3RTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vi
c3BhY2UmIHJvcGVTdHJpbmdTcGFjZSgpIHsgcmV0dXJuIGhlYXAucm9wZVN0cmluZ1NwYWNlOyB9
Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgc2NvcGVkQXJndW1lbnRzU3BhY2UoKSB7
IHJldHVybiBoZWFwLnNjb3BlZEFyZ3VtZW50c1NwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSYgc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlKCkgeyByZXR1cm4gaGVhcC5zcGFy
c2VBcnJheVZhbHVlTWFwU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBz
dHJpbmdTcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3RyaW5nU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5M
SU5FIElzb1N1YnNwYWNlJiBzdHJpbmdPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3RyaW5n
T2JqZWN0U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVD
aGFpblNwYWNlKCkgeyByZXR1cm4gaGVhcC5zdHJ1Y3R1cmVDaGFpblNwYWNlOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RydWN0dXJlUmFyZURhdGFTcGFjZSgpIHsgcmV0dXJu
IGhlYXAuc3RydWN0dXJlUmFyZURhdGFTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vi
c3BhY2UmIHN0cnVjdHVyZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5zdHJ1Y3R1cmVTcGFjZTsgfQot
ICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZSgpIHsg
cmV0dXJuIGhlYXAuYnJhbmRlZFN0cnVjdHVyZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSYgc3ltYm9sVGFibGVTcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3ltYm9sVGFibGVT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBhcnJheVNw
YWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5hcnJheVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGJpZ0ludFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5iaWdJbnRTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBjYWxsZWVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuY2FsbGVlU3BhY2U7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY2xvbmVkQXJndW1lbnRzU3BhY2Uo
KSB7IHJldHVybiBjbGllbnRIZWFwLmNsb25lZEFyZ3VtZW50c1NwYWNlOyB9CisgICAgQUxXQVlT
X0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGN1c3RvbUdldHRlclNldHRlclNwYWNlKCkg
eyByZXR1cm4gY2xpZW50SGVhcC5jdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBkYXRlSW5zdGFuY2VTcGFjZSgpIHsgcmV0
dXJuIGNsaWVudEhlYXAuZGF0ZUluc3RhbmNlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSYgZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2UoKSB7IHJl
dHVybiBjbGllbnRIZWFwLmRvbUF0dHJpYnV0ZUdldHRlclNldHRlclNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGV4Y2VwdGlvblNwYWNlKCkgeyByZXR1
cm4gY2xpZW50SGVhcC5leGNlcHRpb25TcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlJiBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UoKSB7IHJldHVy
biBjbGllbnRIZWFwLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBmdW5jdGlvblNwYWNlKCkgeyByZXR1cm4g
Y2xpZW50SGVhcC5mdW5jdGlvblNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIGdldHRlclNldHRlclNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5nZXR0
ZXJTZXR0ZXJTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZ2xv
YmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSYgaW50ZXJuYWxGdW5jdGlvblNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5pbnRlcm5hbEZ1bmN0aW9uU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSYganNQcm94eVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5qc1Byb3h5U3Bh
Y2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgbmF0aXZlRXhl
Y3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5uYXRpdmVFeGVjdXRhYmxlU3BhY2U7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgbnVtYmVyT2JqZWN0
U3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLm51bWJlck9iamVjdFNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHBsYWluT2JqZWN0U3BhY2UoKSB7IHJl
dHVybiBjbGllbnRIZWFwLnBsYWluT2JqZWN0U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSYgcHJvbWlzZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5w
cm9taXNlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYg
cHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSYgcHJvcGVydHlUYWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wcm9wZXJ0
eVRhYmxlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYg
cmVnRXhwU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnJlZ0V4cFNwYWNlOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJlZ0V4cE9iamVjdFNwYWNlKCkgeyBy
ZXR1cm4gY2xpZW50SGVhcC5yZWdFeHBPYmplY3RTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiByb3BlU3RyaW5nU3BhY2UoKSB7IHJldHVybiBjbGllbnRI
ZWFwLnJvcGVTdHJpbmdTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlJiBzY29wZWRBcmd1bWVudHNTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc2NvcGVk
QXJndW1lbnRzU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSYgc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zcGFyc2VB
cnJheVZhbHVlTWFwU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSYgc3RyaW5nU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnN0cmluZ1NwYWNlOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cmluZ09iamVjdFNwYWNl
KCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJpbmdPYmplY3RTcGFjZTsgfQorICAgIEFMV0FZU19J
TkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVDaGFpblNwYWNlKCkgeyByZXR1
cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVDaGFpblNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cnVjdHVyZVJhcmVEYXRhU3BhY2UoKSB7IHJldHVybiBj
bGllbnRIZWFwLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSYgc3RydWN0dXJlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFw
LnN0cnVjdHVyZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuYnJhbmRlZFN0
cnVjdHVyZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2Um
IHN5bWJvbFRhYmxlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnN5bWJvbFRhYmxlU3BhY2U7
IH0KIAogI2RlZmluZSBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hbWUpIFwK
ICAgICB0ZW1wbGF0ZTxTdWJzcGFjZUFjY2VzcyBtb2RlPiBcCi0gICAgQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSogbmFtZSgpIHsgcmV0dXJuIGhlYXAubmFtZTxtb2RlPigpOyB9CisgICAgQUxX
QVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIG5hbWUoKSB7IHJldHVybiBjbGllbnRI
ZWFwLm5hbWU8bW9kZT4oKTsgfQogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFwaVdyYXBwZXJPYmplY3RTcGFjZSkKQEAg
LTQ4OSwyNCArNDkwLDE4IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UpCiAjZW5kaWYKIAotI3Vu
ZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIKLQogICAgIEFMV0FZU19JTkxJ
TkUgSXNvQ2VsbFNldCYgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29uc3RyYWludHMo
KSB7IHJldHVybiBoZWFwLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRz
OyB9CiAgICAgQUxXQVlTX0lOTElORSBJc29DZWxsU2V0JiBleGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlc1dpdGhGaW5hbGl6ZXJzKCkgeyByZXR1cm4gaGVhcC5leGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlc1dpdGhGaW5hbGl6ZXJzOyB9CiAKLSNkZWZpbmUgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RF
RklORV9NRU1CRVIobmFtZSkgXAotICAgIHRlbXBsYXRlPFN1YnNwYWNlQWNjZXNzIG1vZGU+IFwK
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlKiBuYW1lKCkgeyByZXR1cm4gaGVhcC5uYW1l
PG1vZGU+KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgY29k
ZUJsb2NrU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmNvZGVCbG9ja1NwYWNlOyB9CiAKLSAg
ICB1c2luZyBTcGFjZUFuZFNldCA9IEhlYXA6OlNwYWNlQW5kU2V0OwotICAgIEFMV0FZU19JTkxJ
TkUgU3BhY2VBbmRTZXQmIGNvZGVCbG9ja1NwYWNlKCkgeyByZXR1cm4gaGVhcC5jb2RlQmxvY2tT
cGFjZTsgfQotCi0gICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVIoZXZhbEV4
ZWN1dGFibGVTcGFjZSkKLSAgICBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUiht
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoZXZhbEV4ZWN1dGFibGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCisjdW5kZWYgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUgogCi0gICAgQUxXQVlTX0lOTElORSBTcGFj
ZUFuZFNldCYgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLmZ1bmN0aW9u
RXhlY3V0YWJsZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBTcGFjZUFuZFNldCYgcHJvZ3Jh
bUV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGhlYXAucHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsg
fQotICAgIEFMV0FZU19JTkxJTkUgU3BhY2VBbmRTZXQmIHVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZnVuY3Rpb25FeGVj
dXRhYmxlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
OyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb2dyYW1FeGVj
dXRhYmxlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLnByb2dyYW1FeGVjdXRhYmxlU3BhY2U7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgdW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAudW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZTsgfQogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRh
KiBjbGllbnREYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
TWFwSW1wbC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgyLDcgKzI4Miw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBpZiBjb25zdGV4cHIgKGlzV2Vha01hcCgpKQogICAgICAgICAgICAgcmV0dXJuIHZtLndl
YWtNYXBTcGFjZTxtb2RlPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWFrTWFwUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3Rv
dHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0
LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYWtPYmplY3RSZWZQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
V2Vha1NldFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0Nh
bGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtSUNDYWxsZWUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAs
NyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2FsbGVlOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzVG9X
YXNtSUNDYWxsZWVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNXZWJBc3NlbWJseSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNl
cHRpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2Vi
QXNzZW1ibHlFeGNlcHRpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlHbG9i
YWxTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlJbnN0YW5jZVNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseU1lbW9yeVNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS53ZWJBc3NlbWJseU1vZHVsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseVRh
YmxlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiB2bS53ZWJBc3NlbWJseVRhZ1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlG
dW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUdsb2JhbFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJs
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUluc3RhbmNlUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdl
YkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLCBCYXNlKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2Vt
Ymx5UnVudGltZUVycm9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZTxtb2RlPigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjA4Niw2ICsyMDg2
LDcgQEAgc2V0KE1BS0VfTkFNRVNfREVQRU5ERU5DSUVTCiApCiBzZXQoU1VQUExFTUVOVEFMX0RF
UEVOREVOQ1lfRklMRSAke1dlYkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vc3VwcGxlbWVudGFs
X2RlcGVuZGVuY3kudG1wKQogc2V0KElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUgJHtXZWJDb3Jl
X0RFUklWRURfU09VUkNFU19ESVJ9L0RPTUlzb1N1YnNwYWNlcy5oKQorc2V0KENMSUVOVF9JU09f
U1VCU1BBQ0VTX0hFQURFUl9GSUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9ET01D
bGllbnRJc29TdWJzcGFjZXMuaCkKIHNldChDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEUgJHtXZWJD
b3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0RPTUNvbnN0cnVjdG9ycy5oKQogc2V0KFdJTkRPV19D
T05TVFJVQ1RPUlNfRklMRSAke1dlYkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vRE9NV2luZG93
Q29uc3RydWN0b3JzLmlkbCkKIHNldChXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklM
RSAke1dlYkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnMuaWRsKQpAQCAtMjI3NCw5ICsyMjc1LDEwIEBAIEdFTkVSQVRFX0JJTkRJTkdTKFdlYkNv
cmVCaW5kaW5ncwogICAgIEdFTkVSQVRPUiBKUwogICAgIFNVUFBMRU1FTlRBTF9ERVBGSUxFICR7
U1VQUExFTUVOVEFMX0RFUEVOREVOQ1lfRklMRX0KICAgICBQUF9FWFRSQV9PVVRQVVQKLSAgICAk
e0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEV9ICR7Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFfSAk
e1dJTkRPV19DT05TVFJVQ1RPUlNfRklMRX0gJHtXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RP
UlNfRklMRX0gJHtTSEFET1dSRUFMTUdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfSAke0RF
RElDQVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfQorICAgICR7SVNPX1NV
QlNQQUNFU19IRUFERVJfRklMRX0gJHtDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRX0g
JHtDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEV9ICR7V0lORE9XX0NPTlNUUlVDVE9SU19GSUxFfSAk
e1dPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfSAke1NIQURPV1JFQUxNR0xPQkFM
U0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEV9ICR7REVESUNBVEVEV09SS0VSR0xPQkFMU0NPUEVfQ09O
U1RSVUNUT1JTX0ZJTEV9CiAgICAgUFBfRVhUUkFfQVJHUwogICAgICAgICAtLWlzb1N1YnNwYWNl
c0hlYWRlckZpbGUgJHtJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFfQorICAgICAgICAtLWNsaWVu
dElTT1N1YnNwYWNlc0hlYWRlckZpbGUgJHtDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklM
RX0KICAgICAgICAgLS1jb25zdHJ1Y3RvcnNIZWFkZXJGaWxlICR7Q09OU1RSVUNUT1JTX0hFQURF
Ul9GSUxFfQogICAgICAgICAtLXdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgJHtXSU5ET1dfQ09OU1RS
VUNUT1JTX0ZJTEV9CiAgICAgICAgIC0td29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICR7V09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEV9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJ
KHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJD
b3JlL0NvbG9yRGF0YS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmgKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0RPTUNvbnN0cnVjdG9ycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9ET01Jc29TdWJzcGFjZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvRE9NSklUQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTIwNzYsNiArMjA3Niw3
IEBAIEpTX0JJTkRJTkdTX1NDUklQVFMgPSAkKENPTU1PTl9CSU5ESU5HU18KIFNVUFBMRU1FTlRB
TF9ERVBFTkRFTkNZX0ZJTEUgPSBTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMudHh0CiBTVVBQTEVN
RU5UQUxfTUFLRUZJTEVfREVQUyA9IFN1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAKIElTT19T
VUJTUEFDRVNfSEVBREVSX0ZJTEUgPSBET01Jc29TdWJzcGFjZXMuaAorQ0xJRU5UX0lTT19TVUJT
UEFDRVNfSEVBREVSX0ZJTEUgPSBET01DbGllbnRJc29TdWJzcGFjZXMuaAogQ09OU1RSVUNUT1JT
X0hFQURFUl9GSUxFID0gRE9NQ29uc3RydWN0b3JzLmgKIFdJTkRPV19DT05TVFJVQ1RPUlNfRklM
RSA9IERPTVdpbmRvd0NvbnN0cnVjdG9ycy5pZGwKIFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVD
VE9SU19GSUxFID0gV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCkBAIC0yMDkyLDYg
KzIwOTMsNyBAQCBJRExfSU5URVJNRURJQVRFX0ZJTEVTID0gXAogICAgICQoU1VQUExFTUVOVEFM
X01BS0VGSUxFX0RFUFMpIFwKICAgICAkKFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUpIFwK
ICAgICAkKElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUpIFwKKyAgICAkKENMSUVOVF9JU09fU1VC
U1BBQ0VTX0hFQURFUl9GSUxFKSBcCiAgICAgJChDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEUpIFwK
ICAgICAkKFdJTkRPV19DT05TVFJVQ1RPUlNfRklMRSkgXAogICAgICQoV09SS0VSR0xPQkFMU0NP
UEVfQ09OU1RSVUNUT1JTX0ZJTEUpIFwKQEAgLTIxMDYsNyArMjEwOCw3IEBAIElETF9JTlRFUk1F
RElBVEVfUEFUVEVSTlMgPSAkKHN1YnN0IC4sJSwKIAogJChJRExfSU5URVJNRURJQVRFX1BBVFRF
Uk5TKSA6ICQoUFJFUFJPQ0VTU19JRExTX1NDUklQVFMpICQoSURMX0FUVFJJQlVURVNfRklMRSkg
JChKU19CSU5ESU5HX0lETFMpICQoRkVBVFVSRV9BTkRfUExBVEZPUk1fREVGSU5FX0RFUEVOREVO
Q0lFUykKIAkkKHNoZWxsIGVjaG8gJChKU19CSU5ESU5HX0lETFMpIHwgdHIgIiAiICJcbiIgPiBJ
RExGaWxlTmFtZXNMaXN0LnR4dCkKLQkkKFBFUkwpICQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0
cy9wcmVwcm9jZXNzLWlkbHMucGwgLS1kZWZpbmVzICIkKEZFQVRVUkVfQU5EX1BMQVRGT1JNX0RF
RklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0taWRsRmlsZU5hbWVzTGlzdCBJRExGaWxlTmFt
ZXNMaXN0LnR4dCAtLWlkbEF0dHJpYnV0ZXNGaWxlICQoSURMX0FUVFJJQlVURVNfRklMRSkgLS1z
dXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSAkKFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUp
IC0taXNvU3Vic3BhY2VzSGVhZGVyRmlsZSAkKElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUpIC0t
Y29uc3RydWN0b3JzSGVhZGVyRmlsZSAkKENPTlNUUlVDVE9SU19IRUFERVJfRklMRSkgLS13aW5k
b3dDb25zdHJ1Y3RvcnNGaWxlICQoV0lORE9XX0NPTlNUUlVDVE9SU19GSUxFKSAtLXdvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9S
U19GSUxFKSAtLXNoYWRvd1JlYWxtR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0hBRE9X
UkVBTE1HTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1kZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChERURJQ0FURURXT1JLRVJHTE9CQUxTQ09QRV9DT05T
VFJVQ1RPUlNfRklMRSkgLS1zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoU0VSVklDRVdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNoYXJlZFdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNIQVJFRFdPUktFUkdMT0JBTFNDT1BF
X0NPTlNUUlVDVE9SU19GSUxFKSAtLXdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUg
JChXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tcGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoUEFJTlRXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RS
VUNUT1JTX0ZJTEUpIC0tYXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQo
QVVESU9XT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc3VwcGxlbWVudGFs
TWFrZWZpbGVEZXBzICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpCisJJChQRVJMKSAkKFdl
YkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsIC0tZGVmaW5lcyAiJChG
RUFUVVJFX0FORF9QTEFURk9STV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWlkbEZp
bGVOYW1lc0xpc3QgSURMRmlsZU5hbWVzTGlzdC50eHQgLS1pZGxBdHRyaWJ1dGVzRmlsZSAkKElE
TF9BVFRSSUJVVEVTX0ZJTEUpIC0tc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUgJChTVVBQTEVN
RU5UQUxfREVQRU5ERU5DWV9GSUxFKSAtLWlzb1N1YnNwYWNlc0hlYWRlckZpbGUgJChJU09fU1VC
U1BBQ0VTX0hFQURFUl9GSUxFKSAtLWNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUgJChDTElF
TlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSkgLS1jb25zdHJ1Y3RvcnNIZWFkZXJGaWxlICQo
Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFKSAtLXdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgJChXSU5E
T1dfQ09OU1RSVUNUT1JTX0ZJTEUpIC0td29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc2hhZG93UmVhbG1HbG9i
YWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChTSEFET1dSRUFMTUdMT0JBTFNDT1BFX0NPTlNUUlVD
VE9SU19GSUxFKSAtLWRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAk
KERFRElDQVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChTRVJWSUNFV09SS0VSR0xPQkFMU0NP
UEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc2hhcmVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnNGaWxlICQoU0hBUkVEV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0td29y
a2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFdPUktMRVRHTE9CQUxTQ09QRV9DT05T
VFJVQ1RPUlNfRklMRSkgLS1wYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUg
JChQQUlOVFdPUktMRVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1hdWRpb1dvcmts
ZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChBVURJT1dPUktMRVRHTE9CQUxTQ09QRV9D
T05TVFJVQ1RPUlNfRklMRSkgLS1zdXBwbGVtZW50YWxNYWtlZmlsZURlcHMgJChTVVBQTEVNRU5U
QUxfTUFLRUZJTEVfREVQUykKIAogIwogIyBFbWl0IHRoZSBydWxlcyB0byBnZW5lcmF0ZSBiaW5k
aW5ncyBmcm9tIElETCBmaWxlcy4gTm90ZSB0aGF0IHRoZXJlIGFyZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1
dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotRE9NR0NPdXRwdXRDb25z
dHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xp
ZW50RGF0YSkKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9NR0NPdXRwdXRDb25zdHJhaW50KFZN
JiB2bSwgSlNIZWFwRGF0YSYgaGVhcERhdGEpCiAgICAgOiBNYXJraW5nQ29uc3RyYWludCgiRG9t
byIsICJET00gT3V0cHV0IiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwgQ29u
c3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBDb25zdHJhaW50UGFyYWxsZWxpc206OlBh
cmFsbGVsKQogICAgICwgbV92bSh2bSkKLSAgICAsIG1fY2xpZW50RGF0YShjbGllbnREYXRhKQor
ICAgICwgbV9oZWFwRGF0YShoZWFwRGF0YSkKICAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24o
dm0uaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpKQogewogfQpAQCAtNTksNyArNTksNyBA
QCB2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJCiAgICAgCiAgICAgbV9s
YXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKICAg
ICAKLSAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICBt
X2hlYXBEYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAoU3Vi
c3BhY2UmIHN1YnNwYWNlKSB7CiAgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoVmlzaXRvciYg
dmlzaXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJr
UmVhc29uOjpET01HQ091dHB1dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01HQ091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMywxMiArMzMsMTIgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSlNWTUNsaWVudERhdGE7CitjbGFzcyBKU0hlYXBEYXRhOwogCiBjbGFzcyBE
T01HQ091dHB1dENvbnN0cmFpbnQgOiBwdWJsaWMgSlNDOjpNYXJraW5nQ29uc3RyYWludCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRE9NR0NPdXRwdXRDb25z
dHJhaW50KEpTQzo6Vk0mLCBKU1ZNQ2xpZW50RGF0YSYpOworICAgIERPTUdDT3V0cHV0Q29uc3Ry
YWludChKU0M6OlZNJiwgSlNIZWFwRGF0YSYpOwogICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQo
KTsKICAgICAKIHByb3RlY3RlZDoKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CiAK
ICAgICBKU0M6OlZNJiBtX3ZtOwotICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7Cisg
ICAgSlNIZWFwRGF0YSYgbV9oZWFwRGF0YTsKICAgICB1aW50NjRfdCBtX2xhc3RFeGVjdXRpb25W
ZXJzaW9uOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Bc3lu
Y0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Bc3luY0l0ZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQXN5bmNJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcg
QEAgcHVibGljOgogICAgIHVzaW5nIERPTVdyYXBwZWQgPSB0eXBlbmFtZSBKU1dyYXBwZXI6OkRP
TVdyYXBwZWQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEpTRE9NQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJr
aXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2
OGsub3JnPgogICoKQEAgLTM5LDcgKzM5LDcgQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2U6OnZpc2l0QwogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlKTsKIAotSlNDOjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpLT5kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0
b3JCYXNlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yOCw3ICsyOCw3
IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNET01Db25zdHJ1Y3RvckJhc2U7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2Yo
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKENlbGxUeXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Up
OwpAQCAtNDgsNyArNDgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVu
Y3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwogCiBwcml2YXRlOgotICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsK
IAogICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVu
Y3Rpb247CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1
Y3RvckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykg
MjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTQ2LDcgKzQ2LDcg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxUaHJvd1R5cGVFcgogICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzTnVsbCgpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFj
ZSogSlNET01Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0RPTUNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQ29uc3RydWN0b3JTcGFjZSgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnN0cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpT
RE9NQ29uc3RydWN0b3JCYXNlKSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKENlbGxUeXBlLCBKU0RPTUNvbnN0cnVjdG9yQmFzZSk7CkBAIC00NCw3ICs0NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYpOwogCiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oQmFzZTo6Z2xvYmFsT2Jq
ZWN0KCkpOyB9CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdCgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0
b3JOb3RDYWxsYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQWxl
eGV5IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mLCBjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlw
ZSkgPT0gc2l6ZW9mKEpTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZSkpOwogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShDZWxsVHlwZSwgSlNET01Db25zdHJ1Y3Rv
ck5vdENhbGxhYmxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0
ZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQ2Fub24sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgRE9NV3JhcHBlZCA9IHR5cGVuYW1lIEpTV3JhcHBlcjo6RE9NV3JhcHBlZDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAg
ICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNET01JdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM4LDcgKzEzOCw3IEBAIGJvb2wgSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpkZWZp
bmVPd25Qcm8KICAgICByZXR1cm4gdHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCBzaG91bGRUaHJvdywgIkRlZmluaW5nIGEgcHJvcGVydHkgb24gYSBXaW5kb3dQcm9wZXJ0aWVz
IG9iamVjdCBpcyBub3QgYWxsb3dlZC4iX3MpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU0RP
TVdpbmRvd1Byb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSktPmRvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVz
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93UHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNl
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAg
ICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChDZWxsVHlwZTo6ZGVzdHJveSA9PSBK
U0M6OkpTQ2VsbDo6ZGVzdHJveSwgIkpTRE9NV2luZG93UHJvcGVydGllcyBpcyBub3QgZGVzdHJ1
Y3RpYmxlIGFjdHVhbGx5Iik7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwpA
QCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpKU0dsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywyNyArNDcsMzkgQEAg
Y29uc3QgSlNDOjpDbGFzc0luZm8gSlNGaWxlU3lzdGVtRGlyZWN0bwogdGVtcGxhdGU8PgogY29u
c3QgSlNDOjpDbGFzc0luZm8gSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIkRpcmVjdG9yeSBIYW5kbGUgSXRlcmF0b3IiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yUHJvdG90eXBlKSB9OwogCi1Jc29TdWJzcGFjZSogSlNGaWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCitH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKQogewotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGFwaUxv
Y2tlcih2bSk7CisgICAgSlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7CiAgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGlmIChhdXRvKiBzcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yU3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNGaWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I+IHx8ICFKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3Rv
cnlIYW5kbGVJdGVyYXRvcj4pCi0gICAgICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UobWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpT
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKSk7Ci0gICAgZWxzZQotICAgICAgICBj
bGllbnREYXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFw
Q2VsbFR5cGUoKSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IpKTsKLSAgICBh
dXRvKiBzcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2UoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRhLmZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkpCisgICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IGhlYXBEYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7
CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Ip
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yKTsKKyAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSkpOworCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNw
YWNlOworICAgIH0KKworICAgIGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xpZW50OjpJc29T
dWJzcGFjZSgqc3BhY2UpOworICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
Y2xpZW50U3BhY2UpKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2U7CiB9CiAKIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yX29uUHJv
bWlzZVNldHRsZWRCb2R5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IqIGNhc3RlZFRoaXMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMTMgKzQ2LDEzIEBAIHB1YmxpYzoKICAgICBERUNM
QVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09
IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYpOwogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNl
cmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlv
bkdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQg
SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpmaW4KICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiB9CiAKLUlzb1N1YnNwYWNlKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmpl
Y3Q6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTSURC
U2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKIHsKICAg
ICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmlk
YlNlcmlhbGl6YXRpb25TcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFs
aXphdGlvbkdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEzICszNiwxMyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCogY3JlYXRlKEpT
Qzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxET01XcmFwcGVyV29ybGQ+JiYpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIERFQ0xBUkVfSU5GTzsK
ICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2luZG93UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2luZG93UHJveHkuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Nyw3
ICsxNzcsNyBAQCBXaW5kb3dQcm94eSogSlNXaW5kb3dQcm94eTo6dG9XcmFwcGVkKFZNCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTV2luZG93UHJveHk6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1dpbmRvd1Byb3h5OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT53aW5kb3dQcm94
eVNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1By
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQ
cm94eS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dpbmRvd1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pIHsgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7IH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4gc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkgeyBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsgfQogCiAgICAgc3RhdGljIEpTV2luZG93UHJveHkm
IGNyZWF0ZShKU0M6OlZNJiwgQWJzdHJhY3RET01XaW5kb3cmLCBET01XcmFwcGVyV29ybGQmKTsK
IApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2luZG93UHJveHko
SlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlJiwgRE9NV3JhcHBlcldvcmxkJik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgQWJzdHJhY3RET01XaW5kb3cmKTsKLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAK
ICAgICBSZWY8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxkOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAKICNpbmNsdWRlICJET01HQ091dHB1dENvbnN0cmFpbnQuaCIK
KyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCkBAIC01MywxNSArNTQsMTQgQEAKICNpbmNsdWRlICJydW50aW1l
X2FycmF5LmgiCiAjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIKICNpbmNsdWRlICJydW50aW1l
X29iamVjdC5oIgorI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVk1DbGll
bnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCi0gICAgOiBtX2J1aWx0aW5GdW5jdGlvbnMo
dm0pCi0gICAgLCBtX2J1aWx0aW5OYW1lcyh2bSkKLSAgICAsIG1fcnVudGltZUFycmF5SGVhcENl
bGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPFJ1bnRpbWVBcnJheT4oKSkKK0pTSGVh
cERhdGE6OkpTSGVhcERhdGEoSGVhcCYgaGVhcCkKKyAgICA6IG1fcnVudGltZUFycmF5SGVhcENl
bGxUeXBlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPFJ1bnRpbWVBcnJheT4oKSkKICAgICAs
IG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxK
U0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0PigpKQogICAgICwgbV93aW5kb3dQcm94eUhlYXBD
ZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dpbmRvd1Byb3h5PigpKQogICAg
ICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdyhKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJn
czxKU0RPTVdpbmRvdz4oKSkKQEAgLTgxLDE5ICs4MSw1NCBAQCBKU1ZNQ2xpZW50RGF0YTo6SlNW
TUNsaWVudERhdGEoVk0mIHZtKQogICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xl
dEdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTQXVkaW9Xb3JrbGV0R2xv
YmFsU2NvcGU+KCkpCiAjZW5kaWYKICAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxp
emF0aW9uR2xvYmFsT2JqZWN0KEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTSURCU2VyaWFs
aXphdGlvbkdsb2JhbE9iamVjdD4oKSkKLSAgICAsIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0RP
TUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpCi0gICAgLCBtX2RvbUNvbnN0cnVjdG9yU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0RPTUNvbnN0
cnVjdG9yQmFzZSkKLSAgICAsIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0RPTU9iamVjdCkKLSAgICAs
IG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZt
LmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01XaW5kb3dQcm9wZXJ0aWVzKQotICAgICwgbV9ydW50
aW1lQXJyYXlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3J1bnRpbWVBcnJheUhl
YXBDZWxsVHlwZSwgUnVudGltZUFycmF5KQotICAgICwgbV9ydW50aW1lTWV0aG9kU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBSdW50aW1lTWV0
aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUKLSAgICAsIG1fcnVudGltZU9iamVjdFNwYWNlIElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNDOjpC
aW5kaW5nczo6UnVudGltZU9iamVjdCkKLSAgICAsIG1fd2luZG93UHJveHlTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3dpbmRvd1Byb3h5SGVhcENlbGxUeXBlLCBKU1dpbmRvd1By
b3h5KQotICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIEpT
SURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKKyAgICAsIG1fZG9tQnVpbHRpbkNvbnN0cnVj
dG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpCisgICAgLCBtX2RvbUNvbnN0cnVjdG9yU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0RPTUNvbnN0
cnVjdG9yQmFzZSkKKyAgICAsIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0RPTU9iamVjdCkKKyAgICAsIG1f
ZG9tV2luZG93UHJvcGVydGllc1NwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNET01XaW5kb3dQcm9wZXJ0aWVzKQorICAgICwgbV9ydW50aW1lQXJy
YXlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlw
ZSwgUnVudGltZUFycmF5KQorICAgICwgbV9ydW50aW1lTWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBSdW50aW1lTWV0aG9kKSAvLyBIYXNo
OjB4ZjcwYzRhODUKKyAgICAsIG1fcnVudGltZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGlt
ZU9iamVjdCkKKyAgICAsIG1fd2luZG93UHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBtX3dpbmRvd1Byb3h5SGVhcENlbGxUeXBlLCBKU1dpbmRvd1Byb3h5KQorICAgICwgbV9pZGJT
ZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV9oZWFwQ2VsbFR5cGVG
b3JKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2Jh
bE9iamVjdCkKICAgICAsIG1fc3Vic3BhY2VzKG1ha2VVbmlxdWU8RE9NSXNvU3Vic3BhY2VzPigp
KQogewogfQogCitKU0hlYXBEYXRhKiBKU0hlYXBEYXRhOjplbnN1cmVIZWFwRGF0YShIZWFwJiBo
ZWFwKQoreworICAgIGlmICghT3B0aW9uczo6dXNlR2xvYmFsR0MoKSkKKyAgICAgICAgcmV0dXJu
IG5ldyBKU0hlYXBEYXRhKGhlYXApOworCisgICAgc3RhdGljIEpTSGVhcERhdGEqIHNpbmdsZXRv
biA9IG51bGxwdHI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0geworICAgICAgICBzaW5nbGV0b24gPSBuZXcgSlNI
ZWFwRGF0YShoZWFwKTsKKyAgICB9KTsKKyAgICByZXR1cm4gc2luZ2xldG9uOworfQorCisjZGVm
aW5lIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzdWJzcGFjZSkgc3Vic3BhY2UobV9oZWFwRGF0
YS0+c3Vic3BhY2UpCisKK0pTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCisg
ICAgOiBtX2J1aWx0aW5GdW5jdGlvbnModm0pCisgICAgLCBtX2J1aWx0aW5OYW1lcyh2bSkKKyAg
ICAsIG1faGVhcERhdGEoSlNIZWFwRGF0YTo6ZW5zdXJlSGVhcERhdGEodm0uaGVhcCkpCisgICAg
LCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSkK
KyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbUNvbnN0cnVjdG9yU3BhY2UpCisg
ICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZSkK
KyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFj
ZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3J1bnRpbWVBcnJheVNwYWNlKQor
ICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGltZU1ldGhvZFNwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGltZU9iamVjdFNwYWNlKQorICAgICwg
Q0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fd2luZG93UHJveHlTcGFjZSkKKyAgICAsIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChtX2lkYlNlcmlhbGl6YXRpb25TcGFjZSkKKworICAgICwgbV9j
bGllbnRTdWJzcGFjZXMobWFrZVVuaXF1ZTxET01DbGllbnRJc29TdWJzcGFjZXM+KCkpCit7Cit9
CisKKyN1bmRlZiBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQKKwogSlNWTUNsaWVudERhdGE6On5K
U1ZNQ2xpZW50RGF0YSgpCiB7CiAgICAgQVNTRVJUKG1fd29ybGRTZXQuY29udGFpbnMobV9ub3Jt
YWxXb3JsZC5nZXQoKSkpOwpAQCAtMTQyLDcgKzE3Nyw3IEBAIHZvaWQgSlNWTUNsaWVudERhdGE6
OmluaXROb3JtYWxXb3JsZChWTSoKICAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG5l
dyBKU1ZNQ2xpZW50RGF0YSgqdm0pOwogICAgIHZtLT5jbGllbnREYXRhID0gY2xpZW50RGF0YTsg
Ly8gflZNIGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogCi0gICAgdm0tPmhlYXAuYWRkTWFya2luZ0Nv
bnN0cmFpbnQobWFrZVVuaXF1ZTxET01HQ091dHB1dENvbnN0cmFpbnQ+KCp2bSwgKmNsaWVudERh
dGEpKTsKKyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChtYWtlVW5pcXVlPERPTUdD
T3V0cHV0Q29uc3RyYWludD4oKnZtLCBjbGllbnREYXRhLT5oZWFwRGF0YSgpKSk7CiAKICAgICBj
bGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoKnZtLCBE
T01XcmFwcGVyV29ybGQ6OlR5cGU6Ok5vcm1hbCk7CiAgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRy
b2xsZXIgPSBhZG9wdFJlZihuZXcgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKHR5cGUgPT0g
V29ya2VyVGhyZWFkVHlwZTo6RGVkaWNhdGVkV29ya2VyIHx8IHR5cGUgPT0gV29ya2VyVGhyZWFk
VHlwZTo6V29ya2xldCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVKU0NsaWVudERhdGEuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBX
ZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0yNSwyMyArMjUsOTMgQEAKICNpbmNsdWRl
ICJXZWJDb3JlQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbnMuaCIK
ICNpbmNsdWRlICJXb3JrZXJUaHJlYWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworY2xhc3MgRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzOwogY2xhc3MgRE9NSXNvU3Vic3BhY2VzOwogCi1jbGFzcyBKU1ZNQ2xp
ZW50RGF0YSA6IHB1YmxpYyBKU0M6OlZNOjpDbGllbnREYXRhIHsKK2NsYXNzIEpTSGVhcERhdGEg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTSGVhcERhdGEpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgIGZyaWVuZCBjbGFzcyBKU1ZNQ2xpZW50RGF0YTsKK3B1YmxpYzoK
KyAgICBKU0hlYXBEYXRhKEhlYXAmKTsKKworICAgIHN0YXRpYyBKU0hlYXBEYXRhKiBlbnN1cmVI
ZWFwRGF0YShIZWFwJik7CisKKyAgICBMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9Cisg
ICAgRE9NSXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9zdWJzcGFjZXMuZ2V0
KCk7IH0KKworICAgIFZlY3RvcjxJc29TdWJzcGFjZSo+JiBvdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25z
dCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvKiBzcGFjZSA6IG1fb3V0cHV0
Q29uc3RyYWludFNwYWNlcykKKyAgICAgICAgICAgIGZ1bmMoKnNwYWNlKTsKKyAgICB9CisKKyAg
ICBJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7
IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9
CisgICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQorCitw
cml2YXRlOgorICAgIExvY2sgbV9sb2NrOworCisgICAgSXNvSGVhcENlbGxUeXBlIG1fcnVudGlt
ZUFycmF5SGVhcENlbGxUeXBlOworICAgIElzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVPYmplY3RI
ZWFwQ2VsbFR5cGU7CisgICAgSXNvSGVhcENlbGxUeXBlIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5
cGU7CitwdWJsaWM6CisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNET01X
aW5kb3c7CisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZTsKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JK
U1JlbW90ZURPTVdpbmRvdzsKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JK
U1dvcmtlckdsb2JhbFNjb3BlOworICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZv
ckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7CisgICAgSXNvSGVhcENlbGxUeXBlIG1faGVhcENl
bGxUeXBlRm9ySlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOworI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKKyAgICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZTsKKyNlbmRpZgorICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlw
ZUZvckpTV29ya2xldEdsb2JhbFNjb3BlOworI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQor
ICAgIElzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGU7CisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIElzb0hlYXBDZWxsVHlw
ZSBtX2hlYXBDZWxsVHlwZUZvckpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU7CisjZW5kaWYKKyAg
ICBJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3Q7CisKK3ByaXZhdGU6CisgICAgSXNvU3Vic3BhY2UgbV9kb21CdWlsdGluQ29uc3Ry
dWN0b3JTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtX2RvbUNvbnN0cnVjdG9yU3BhY2U7CisgICAg
SXNvU3Vic3BhY2UgbV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBt
X2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtX3J1bnRpbWVBcnJh
eVNwYWNlOworICAgIElzb1N1YnNwYWNlIG1fcnVudGltZU1ldGhvZFNwYWNlOworICAgIElzb1N1
YnNwYWNlIG1fcnVudGltZU9iamVjdFNwYWNlOworICAgIElzb1N1YnNwYWNlIG1fd2luZG93UHJv
eHlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NSXNvU3Vic3BhY2VzPiBtX3N1
YnNwYWNlczsKKyAgICBWZWN0b3I8SXNvU3Vic3BhY2UqPiBtX291dHB1dENvbnN0cmFpbnRTcGFj
ZXM7Cit9OworCisKK2NsYXNzIEpTVk1DbGllbnREYXRhIDogcHVibGljIFZNOjpDbGllbnREYXRh
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU1ZNQ2xpZW50RGF0YSk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgIGZyaWVuZCBjbGFzcyBWTVdvcmxkSXRlcmF0b3I7CiAKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBKU1ZNQ2xpZW50RGF0YShKU0M6OlZNJik7CisgICAgZXhwbGljaXQg
SlNWTUNsaWVudERhdGEoVk0mKTsKIAogICAgIHZpcnR1YWwgfkpTVk1DbGllbnREYXRhKCk7CiAg
ICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgaW5pdE5vcm1hbFdvcmxkKEpTQzo6
Vk0qLCBXb3JrZXJUaHJlYWRUeXBlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBp
bml0Tm9ybWFsV29ybGQoVk0qLCBXb3JrZXJUaHJlYWRUeXBlKTsKIAogICAgIERPTVdyYXBwZXJX
b3JsZCYgbm9ybWFsV29ybGQoKSB7IHJldHVybiAqbV9ub3JtYWxXb3JsZDsgfQogCkBAIC01OSwz
MSArMTI5LDI0IEBAIHB1YmxpYzoKICAgICAgICAgbV93b3JsZFNldC5yZW1vdmUoJndvcmxkKTsK
ICAgICB9CiAKKyAgICBKU0hlYXBEYXRhJiBoZWFwRGF0YSgpIHsgcmV0dXJuICptX2hlYXBEYXRh
OyB9CisKICAgICBXZWJDb3JlQnVpbHRpbk5hbWVzJiBidWlsdGluTmFtZXMoKSB7IHJldHVybiBt
X2J1aWx0aW5OYW1lczsgfQogICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyYgYnVpbHRpbkZ1bmN0aW9u
cygpIHsgcmV0dXJuIG1fYnVpbHRpbkZ1bmN0aW9uczsgfQogICAgIAotICAgIEpTQzo6SXNvU3Vi
c3BhY2UmIGRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21CdWlsdGlu
Q29uc3RydWN0b3JTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIGRvbUNvbnN0cnVjdG9y
U3BhY2UoKSB7IHJldHVybiBtX2RvbUNvbnN0cnVjdG9yU3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1
YnNwYWNlJiBkb21OYW1lc3BhY2VPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fZG9tTmFtZXNwYWNl
T2JqZWN0U3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBkb21XaW5kb3dQcm9wZXJ0aWVz
U3BhY2UoKSB7IHJldHVybiBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZTsgfQotICAgIEpTQzo6
SXNvU3Vic3BhY2UmIHJ1bnRpbWVBcnJheVNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lQXJyYXlT
cGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVNZXRob2RTcGFjZSgpIHsgcmV0
dXJuIG1fcnVudGltZU1ldGhvZFNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgcnVudGlt
ZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lT2JqZWN0U3BhY2U7IH0KLSAgICBKU0M6
Oklzb1N1YnNwYWNlJiB3aW5kb3dQcm94eVNwYWNlKCkgeyByZXR1cm4gbV93aW5kb3dQcm94eVNw
YWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgaWRiU2VyaWFsaXphdGlvblNwYWNlKCkgeyBy
ZXR1cm4gbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlKiBm
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEZp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxKU0M6
Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFjZSwgbnVsbHB0cik7IH0KKyAgICBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIGRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21C
dWlsdGluQ29uc3RydWN0b3JTcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZG9t
Q29uc3RydWN0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZG9tQ29uc3RydWN0b3JTcGFjZTsgfQorICAg
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2UoKSB7IHJldHVy
biBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
JiBkb21XaW5kb3dQcm9wZXJ0aWVzU3BhY2UoKSB7IHJldHVybiBtX2RvbVdpbmRvd1Byb3BlcnRp
ZXNTcGFjZTsgfQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcnVudGltZUFycmF5U3BhY2Uo
KSB7IHJldHVybiBtX3J1bnRpbWVBcnJheVNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlJiBydW50aW1lTWV0aG9kU3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVNZXRob2RTcGFjZTsg
fQorICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcnVudGltZU9iamVjdFNwYWNlKCkgeyByZXR1
cm4gbV9ydW50aW1lT2JqZWN0U3BhY2U7IH0KKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHdp
bmRvd1Byb3h5U3BhY2UoKSB7IHJldHVybiBtX3dpbmRvd1Byb3h5U3BhY2U7IH0KKyAgICBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UmIGlkYlNlcmlhbGl6YXRpb25TcGFjZSgpIHsgcmV0dXJuIG1faWRi
U2VyaWFsaXphdGlvblNwYWNlOyB9CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBmaWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQogCi0gICAgVmVjdG9yPEpT
Qzo6SXNvU3Vic3BhY2UqPiYgb3V0cHV0Q29uc3RyYWludFNwYWNlcygpIHsgcmV0dXJuIG1fb3V0
cHV0Q29uc3RyYWludFNwYWNlczsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAg
ICB2b2lkIGZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoY29uc3QgRnVuYyYgZnVuYykKLSAg
ICB7Ci0gICAgICAgIGZvciAoYXV0byogc3BhY2UgOiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXMp
Ci0gICAgICAgICAgICBmdW5jKCpzcGFjZSk7Ci0gICAgfQotCi0gICAgRE9NSXNvU3Vic3BhY2Vz
JiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9zdWJzcGFjZXMuZ2V0KCk7IH0KKyAgICBET01DbGll
bnRJc29TdWJzcGFjZXMmIGNsaWVudFN1YnNwYWNlcygpIHsgcmV0dXJuICptX2NsaWVudFN1YnNw
YWNlcy5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8RE9NV3JhcHBlcldvcmxkKj4g
bV93b3JsZFNldDsKQEAgLTkyLDQxICsxNTUsMTkgQEAgcHJpdmF0ZToKICAgICBKU0J1aWx0aW5G
dW5jdGlvbnMgbV9idWlsdGluRnVuY3Rpb25zOwogICAgIFdlYkNvcmVCdWlsdGluTmFtZXMgbV9i
dWlsdGluTmFtZXM7CiAKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVBcnJheUhl
YXBDZWxsVHlwZTsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX3J1bnRpbWVPYmplY3RIZWFw
Q2VsbFR5cGU7Ci0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV93aW5kb3dQcm94eUhlYXBDZWxs
VHlwZTsKLXB1YmxpYzoKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZv
ckpTRE9NV2luZG93OwotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9y
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTsKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBt
X2hlYXBDZWxsVHlwZUZvckpTUmVtb3RlRE9NV2luZG93OwotICAgIEpTQzo6SXNvSGVhcENlbGxU
eXBlIG1faGVhcENlbGxUeXBlRm9ySlNXb3JrZXJHbG9iYWxTY29wZTsKLSAgICBKU0M6Oklzb0hl
YXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7Ci0g
ICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU1NoYWRvd1JlYWxtR2xv
YmFsU2NvcGU7Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIEpTQzo6SXNvSGVhcENl
bGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7Ci0jZW5k
aWYKLSAgICBKU0M6Oklzb0hlYXBDZWxsVHlwZSBtX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEds
b2JhbFNjb3BlOwotI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQotICAgIEpTQzo6SXNvSGVh
cENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTsKLSNl
bmRpZgotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9o
ZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlOwotI2VuZGlmCi0gICAgSlND
OjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3Q7CisgICAgSlNIZWFwRGF0YSogbV9oZWFwRGF0YTsKKyAgICBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UgbV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UgbV9kb21Db25zdHJ1Y3RvclNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlOworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBt
X2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9y
dW50aW1lQXJyYXlTcGFjZTsKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lTWV0
aG9kU3BhY2U7CisgICAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNwYWNl
OworICAgIEdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CisgICAgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOwogCi1wcml2YXRlOgot
ICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZTsKLSAgICBK
U0M6Oklzb1N1YnNwYWNlIG1fZG9tQ29uc3RydWN0b3JTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNw
YWNlIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX2Rv
bVdpbmRvd1Byb3BlcnRpZXNTcGFjZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZUFy
cmF5U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX3J1bnRpbWVNZXRob2RTcGFjZTsKLSAg
ICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNwYWNlOwotICAgIEpTQzo6SXNvU3Vi
c3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwotICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9pZGJTZXJp
YWxpemF0aW9uU3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IG1f
ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPERPTUlzb1N1YnNwYWNlcz4gbV9zdWJzcGFjZXM7Ci0gICAgVmVjdG9yPEpTQzo6SXNvU3Vi
c3BhY2UqPiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdD
Q2xpZW50OjpJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JT
cGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2NsaWVu
dFN1YnNwYWNlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgQ29weXJpZ2h0IChD
KSAyMDA2IEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4KICMgQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogIyBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSMgQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHly
aWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5hdT4KICMgQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCkBAIC0zMDkzLDEzICszMDkzLDEzIEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNw
YWNlQWNjZXNzOjpDb25jdXJyZW50bHkpXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTtcbiIpOwogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTtcbiIp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pO1xuIik7CiAKICAgICAjIHZp
c2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKQEAgLTQ4NzEsMzcg
KzQ4NzEsNTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAKICAgICBHZW5lcmF0
ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsK
IAorICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01DbGllbnRJc29TdWJzcGFjZXMuaCIpOwogICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7CiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jvcy5o
PiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxp
bmVzLmg+Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAke2Ns
YXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7XG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCkpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHNwYWNlO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTtcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKSlcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIXNwYWNlKSB7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7XG4iKTsKKwogICAgIGlmIChJc0RPTUdsb2JhbE9iamVjdCgkaW50
ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzcGFjZXMubV9zdWJz
cGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENlbGxUeXBlRm9yJHtjbGFzc05h
bWV9LCAke2NsYXNzTmFtZX0pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
RGF0YS5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfSwgJHtjbGFzc05hbWV9KTtcbiIpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFzc05h
bWV9PiB8fCAhJHtjbGFzc05hbWV9OjpuZWVkc0Rlc3RydWN0aW9uKTtcbiIpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4pXG4iKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VO
YW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCAke2NsYXNzTmFtZX0pO1xuIik7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGVsc2VcbiIpOwotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5h
bWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uY2VsbEhlYXBDZWxsVHlwZSgpLCAke2NsYXNzTmFtZX0pO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1lfTo6
bmVlZHNEZXN0cnVjdGlvbik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgJHtjbGFzc05hbWV9PilcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAke2NsYXNzTmFtZX0pO1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBlbHNlXG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7Y2xhc3NOYW1l
fSk7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFj
ZU5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7XG4iKTsKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNv
ZGVcIilcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dClcbiIpOwotIyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJiR7Y2xhc3NOYW1lfTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludClcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHNwYWNlO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgfVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworCisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRy
ZW4pIHsKQEAgLTY3ODUsMjkgKzY3OTgsNDAgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSAk
e2l0ZXJhdG9yTmFtZX1CYXNlOwogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4gc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVy
YXRvck5hbWV9LmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7
aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRlcmF0b3JOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PikKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksICR7aXRl
cmF0b3JOYW1lfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCAke2l0ZXJhdG9yTmFtZX0pOwot
ICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9
LmdldCgpOworICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOworICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKKworICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owor
CisgICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgICAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5n
ZXQoKTsKKyAgICAgICAgaWYgKCFzcGFjZSkgeworICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRlcmF0b3JOYW1l
fTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4pCisg
ICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsICR7aXRlcmF0b3JOYW1l
fSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCAke2l0
ZXJhdG9yTmFtZX0pOworICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9y
TmFtZX0gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNvZGVcIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTihc
InRhdXRvbG9naWNhbC1jb21wYXJlXCIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFt
ZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9ICR7aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgICAgIH0KKworICAg
ICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IG1h
a2VVbmlxdWU8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKQEAgLTc1ODgsNyArNzYxMiw3IEBAIHN1YiBHZW5lcmF0ZVByb3RvdHlwZURlY2xh
cmF0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIERFQ0xBUkVfSU5GTztcbiIpOwog
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPlxuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSlcbiIpOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoJHtwcm90b3R5cGVDbGFzc05hbWV9LCBCYXNl
KTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7XG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvcHJlcHJvY2Vzcy1pZGxzLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQCBteSAkaWRsRmlsZU5hbWVzTGlzdDsKIG15ICR0ZXN0R2xv
YmFsQ29udGV4dE5hbWU7CiBteSAkc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGU7CiBteSAkaXNv
U3Vic3BhY2VzSGVhZGVyRmlsZTsKK215ICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlOwog
bXkgJGNvbnN0cnVjdG9yc0hlYWRlckZpbGU7CiBteSAkd2luZG93Q29uc3RydWN0b3JzRmlsZTsK
IG15ICR3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGU7CkBAIC04MSw2ICs4Miw3IEBA
IEdldE9wdGlvbnMoJ2RlZmluZXM9cycgPT4gXCRkZWZpbmVzLAogICAgICAgICAgICAndGVzdEds
b2JhbENvbnRleHROYW1lPXMnID0+IFwkdGVzdEdsb2JhbENvbnRleHROYW1lLAogICAgICAgICAg
ICAnc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGU9cycgPT4gXCRzdXBwbGVtZW50YWxEZXBlbmRl
bmN5RmlsZSwKICAgICAgICAgICAgJ2lzb1N1YnNwYWNlc0hlYWRlckZpbGU9cycgPT4gXCRpc29T
dWJzcGFjZXNIZWFkZXJGaWxlLAorICAgICAgICAgICAnY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVy
RmlsZT1zJyA9PiBcJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUsCiAgICAgICAgICAgICdj
b25zdHJ1Y3RvcnNIZWFkZXJGaWxlPXMnID0+IFwkY29uc3RydWN0b3JzSGVhZGVyRmlsZSwKICAg
ICAgICAgICAgJ3dpbmRvd0NvbnN0cnVjdG9yc0ZpbGU9cycgPT4gXCR3aW5kb3dDb25zdHJ1Y3Rv
cnNGaWxlLAogICAgICAgICAgICAnd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlPXMn
ID0+IFwkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlLApAQCAtMTE0LDYgKzExNiw3
IEBAIGRpZSgnTXVzdCBzcGVjaWZ5IElETCBhdHRyaWJ1dGVzIGZpbGUgdXMKIAogJHN1cHBsZW1l
bnRhbERlcGVuZGVuY3lGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCRzdXBwbGVtZW50YWxEZXBl
bmRlbmN5RmlsZSk7CiAkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRl
ZCgkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSk7CiskY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmls
ZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSk7CiAk
Y29uc3RydWN0b3JzSGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkY29uc3RydWN0b3Jz
SGVhZGVyRmlsZSk7CiAkd2luZG93Q29uc3RydWN0b3JzRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRl
ZCgkd2luZG93Q29uc3RydWN0b3JzRmlsZSk7CiAkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnNGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCR3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9y
c0ZpbGUpOwpAQCAtMTc1LDYgKzE3OCw3IEBAIG15ICRpc29TdWJzcGFjZXNIZWFkZXJDb2RlID0g
PDxFTkQ7CiAjcHJhZ21hIG9uY2UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogY2xhc3MgRE9NSXNvU3Vic3BhY2VzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShET01Jc29TdWJzcGFjZXMpOwpAQCAtMTgzLDYgKzE4NywyMiBAQCBwdWJsaWM6CiAgICAg
RE9NSXNvU3Vic3BhY2VzKCkgPSBkZWZhdWx0OwogRU5ECiAKK215ICRjbGllbnRJU09TdWJzcGFj
ZXNIZWFkZXJDb2RlID0gPDxFTkQ7CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK2NsYXNzIERPTUNsaWVudElzb1N1YnNwYWNl
cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRE9NQ2xpZW50SXNvU3Vic3BhY2VzKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRChET01DbGllbnRJc29TdWJzcGFjZXMpOworcHVibGlj
OgorICAgIERPTUNsaWVudElzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKK0VORAorCiBteSBAY29u
c3RydWN0b3JzID0gKCk7CiBteSAkY29uc3RydWN0b3JzSGVhZGVyQ29kZSA9IDw8RU5EOwogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CkBAIC0yNDgsOSArMjY4LDExIEBAIGZvcmVhY2ggbXkg
JGlkbEZpbGVOYW1lIChzb3J0IGtleXMgJWlkbEYKIAogICAgIG15ICRpc0NhbGxiYWNrSW50ZXJm
YWNlID0gaXNDYWxsYmFja0ludGVyZmFjZUZyb21JREwoJGlkbEZpbGUpOwogICAgIGlmICghJGlz
Q2FsbGJhY2tJbnRlcmZhY2UpIHsKLSAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUgLj0g
IiAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7aW50
ZXJmYWNlTmFtZX07XG4iOworICAgICAgICAkaXNvU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAg
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFt
ZX07XG4iOworICAgICAgICAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0
ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vic3BhY2VGb3Ik
e2ludGVyZmFjZU5hbWV9O1xuIjsKICAgICAgICAgaWYgKGNvbnRhaW5zSXRlcmFibGVJbnRlcmZh
Y2VGcm9tSURMKCRpZGxGaWxlKSkgewotICAgICAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRlckNv
ZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZv
ciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRvcjtcbiI7CisgICAgICAgICAgICAkaXNvU3Vic3BhY2Vz
SGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV9zdWJzcGFj
ZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRvcjtcbiI7CisgICAgICAgICAgICAkY2xpZW50SVNP
U3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+IG1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9SXRlcmF0b3I7XG4i
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjYsNiArMzQ4LDEyIEBAIGlmICgkaXNvU3Vic3Bh
Y2VzSGVhZGVyRmlsZSkgewogICAgIFdyaXRlRmlsZUlmQ2hhbmdlZCgkaXNvU3Vic3BhY2VzSGVh
ZGVyRmlsZSwgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUpOwogfQogCitpZiAoJGNsaWVudElTT1N1
YnNwYWNlc0hlYWRlckZpbGUpIHsKKyAgICAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAu
PSAifTtcbiI7CisgICAgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIn0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmVcbiI7CisgICAgV3JpdGVGaWxlSWZDaGFuZ2VkKCRjbGllbnRJU09TdWJz
cGFjZXNIZWFkZXJGaWxlLCAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSk7Cit9CisKIGlm
ICgkY29uc3RydWN0b3JzSGVhZGVyRmlsZSkgewogICAgIG15ICRjb25zdHJ1Y3RvcnNMZW5ndGgg
PSBAY29uc3RydWN0b3JzOwogICAgICRjb25zdHJ1Y3RvcnNIZWFkZXJDb2RlIC49ICJ9O1xuIjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFJ1bnRpbWVBcnJheTo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBS
dW50aW1lQXJyYXk6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBSdW50aW1lQXJyYXk6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSktPnJ1bnRpbWVBcnJheVNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQpAQCAt
ODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgIFJ1bnRpbWVBcnJheShWTSYsIFN0cnVjdHVyZSop
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBCaW5kaW5nczo6QXJyYXkqKTsKIAotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAg
IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mKTsKIAogICAgIEJpbmRpbmdzQXJyYXkqIG1fYXJyYXk7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODIsNyArODIsNyBAQCBib29sIFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKCiAg
ICAgcmV0dXJuIEludGVybmFsRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1Jc29TdWJzcGFjZSogUnVudGltZU1l
dGhvZDo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogUnVu
dGltZU1ldGhvZDo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPnJ1bnRpbWVNZXRob2RTcGFj
ZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
My0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihSdW50aW1lTWV0aG9k
KSwgIlJ1bnRpbWVNZXRob2Qgc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVy
cmlkZSBzdWJzcGFjZUZvcjw+KCkiKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDZWxsVHlwZTo6
ZGVzdHJveSA9PSBKU0M6OkpTQ2VsbDo6ZGVzdHJveSk7CkBAIC03NCw3ICs3NCw3IEBAIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKIAogICAgIEJpbmRp
bmdzOjpNZXRob2QqIG1fbWV0aG9kOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgtMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMx
Myw3ICszMTMsNyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVjdEludmFsaWRBY2NlCiAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVSZWZlcmVuY2VFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVHJ5aW5nIHRvIGFjY2VzcyBv
YmplY3QgZnJvbSBkZXN0cm95ZWQgcGx1Zy1pbi4iKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2Uq
IFJ1bnRpbWVPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBSdW50aW1lT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpLT5ydW50aW1lT2JqZWN0U3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKFJ1
bnRpbWVPYmplY3QpLCAiUnVudGltZU9iamVjdCBzdWJjbGFzc2VzIHRoYXQgYWRkIGZpZWxkcyBu
ZWVkIHRvIG92ZXJyaWRlIHN1YnNwYWNlRm9yPD4oKSIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0
KENlbGxUeXBlOjpkZXN0cm95ID09IFJ1bnRpbWVPYmplY3Q6OmRlc3Ryb3kpOwpAQCAtODYsNyAr
ODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CiAKICAg
ICBSZWZQdHI8SW5zdGFuY2U+IG1faW5zdGFuY2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTUs
NyArOTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAg
IH0KQEAgLTEzOCw3ICsxMzgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB0b0Jvb2xlYW4oSlNH
bG9iYWxPYmplY3QqKSBjb25zdDsgLy8gRklYTUU6IEN1cnJlbnRseSB0aGlzIGlzIGJyb2tlbiBi
ZWNhdXNlIG5vbmUgb2YgdGhlIHN1cGVyY2xhc3NlcyBhcmUgbWFya2VkIHZpcnR1YWwuIFdlIG5l
ZWQgdG8gc29sdmUgdGhpcyBpbiB0aGUgbG9uZ2VyIHRlcm0uCiAKLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOworICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOwogCiAgICAgUmVmUHRyPE9iamNJbnN0YW5jZT4g
X2luc3RhbmNlOwogICAgIFN0cmluZyBtX2l0ZW07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMzIs
MTMgKzMzMiwxMyBAQCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6dG9Cb29sZWFuKEpTCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXA6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNDOjpJc29TdWJzcGFjZVBlclZNPiBw
ZXJWTShbXSAoSlNDOjpWTSYgdm0pIHsKLSAgICAgICAgcmV0dXJuIElTT19TVUJTUEFDRV9QQVJB
TUVURVJTKHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBPYmpjRmFsbGJhY2tP
YmplY3RJbXApOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6Oklzb1N1YnNwYWNlUGVy
Vk0+IHBlclZNKFtdIChKU0M6OkhlYXAmIGhlYXApIHsKKyAgICAgICAgcmV0dXJuIElTT19TVUJT
UEFDRV9QQVJBTUVURVJTKGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBPYmpj
RmFsbGJhY2tPYmplY3RJbXApOwogICAgIH0pOwotICAgIHJldHVybiAmcGVyVk0uZ2V0KCkuZm9y
Vk0odm0pOworICAgIHJldHVybiAmcGVyVk0uZ2V0KCkuY2xpZW50SXNvU3Vic3BhY2Vmb3JWTSh2
bSk7CiB9CiAKLX0KLX0KK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCit9IC8vIG5hbWVzcGFjZSBK
U0MK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452461</attachid>
            <date>2022-02-17 18:07:06 -0800</date>
            <delta_ts>2022-02-17 20:38:49 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-233878.patch</filename>
            <type>text/plain</type>
            <size>820898</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwMTAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MSBA
QAorMjAyMi0wMi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
U3BsaXQgSXNvU3Vic3BhY2UgaW50byBhIEdDQ2xpZW50IGFsbG9jYXRvciB1c2VkIGJ5IFZNIGFu
ZCBhIGJhY2tlbmQgbWFuYWdlZCBieSBIZWFwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzODc4CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg2MTA4
Mzk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4g
QWRkIGEgdXNlR2xvYmFsR0Mgb3B0aW9uLiAgV2UncmUgY3VycmVudGx5IG9ubHkgdXNpbmcgdGhp
cyB0byBndWFyZCBzb21lIGNvZGUKKyAgICAgICAgICAgZm9yIEdsb2JhbEdDLiAgV2UncmUgbm90
IHJlYWR5IHRvIHJ1biB3aXRoIEdsb2JhbEdDIGVuYWJsZWQgeWV0LgorCisgICAgICAgIDIuIENy
ZWF0ZSBhIG5ldyBHQ0NsaWVudCBuYW1lc3BhY2UgaW4gSlNDLiAgVGhlIEhlYXAgaXMgbm93IHNw
bGl0IGludG8gMiBwYXJ0czoKKyAgICAgICAgICAgYS4gVk0gLyBHQ0NsaWVudCAvIGNsaWVudCBz
aWRlOiBKU0M6OkdDQ2xpZW50OjpIZWFwCisgICAgICAgICAgIGIuIEdsb2JhbEdDIC8gc2VydmVy
IHNpZGU6IEpTQzo6SGVhcAorCisgICAgICAgICAgIFRoZSBldmVudHVhbCBnb2FsIGlzIHRvIGhh
dmUgbWFueSBHQ0NsaWVudCBIZWFwcyBiYWNrZWQgYnkgYSBzaW5nbGV0b24gc2VydmVyCisgICAg
ICAgICAgIEhlYXAuICBDdXJyZW50bHksIHdlIHN0aWxsIGhhdmUgYSAxIHRvIDEgY29ycmVzcG9u
ZGVuY2UgYmV0d2VlbiB0aGUgY2xpZW50IGFuZAorICAgICAgICAgICBzZXJ2ZXIgc2lkZSBpLmUu
IFZNIGVtYmVkcyBib3RoIG9uZSBpbnN0YW5jZSBlYWNoIG9mIEdDQ2xpZW50OjpIZWFwIGFuZCBI
ZWFwLgorCisgICAgICAgIDMuIFNwbGl0IElzb1N1YnNwYWNlIGludG86CisgICAgICAgICAgIGEu
IFZNIC8gR0NDbGllbnQgLyBjbGllbnQgc2lkZTogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UK
KyAgICAgICAgICAgYi4gR2xvYmFsR0MgLyBzZXJ2ZXIgc2lkZTogSlNDOjpJc29TdWJzcGFjZQor
CisgICAgICAgICAgIFRoZSBjbGllbnQgc2lkZSB3aWxsIG5vdyBtYW5hZ2UgYSBMb2NhbEFsbG9j
YXRvciBmb3IgdGhlIElzb1N1YnNwYWNlLgorCisgICAgICAgICAgIFRoZSBldmVudHVhbCBnb2Fs
IGlzIHRvIGhhdmUgbWFueSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgYWxsb2NhdG9ycyBmZWQgZnJv
bQorICAgICAgICAgICBhIHNlcnZlciBJc29TdWJzcGFjZS4gIEN1cnJlbnRseSwgd2Ugc3RpbGwg
aGF2ZSBhIDEgdG8gMSBjb3JyZXNwb25kZW5jZQorICAgICAgICAgICBiZXR3ZWVuIHRoZSBjbGll
bnQgYW5kIHNlcnZlciBzaWRlLiAgR0NDbGllbnQ6Oklzb1N1YnNwYWNlIGluc3RhbmNlcyB3aWxs
IGJlCisgICAgICAgICAgIG1hbmFnZWQgYnkgR0NDbGllbnQ6OkhlYXAuICBTZXJ2ZXIgc2lkZSBJ
c29TdWJzcGFjZXMgY29udGludWUgdG8gYmUgbWFuYWdlZAorICAgICAgICAgICBieSBIZWFwLgor
CisgICAgICAgIDMuIElzb1N1YnNwYWNlUGVyVk0gaXMgYWxzbyBub3cgY2xpZW50LXNlcnZlciBh
d2FyZS4KKworICAgICAgICAgICBQcmV2aW91c2x5LCBJc29TdWJzcGFjZVBlclZNIHdhcyByZWx5
aW5nIG9uIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlIHRvCisgICAgICAgICAgICJhdXRvbWF0aWNh
bGx5IiB1bnJlZ2lzdGVyIElzb1N1YnNwYWNlcyBmcm9tIElzb1N1YnNwYWNlUGVyVk0gdmlhIGl0
cworICAgICAgICAgICBkZXN0cnVjdG9yLiAgSG93ZXZlciwgdGhlcmUgaXMgYSBidWcgd2hlcmUg
dGhlIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlIGlzCisgICAgICAgICAgIG5ldmVyIGFzc29jaWF0
ZWQgd2l0aCB0aGUgVk0sIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRoYXQgd2lsbCB0cmlnZ2VyIGl0
cworICAgICAgICAgICBkZXN0cnVjdGlvbiB3aGVuIHRoZSBWTSBzaHV0cyBkb3duLgorCisgICAg
ICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSBieSBoYXZpbmcgSXNvU3Vic3BhY2VQ
ZXJWTSByZWdpc3RlciB3aXRoIHRoZSBWTSdzCisgICAgICAgICAgIEdDQ2xpZW50OjpIZWFwIGFu
ZCBIZWFwLiAgT24gZGVzdHJ1Y3Rpb24sIHRob3NlIEhlYXBzIHdpbGwgbm93IGJlIGF3YXJlIG9m
CisgICAgICAgICAgIHRoZSBJc29TdWJzcGFjZVBlclZNIGluIHVzZSwgYW5kIHdpbGwgdGVsbCB0
aGUgSXNvU3Vic3BhY2VQZXJWTSB0byByZWxlYXNlCisgICAgICAgICAgIHRoZSBhc3NvY2lhdGVk
IElzb1N1YnNwYWNlcy4KKworICAgICAgICAgICBUaGUgSXNvU3Vic3BhY2VQZXJWTTo6QXV0b3Jl
bW92aW5nSXNvU3Vic3BhY2UgY2xhc3MgaXMgbm93IHJlbW92ZWQgc2luY2UgaXQKKyAgICAgICAg
ICAgaXMgbm90IG5lZWRlZC4KKworICAgICAgICA0LiBQcmV2aW91c2x5LCBpbiBIZWFwLCB3ZSBo
YXZlIHNvbWUgU3BhY2VBbmRTZXQgbWVtYmVycyB0aGF0IHdlcmUgbmFtZWQgc2ltcGx5IGFzCisg
ICAgICAgICAgICJTcGFjZSIuICBSZW5hbWVkIHRoZXNlIHRvIGJlICJTcGFjZUFuZFNldCIgZXhw
bGljaXRseSB0byBtb3JlIGFjY3VyYXRlbHkKKyAgICAgICAgICAgcmVmbGVjdCB3aGF0IHRoZXkg
YXJlLgorCisgICAgICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogQVBJ
L0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Ojpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaDoK
KyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6CisgICAgICAgICogQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmlu
YWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBBUEkvSlND
YWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOgor
ICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6c3Vic3BhY2VGb3IpOgorICAgICAg
ICAqIEFQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KToKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUJsb2NrLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaDoKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0
ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5oOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6
OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjp+SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpk
ZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpHQ0NsaWVudDo6SGVh
cDo6SGVhcCk6CisgICAgICAgIChKU0M6OkdDQ2xpZW50OjpIZWFwOjp+SGVhcCk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmxvY2spOgorICAgICAgICAoSlND
OjpIZWFwOjpmb3JFYWNoQ29kZUJsb2NrU3BhY2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JF
YWNoU2NyaXB0RXhlY3V0YWJsZVNwYWNlKToKKyAgICAgICAgKEpTQzo6R0NDbGllbnQ6OkhlYXA6
OnNlcnZlcik6CisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
Q0NsaWVudDo6SGVhcDo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3Bw
OgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAoSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKToKKyAgICAgICAgKiBoZWFwL0lz
b1N1YnNwYWNlLmg6CisgICAgICAgIChKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZTo6Y2VsbFNp
emUpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJc29T
dWJzcGFjZTo6YWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2VQ
ZXJWTS5jcHA6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlUGVyVk06Oklzb1N1YnNwYWNlUGVy
Vk0pOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZVBlclZNOjppc29TdWJzcGFjZWZvckhlYXAp
OgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZVBlclZNOjpjbGllbnRJc29TdWJzcGFjZWZvclZN
KToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6cmVsZWFzZUlzb1N1YnNwYWNlKToK
KyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6cmVsZWFzZUNsaWVudElzb1N1YnNwYWNl
KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlUGVyVk06
OmZvclZNKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0lzb1N1YnNwYWNlUGVyVk0uaDoKKyAg
ICAgICAgKiBoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxv
Y2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZyk6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2Nh
dG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKToKKyAgICAgICAgKiBoZWFwL0xvY2FsQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpkaXJlY3RvcnkgY29uc3Qp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyk6CisgICAgICAgICogaGVhcC9NdXRhdG9yU3Rh
dGUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQWdn
cmVnYXRlRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0FycmF5SXRlcmF0b3JQ
cm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3Rv
dHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1l
L0FzeW5jSXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0F0b21pY3NPYmpl
Y3QuaDoKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvQmlnSW50UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBy
dW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3Vt
ZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc29sZU9iamVjdC5oOgorICAgICAgICAqIHJ1
bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkN1c3RvbUdldHRlclNl
dHRlcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVy
U2V0dGVyLmg6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2Uu
aDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRh
YmxlLmg6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0ZpbmFsaXphdGlv
blJlZ2lzdHJ5UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaDoKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaDoKKyAgICAgICAgKiBy
dW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9H
ZW5lcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0dldHRlclNldHRlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGVy
bmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmg6CisgICAgICAgICogcnVudGlt
ZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBl
Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmg6CisgICAgICAgICogcnVu
dGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9JbnRs
TGlzdEZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUu
aDoKKyAgICAgICAgKiBydW50aW1lL0ludGxMb2NhbGUuaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dGxMb2NhbGVQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
aDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaDoKKyAgICAg
ICAgKiBydW50aW1lL0ludGxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmg6Cisg
ICAgICAgICogcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Lmg6CisgICAgICAgICogcnVu
dGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGlt
ZS9JbnRsU2VnbWVudEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudEl0
ZXJhdG9yUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudGVyLmg6Cisg
ICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudGVyUHJvdG90eXBlLmg6CisgICAgICAgICogcnVu
dGltZS9JbnRsU2VnbWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50c1Byb3Rv
dHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c3Vic3BhY2VGb3Ip
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUl0ZXJh
dG9yLmg6CisgICAgICAgICogcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmg6CisgICAgICAgICog
cnVudGltZS9KU0JpZ0ludC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmg6
CisgICAgICAgICogcnVudGltZS9KU0NhbGxlZS5oOgorICAgICAgICAoSlNDOjpKU0NhbGxlZTo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNEYXRhVmlldy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3Rv
dHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpz
dWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyYXRvci5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9yKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTWFwLmg6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlUmVj
b3JkLmg6CisgICAgICAgICogcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmg6CisgICAgICAg
ICogcnVudGltZS9KU09OT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2UuaDoK
KyAgICAgICAgKEpTQzo6SlNQcm9taXNlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb21pc2VQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlUHJvdG90eXBl
OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKEpTQzo6SlNQcm94
eTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTU2NyaXB0RmV0Y2hlci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXQuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTU2V0SXRlcmF0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU291
cmNlQ29kZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSXRlcmF0
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmg6Cisg
ICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg6CisgICAgICAgICog
cnVudGltZS9KU1dlYWtPYmplY3RSZWYuaDoKKyAgICAgICAgKiBydW50aW1lL0pTV2l0aFNjb3Bl
Lmg6CisgICAgICAgICogcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvTWFwUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6
CisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL05hdGl2
ZUV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpOdW1iZXJPYmplY3Q6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL09i
amVjdFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAg
ICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvUHJveHlSZXZva2UuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZmxlY3RPYmplY3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAg
KiBydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmg6CisgICAgICAgICogcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50
c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0SXRlcmF0
b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvU2hhZG93UmVhbG1PYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1NoYWRv
d1JlYWxtUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0
cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmg6CisgICAg
ICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3lt
Ym9sLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xPYmplY3QuaDoKKyAgICAgICAgKiBydW50
aW1lL1N5bWJvbFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoK
KyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXIuaDoKKyAgICAgICAgKiBydW50aW1l
L1RlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFs
RHVyYXRpb24uaDoKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUu
aDoKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsSW5zdGFudC5oOgorICAgICAgICAqIHJ1bnRp
bWUvVGVtcG9yYWxJbnN0YW50UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9UZW1wb3Jh
bE5vdy5oOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3QuaDoKKyAgICAgICAgKiBy
dW50aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmg6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbFBs
YWluVGltZVByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmFycmF5U3BhY2UpOgorICAgICAgICAoSlND
OjpWTTo6YmlnSW50U3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6Y2FsbGVlU3BhY2UpOgorICAg
ICAgICAoSlNDOjpWTTo6Y2xvbmVkQXJndW1lbnRzU3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6
Y3VzdG9tR2V0dGVyU2V0dGVyU3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6ZGF0ZUluc3RhbmNl
U3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6ZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3BhY2Up
OgorICAgICAgICAoSlNDOjpWTTo6ZXhjZXB0aW9uU3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6
ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKToKKyAgICAgICAgKEpTQzo6Vk06OmZ1bmN0
aW9uU3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0dGVyU2V0dGVyU3BhY2UpOgorICAgICAg
ICAoSlNDOjpWTTo6Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2UpOgorICAgICAgICAoSlND
OjpWTTo6aW50ZXJuYWxGdW5jdGlvblNwYWNlKToKKyAgICAgICAgKEpTQzo6Vk06OmpzUHJveHlT
cGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpuYXRpdmVFeGVjdXRhYmxlU3BhY2UpOgorICAgICAg
ICAoSlNDOjpWTTo6bnVtYmVyT2JqZWN0U3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6cGxhaW5P
YmplY3RTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpwcm9taXNlU3BhY2UpOgorICAgICAgICAo
SlNDOjpWTTo6cHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlKToKKyAgICAgICAgKEpTQzo6Vk06
OnByb3BlcnR5VGFibGVTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpyZWdFeHBTcGFjZSk6Cisg
ICAgICAgIChKU0M6OlZNOjpyZWdFeHBPYmplY3RTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpy
b3BlU3RyaW5nU3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6c2NvcGVkQXJndW1lbnRzU3BhY2Up
OgorICAgICAgICAoSlNDOjpWTTo6c3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlKToKKyAgICAgICAg
KEpTQzo6Vk06OnN0cmluZ1NwYWNlKToKKyAgICAgICAgKEpTQzo6Vk06OnN0cmluZ09iamVjdFNw
YWNlKToKKyAgICAgICAgKEpTQzo6Vk06OnN0cnVjdHVyZUNoYWluU3BhY2UpOgorICAgICAgICAo
SlNDOjpWTTo6c3RydWN0dXJlUmFyZURhdGFTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpzdHJ1
Y3R1cmVTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpicmFuZGVkU3RydWN0dXJlU3BhY2UpOgor
ICAgICAgICAoSlNDOjpWTTo6c3ltYm9sVGFibGVTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpj
b2RlQmxvY2tTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpmdW5jdGlvbkV4ZWN1dGFibGVTcGFj
ZSk6CisgICAgICAgIChKU0M6OlZNOjpwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKToKKyAgICAgICAg
KEpTQzo6Vk06OnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UpOgorICAgICAgICAqIHJ1
bnRpbWUvV2Vha01hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OnN1YnNwYWNl
Rm9yKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL1dlYWtPYmplY3RSZWZQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtT
ZXRQcm90b3R5cGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlFeGNlcHRpb24uaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9i
YWwuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
Lmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFs
UHJvdG90eXBlLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlUHJvdG90
eXBlLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5o
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaDoKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmg6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJv
dG90eXBlLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
OgorCiAyMDIyLTAyLTE3ICBNaWtoYWlsIFIuIEdhZGVsaGEgIDxtaWtoYWlsQGlnYWxpYS5jb20+
CiAKICAgICAgICAgWzMyYml0XSBJbmNyZWFzZSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6
ZSBvbiBBUk0gdG8gMzJNQgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNB
UElHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0
MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0uYXBpR2xvYmFsT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmFwaVZhbHVlV3JhcHBlclNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdy
YXBwZXJPYmplY3QubW0JKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM5LDcgKzEz
OSw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW0KIERFRklORV9W
SVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKEpTX0VYUE9SVF9QUklWQVRFLCBKU0FQSVdyYXBw
ZXJPYmplY3QpOwogCiB0ZW1wbGF0ZSA8PgotSXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdy
YXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
KQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nlc3M6Ok9uTWFp
blRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcg
KzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2bS5jYWxsYmFja0NvbnN0cnVjdG9yU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1
bmN0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5jYWxs
YmFja0Z1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMjAsNyAr
MTIwLDcgQEAgU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZQogfQogCiB0
ZW1wbGF0ZSA8PgotSXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCitHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVjdD46OnN1YnNw
YWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CiAgICAgc3dpdGNoICht
b2RlKSB7CiAgICAgY2FzZSBTdWJzcGFjZUFjY2Vzczo6T25NYWluVGhyZWFkOgpAQCAtMTMzLDcg
KzEzMyw3IEBAIElzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWwKIH0KIAog
dGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0
Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKK0dDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2Rl
KSB7CiAgICAgY2FzZSBTdWJzcGFjZUFjY2Vzczo6T25NYWluVGhyZWFkOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTUy
LDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtLCBt
b2RlKTsKICAgICB9CkBAIC0xOTksNyArMTk5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogCi0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mLCBTdWJzcGFj
ZUFjY2Vzcyk7CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKFZNJiwgU3Vic3BhY2VBY2Nlc3MpOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMX0FUVFJJQlVURVMgY3VzdG9tVG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxi
YWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5vYmpDQ2FsbGJh
Y2tGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0FQSVdyYXBwZXJHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODksNyArOTAsNyBAQCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
YyBKU0NhbGxiYWNrT2JqCiB9CiAKIHRlbXBsYXRlIDw+Ci1Jc29TdWJzcGFjZSogSlNDYWxsYmFj
a09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZt
LCBTdWJzcGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0NhbGxiYWNr
T2JqZWN0PEpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0s
IFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBT
dWJzcGFjZUFjY2Vzczo6T25NYWluVGhyZWFkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3Jh
cHBlck9iamVjdEdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDcgQEAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmMgSlNDYWxsYmFja09iagogfQogCiB0ZW1wbGF0ZSA8PgotSXNvU3Vic3BhY2UqIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgU3Vic3BhY2VBY2Nl
c3M6Ok9uTWFpblRocmVhZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlh
IFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0uanNjQ2FsbGJhY2tGdW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xMDc2LDcgKzEwNzYsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihW
aXNpdG9yJiB2CiAgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMobG9ja2VyLCB2aXNp
dG9yKTsKICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB2aXNpdG9yKTsK
ICAgICAKLSAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMp
OworICAgIEhlYXA6OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpLmFkZCh0aGlzKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTE2NjQsNyArMTY2NCw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICB9OwogICAgIHVwZGF0
ZUFjdGl2aXR5KCk7CiAKLSAgICBWTTo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSku
cmVtb3ZlKHRoaXMpOworICAgIEhlYXA6OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkp
LnJlbW92ZSh0aGlzKTsKIAogICAgIC8vIEluIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmds
eSgpIHdlIG1heSBoYXZlIGRlY2lkZWQgdG8gc2tpcCB2aXNpdGluZyB0aGlzCiAgICAgLy8gY29k
ZUJsb2NrLiBCeSB0aGUgdGltZSB3ZSBnZXQgaGVyZSwgd2UncmUgZG9uZSB3aXRoIHRoZSB2ZXJp
ZmllciBHQy4gU28sIGxldCdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXZhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FdmFsQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8
Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM5LDkgKzM5LDkg
QEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewotICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCkuc3BhY2U7CisgICAg
ICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKTsKICAgICB9CiAKICAgICBzdGF0aWMgRXZh
bENvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJs
b2NrJiBvdGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
U3BhY2UoKTsKICAgICB9CkBAIC05MCw0ICs5MCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0
aW9uQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3
YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MCw5
ICs0MCw5IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNl
OworICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3Rh
dGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNh
PgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAgICAgREVDTEFS
RV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVy
biAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxv
Y2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sm
IG90aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJv
Z3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MCw5ICs0MCw5IEBA
IHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFjZSgpLnNwYWNlOworICAgICAg
ICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb2dy
YW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNv
ZGVCbG9jayYgb3RoZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRFdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnVubGlua2VkRXZhbENvZGVCbG9ja1NwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS51bmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjIgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTEsNyAr
MjUxLDggQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdAogICAgICAg
ICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LnNldCh2bSwgdGhpcywgcmVzdWx0KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHZtLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2UoKS5zZXQuYWRkKHRoaXMpOworICAgIC8vIEZJWE1FIEdsb2JhbEdDOiBOZWVkIHN5bmNy
aG9uaXphdGlvbiBoZXJlIGZvciBhY2Nlc3NpbmcgdGhlIEhlYXAgc2VydmVyLgorICAgIHZtLmhl
YXAudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQuYWRkKHRoaXMpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMwOSw4ICszMTAsMTAgQEAgdm9pZCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluYWxpegogICAgICAgICB9OwogICAgICAgICBjbGVhcklm
RGVhZChtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgICAgIGNsZWFySWZEZWFkKG1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgICAgICBpZiAoaXNDbGVhcmVkICYm
ICFpc1N0aWxsVmFsaWQpCi0gICAgICAgICAgICB2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZVNwYWNlKCkuc2V0LnJlbW92ZSh0aGlzKTsKKyAgICAgICAgaWYgKGlzQ2xlYXJlZCAmJiAhaXNT
dGlsbFZhbGlkKSB7CisgICAgICAgICAgICAvLyBGSVhNRSBHbG9iYWxHQzogTmVlZCBzeW5jcmhv
bml6YXRpb24gaGVyZSBmb3IgYWNjZXNzaW5nIHRoZSBIZWFwIHNlcnZlci4KKyAgICAgICAgICAg
IHZtLmhlYXAudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQucmVtb3Zl
KHRoaXMpOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw5ICs2Niw5
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVybiAmdm0udW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpLnNwYWNlOworICAgICAgICByZXR1cm4gJnZt
LnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKTsKICAgICB9CiAKICAgICBzdGF0aWMg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25L
aW5kIHVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxp
dHksIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBSZWZQdHI8VERaRW52aXJvbm1lbnRM
aW5rPiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgc3RkOjpvcHRpb25hbDxQcml2YXRlTmFtZUVu
dmlyb25tZW50PiBwYXJlbnRQcml2YXRlTmFtZUVudmlyb25tZW50LCBEZXJpdmVkQ29udGV4dFR5
cGUgZGVyaXZlZENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciBuZWVkc0Ns
YXNzRmllbGRJbml0aWFsaXplciwgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgcHJpdmF0ZUJyYW5k
UmVxdWlyZW1lbnQsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgPSBmYWxz
ZSkKQEAgLTEzMiw3ICsxMzIsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3VubGlua2Vk
Q29kZUJsb2NrRm9yQ2FsbC5jbGVhcigpOwogICAgICAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0LmNsZWFyKCk7Ci0gICAgICAgIHZtLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2UoKS5zZXQucmVtb3ZlKHRoaXMpOworICAgICAgICAvLyBGSVhNRSBHbG9iYWxHQzogTmVl
ZCBzeW5jcmhvbml6YXRpb24gaGVyZSBmb3IgYWNjZXNzaW5nIHRoZSBIZWFwIHNlcnZlci4KKyAg
ICAgICAgdm0uaGVhcC51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNldC5y
ZW1vdmUodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMg
ZmVhdHVyZXMsIExleGljYWxTY29wZUZlYXR1cmVzIGxleGljYWxTY29wZUZlYXR1cmVzLCBib29s
IGhhc0NhcHR1cmVkVmFyaWFibGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlz
SW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0udW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJT
Y29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlclNjb3BlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmRlYnVn
Z2VyU2NvcGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNpbmNsdWRlICJJ
c29JbmxpbmVkSGVhcENlbGxUeXBlSW5saW5lcy5oIgorI2luY2x1ZGUgIklzb1N1YnNwYWNlUGVy
Vk0uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUgIkpJVFdvcmts
aXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKQEAgLTM5
MywxMCArMzk0LDEwIEBAIEhlYXA6OkhlYXAoVk0mIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICAsIHN5bWJvbFRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJs
ZUNlbGxIZWFwQ2VsbFR5cGUsIFN5bWJvbFRhYmxlKSAvLyBIYXNoOjB4YzUyMTVhZmQKICAgICAs
IGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKGV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2VTcGFjZSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZp
bmFsaXplcnMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQotICAgICwgY29kZUJsb2Nr
U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5
cGUsIENvZGVCbG9jaykgLy8gSGFzaDoweDc3ZTY2ZWM5Ci0gICAgLCBmdW5jdGlvbkV4ZWN1dGFi
bGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxs
VHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NWQxNThmMwotICAgICwgcHJvZ3Jh
bUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2Vs
bEhlYXBDZWxsVHlwZSwgUHJvZ3JhbUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNwotICAg
ICwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhp
cywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUpIC8vIEhhc2g6MHhmNmI4MjhkOQorICAgICwgY29kZUJsb2NrU3BhY2VBbmRTZXQgSVNPX1NV
QlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIENvZGVCbG9j
aykgLy8gSGFzaDoweDc3ZTY2ZWM5CisgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNl
dCBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwg
RnVuY3Rpb25FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NWQxNThmMworICAgICwgcHJvZ3JhbUV4ZWN1
dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2Vs
bEhlYXBDZWxsVHlwZSwgUHJvZ3JhbUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNworICAg
ICwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0VfSU5J
VCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUpIC8vIEhhc2g6MHhmNmI4MjhkOQogCiB7CiAgICAgbV93b3JsZFN0YXRlLnN0b3Jl
KDApOwpAQCAtNDQ3LDYgKzQ0OCw5IEBAIEhlYXA6On5IZWFwKCkKICAgICAKICAgICBmb3IgKFdl
YWtCbG9jayogYmxvY2sgOiBtX2xvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcykKICAgICAgICAgV2Vh
a0Jsb2NrOjpkZXN0cm95KCp0aGlzLCBibG9jayk7CisKKyAgICBmb3IgKGF1dG8qIHBlclZNSXNv
U3Vic3BhY2UgOiBwZXJWTUlzb1N1YnNwYWNlcykKKyAgICAgICAgcGVyVk1Jc29TdWJzcGFjZS0+
cmVsZWFzZUlzb1N1YnNwYWNlKCp0aGlzKTsKIH0KIAogYm9vbCBIZWFwOjppc1BhZ2VkT3V0KCkK
QEAgLTY5MSw3ICs2OTUsNyBAQCB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB2bS5idWlsdGluRXhlY3V0YWJs
ZXMoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2Uuc3BhY2UpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8
RnVuY3Rpb25FeGVjdXRhYmxlPihmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zcGFjZSk7
CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTeW1ib2xUYWJsZT4o
c3ltYm9sVGFibGVTcGFjZSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxp
emVyczxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPihleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
c1dpdGhGaW5hbGl6ZXJzKTsgLy8gV2UgcnVuIHRoaXMgYmVmb3JlIENvZGVCbG9jaydzIHVuY29u
ZGl0aW9uYWwgZmluYWxpemVyIHNpbmNlIENvZGVCbG9jayBsb29rcyBhdCB0aGUgb3duZXIgZXhl
Y3V0YWJsZSdzIGluc3RhbGxlZCBDb2RlQmxvY2sgaW4gaXRzIGZpbmFsaXplVW5jb25kaXRpb25h
bGx5LgogICAgIGZvckVhY2hDb2RlQmxvY2tTcGFjZSgKQEAgLTY5OSw3ICs3MDMsNyBAQCB2b2lk
IEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplCiAgICAgICAgICAgICB0aGlzLT5m
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPENvZGVCbG9jaz4oc3BhY2Uuc2V0
KTsKICAgICAgICAgfSk7CiAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVy
czxTdHJ1Y3R1cmVSYXJlRGF0YT4oc3RydWN0dXJlUmFyZURhdGFTcGFjZSk7Ci0gICAgZmluYWxp
emVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZT4odW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQpOworICAgIGZpbmFsaXplTWFy
a2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc2V0KTsKICAgICBpZiAobV93ZWFr
U2V0U3BhY2UpCiAgICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8
SlNXZWFrU2V0PigqbV93ZWFrU2V0U3BhY2UpOwogICAgIGlmIChtX3dlYWtNYXBTcGFjZSkKQEAg
LTEwNTcsNyArMTA2MSw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tz
KEQKICAgICBSRUxFQVNFX0FTU0VSVCghbV9jb2xsZWN0aW9uU2NvcGUpOwogCiAgICAgSGVhcEl0
ZXJhdGlvblNjb3BlIGhlYXBJdGVyYXRpb25TY29wZSgqdGhpcyk7Ci0gICAgdW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQuZm9yRWFjaExpdmVDZWxsKAorICAgIHVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc2V0LmZvckVhY2hMaXZlQ2VsbCgKICAgICAgICAg
WyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmNsZWFy
Q29kZSh2bSk7CkBAIC0zMzAzLDQgKzMzMDcsMTgyIEBAIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9E
RUZJTkVfTUVNQkVSX1NMT1cKIAogI3VuZGVmIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVf
TUVNQkVSX1NMT1cKIAorCituYW1lc3BhY2UgR0NDbGllbnQgeworCisjZGVmaW5lIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChzdWJzcGFjZSkgc3Vic3BhY2UoaGVhcC5zdWJzcGFjZSkKKyNkZWZp
bmUgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChzdWJzcGFjZSkg
c3Vic3BhY2UoaGVhcC5zdWJzcGFjZSMjQW5kU2V0LnNwYWNlKQorCitIZWFwOjpIZWFwKEpTQzo6
SGVhcCYgaGVhcCkKKyAgICA6IG1fc2VydmVyKGhlYXApCisgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVQoYXJyYXlTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChiaWdJ
bnRTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjYWxsZWVTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjbG9uZWRBcmd1bWVudHNTcGFjZSkKKyAgICAs
IENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChjdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZSkKKyAgICAs
IENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChkYXRlSW5zdGFuY2VTcGFjZSkKKyAgICAsIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChkb21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZSkKKyAgICAs
IENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChleGNlcHRpb25TcGFjZSkKKyAgICAsIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVChleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCisgICAgLCBD
TElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoZnVuY3Rpb25TcGFjZSkKKyAgICAsIENMSUVOVF9JU09f
U1VCU1BBQ0VfSU5JVChnZXR0ZXJTZXR0ZXJTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZSkKKyAgICAsIENMSUVOVF9JU09f
U1VCU1BBQ0VfSU5JVChpbnRlcm5hbEZ1bmN0aW9uU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NV
QlNQQUNFX0lOSVQoanNQcm94eVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklU
KG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChu
dW1iZXJPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwbGFpbk9i
amVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHByb21pc2VTcGFjZSkK
KyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3Bh
Y2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQocHJvcGVydHlUYWJsZVNwYWNlKQor
ICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHJlZ0V4cFNwYWNlKQorICAgICwgQ0xJRU5U
X0lTT19TVUJTUEFDRV9JTklUKHJlZ0V4cE9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19T
VUJTUEFDRV9JTklUKHJvcGVTdHJpbmdTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0Vf
SU5JVChzY29wZWRBcmd1bWVudHNTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5J
VChzcGFyc2VBcnJheVZhbHVlTWFwU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lO
SVQoc3RyaW5nU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3RyaW5nT2Jq
ZWN0U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQoc3RydWN0dXJlQ2hhaW5T
cGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzdHJ1Y3R1cmVSYXJlRGF0YVNw
YWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKHN0cnVjdHVyZVNwYWNlKQorICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZSkKKyAgICAs
IENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChzeW1ib2xUYWJsZVNwYWNlKQorICAgICwgQ0xJRU5U
X0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5EX1NFVChjb2RlQmxvY2tTcGFjZSkKKyAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQoZnVuY3Rpb25F
eGVjdXRhYmxlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVRfRlJPTV9TUEFD
RV9BTkRfU0VUKHByb2dyYW1FeGVjdXRhYmxlU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVRfRlJPTV9TUEFDRV9BTkRfU0VUKHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2UpCit7Cit9CisKK0hlYXA6On5IZWFwKCkKK3sKKyAgICBmb3IgKGF1dG8qIHBlclZNSXNvU3Vi
c3BhY2UgOiBwZXJWTUlzb1N1YnNwYWNlcykKKyAgICAgICAgcGVyVk1Jc29TdWJzcGFjZS0+cmVs
ZWFzZUNsaWVudElzb1N1YnNwYWNlKHZtKCkpOworfQorCisjdW5kZWYgQ0xJRU5UX0lTT19TVUJT
UEFDRV9JTklUCisjdW5kZWYgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUX0ZST01fU1BBQ0VfQU5E
X1NFVAorCisKKyNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KG5hbWUpIFwKKyAgICBJc29TdWJzcGFjZSogSGVhcDo6bmFtZSMjU2xvdygpIFwKKyAgICB7IFwK
KyAgICAgICAgQVNTRVJUKCFtXyMjbmFtZSk7IFwKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IHNl
cnZlcigpLm1fbG9jayB9OyBcCisgICAgICAgIEpTQzo6SXNvU3Vic3BhY2UmIHNlcnZlclNwYWNl
ID0gKnNlcnZlcigpLm5hbWU8U3Vic3BhY2VBY2Nlc3M6Ok9uTWFpblRocmVhZD4oKTsgXAorICAg
ICAgICBhdXRvIHNwYWNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4oc2VydmVyU3BhY2UpOyBc
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IFwKKyAgICAgICAgbV8jI25hbWUgPSBX
VEZNb3ZlKHNwYWNlKTsgXAorICAgICAgICByZXR1cm4gbV8jI25hbWUuZ2V0KCk7IFwKKyAgICB9
CisKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlHbG9iYWxPYmpl
Y3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlWYWx1
ZVdyYXBwZXJTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhh
cnJheUJ1ZmZlclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KGFycmF5SXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhhc3luY0dlbmVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGJpZ0ludDY0QXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhiaWdJbnRPYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhiaWdVaW50NjRBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKGJvb2xlYW5PYmplY3RTcGFjZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhib3VuZEZ1bmN0aW9uU3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2FsbGJhY2tDb25zdHJ1Y3RvclNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrR2xvYmFsT2Jq
ZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2FsbGJh
Y2tGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KGNhbGxiYWNrT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coY3VzdG9tR2V0dGVyRnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGRhdGFWaWV3U3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZGVidWdnZXJTY29wZVNwYWNlKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGVycm9ySW5zdGFuY2VTcGFjZSkKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmbG9hdDMyQXJyYXlTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmbG9hdDY0QXJyYXlTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmdW5jdGlvblJhcmVEYXRh
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZ2VuZXJhdG9y
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZ2xvYmFsT2Jq
ZWN0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW5qZWN0
ZWRTY3JpcHRIb3N0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1coaW50OEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1coaW50MTZBcnJheVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGludDMyQXJyYXlTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coanNNb2R1bGVSZWNvcmRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhtYXBCdWNrZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhtYXBJdGVyYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKG1hcFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKG1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlPYmplY3RTcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9rZVNwYWNlKQor
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHJlbW90ZUZ1bmN0aW9uU3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NvcGVkQXJndW1l
bnRzVGFibGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhz
Y3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhzY3JpcHRGZXRjaGVyU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coc2V0QnVja2V0U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coc2V0SXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhzZXRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhzaGFkb3dSZWFsbVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHN0cmljdEV2YWxBY3RpdmF0aW9uU3BhY2UpCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3RyaW5nSXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzb3VyY2VDb2RlU3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3ltYm9sU3BhY2UpCitEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3ltYm9sT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcGxhdGVPYmplY3REZXNjcmlwdG9yU3Bh
Y2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxDYWxl
bmRhclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBv
cmFsRHVyYXRpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyh0ZW1wb3JhbEluc3RhbnRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyh0ZW1wb3JhbFBsYWluVGltZVNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsVGltZVpvbmVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyh1aW50OEFycmF5U3BhY2UpCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codWludDhDbGFtcGVkQXJyYXlTcGFjZSkKK0RZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1aW50MTZBcnJheVNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVpbnQzMkFycmF5U3BhY2UpCitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRFdmFsQ29kZUJsb2Nr
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9ja1NwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1NwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1NwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYWtNYXBTcGFjZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWFrU2V0U3BhY2UpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2Vha09iamVjdFJlZlNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdpdGhTY29wZVNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGZpbmFsaXphdGlvblJl
Z2lzdHJ5U3BhY2UpCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKK0RZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cob2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFjZSkK
KyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECitEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpV3JhcHBlck9iamVjdFNwYWNlKQorRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzY0NhbGxiYWNrRnVuY3Rpb25TcGFjZSkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja0FQSVdyYXBwZXJH
bG9iYWxPYmplY3RTcGFjZSkKKyNlbmRpZgorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGludGxDb2xsYXRvclNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGludGxEYXRlVGltZUZvcm1hdFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxEaXNwbGF5TmFtZXNTcGFjZSkKK0RZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTGlzdEZvcm1hdFNwYWNlKQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxMb2NhbGVTcGFjZSkKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTnVtYmVyRm9ybWF0U3BhY2Up
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFBsdXJhbFJ1bGVz
U3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFJlbGF0
aXZlVGltZUZvcm1hdFNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudGVyU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3BhY2UpCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9XYXNtSUND
YWxsZWVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJB
c3NlbWJseUV4Y2VwdGlvblNwYWNlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlKQorRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZSkKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseU1lbW9yeVNwYWNl
KQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9k
dWxlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmRTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyh3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlUYWdTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlKQorI2Vu
ZGlmCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZXZhbEV4ZWN1dGFi
bGVTcGFjZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhtb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZVNwYWNlKQorCisjdW5kZWYgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XCisKK30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw2ICs3Myw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBI
ZWFwVmVyaWZpZXI7CiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7CitjbGFzcyBJc29TdWJzcGFj
ZVBlclZNOwogY2xhc3MgSklUU3R1YlJvdXRpbmU7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsK
IGNsYXNzIEpTQ2VsbDsKQEAgLTEwNiw2ICsxMDcsMTAgQEAgbmFtZXNwYWNlIERGRyB7CiBjbGFz
cyBTcGVjdWxhdGl2ZUpJVDsKIH0KIAorbmFtZXNwYWNlIEdDQ2xpZW50IHsKK2NsYXNzIEhlYXA7
Cit9CisKIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50U2V0Owog
dHlwZWRlZiBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4gVHlwZUNvdW50U2V0OwogCkBAIC00
MDYsNiArNDExLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OwogICAg
IGZyaWVuZCBjbGFzcyBIZWFwVXRpbDsKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwor
ICAgIGZyaWVuZCBjbGFzcyBJc29TdWJzcGFjZVBlclZNOwogICAgIGZyaWVuZCBjbGFzcyBKSVRT
dHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAg
IGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKQEAgLTQyNSw2ICs0MzEs
OCBAQCBwcml2YXRlOgogICAgIGNsYXNzIEhlYXBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIEhl
YXBUaHJlYWQ7CiAKKyAgICBmcmllbmQgY2xhc3MgR0NDbGllbnQ6OkhlYXA7CisKICAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBtaW5FeHRyYU1lbW9yeSA9IDI1NjsKICAgICAKICAgICBjbGFz
cyBDRmluYWxpemVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKQEAgLTQz
NSw2ICs0NDMsOCBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtu
b3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsKIAorICAgIExvY2smIGxvY2soKSB7
IHJldHVybiBtX2xvY2s7IH0KKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZShzaXplX3QpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5U2xvd0Nhc2Uoc2l6ZV90KTsKICAgICAK
QEAgLTU3NSw2ICs1ODUsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgdmVyaWZ5R0MoKTsK
IAorICAgIExvY2sgbV9sb2NrOwogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAg
TXV0YXRvclN0YXRlIG1fbXV0YXRvclN0YXRlIHsgTXV0YXRvclN0YXRlOjpSdW5uaW5nIH07CiAg
ICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTg3OSw3ICs4OTAsNiBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UqIG5hbWUjI1Nsb3coKTsgXAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV8jI25hbWU7CiAKLQogI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFw
cGVyT2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihv
YmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQpAQCAtMTAyMiwzNCArMTAzMiwyMTggQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihTcGFjZUFuZFNldCwgc2V0KSk7CiAg
ICAgICAgIH0KICAgICB9OwotICAgIAotICAgIFNwYWNlQW5kU2V0IGNvZGVCbG9ja1NwYWNlOwor
CisgICAgU3BhY2VBbmRTZXQgY29kZUJsb2NrU3BhY2VBbmRTZXQ7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaENvZGVCbG9ja1NwYWNlKGNvbnN0IEZ1bmMm
IGZ1bmMpCiAgICAgewotICAgICAgICBmdW5jKGNvZGVCbG9ja1NwYWNlKTsKKyAgICAgICAgZnVu
Yyhjb2RlQmxvY2tTcGFjZUFuZFNldCk7CiAgICAgfQogCiAgICAgRFlOQU1JQ19TUEFDRV9BTkRf
U0VUX0RFRklORV9NRU1CRVIoZXZhbEV4ZWN1dGFibGVTcGFjZSkKICAgICBEWU5BTUlDX1NQQUNF
X0FORF9TRVRfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQotICAg
IFNwYWNlQW5kU2V0IGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOwotICAgIFNwYWNlQW5kU2V0IHBy
b2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgU3BhY2VBbmRTZXQgZnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2VBbmRTZXQ7CisgICAgU3BhY2VBbmRTZXQgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZUFuZFNl
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2NyaXB0
RXhlY3V0YWJsZVNwYWNlKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewogICAgICAgICBpZiAobV9l
dmFsRXhlY3V0YWJsZVNwYWNlKQogICAgICAgICAgICAgZnVuYygqbV9ldmFsRXhlY3V0YWJsZVNw
YWNlKTsKLSAgICAgICAgZnVuYyhmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSk7CisgICAgICAgIGZ1
bmMoZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQpOwogICAgICAgICBpZiAobV9tb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZVNwYWNlKQogICAgICAgICAgICAgZnVuYygqbV9tb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZVNwYWNlKTsKLSAgICAgICAgZnVuYyhwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKTsK
KyAgICAgICAgZnVuYyhwcm9ncmFtRXhlY3V0YWJsZVNwYWNlQW5kU2V0KTsKICAgICB9CiAKLSAg
ICBTcGFjZUFuZFNldCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIFNwYWNl
QW5kU2V0IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQ7CiAKKyAgICBWZWN0
b3I8SXNvU3Vic3BhY2VQZXJWTSo+IHBlclZNSXNvU3Vic3BhY2VzOwogI3VuZGVmIERZTkFNSUNf
U1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSCiB9OwogCituYW1lc3BhY2UgR0NDbGllbnQgewor
CitjbGFzcyBIZWFwIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwKTsKK3B1YmxpYzoK
KyAgICBIZWFwKEpTQzo6SGVhcCYpOworICAgIH5IZWFwKCk7CisKKyAgICBWTSYgdm0oKSBjb25z
dDsKKyAgICBKU0M6OkhlYXAmIHNlcnZlcigpIHsgcmV0dXJuIG1fc2VydmVyOyB9CisKKyAgICAv
LyBGSVhNRSBHbG9iYWxHQzogbmVlZCBhIEdDQ2xpZW50OjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSgpIGFuZCBpbiB0aGVyZSwKKyAgICAvLyByZWxpbnF1aXNoIG1lbW9yeSBmcm9tIHRoZSBJ
c29TdWJzcGFjZSBMb2NhbEFsbG9jYXRvcnMgYmFjayB0byB0aGUgc2VydmVyLgorICAgIC8vIEN1
cnJlbnRseSwgdGhpcyBpcyBiZWluZyBoYW5kbGVkIGJ5IEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxs
b2NhdGluZ0Zvckdvb2QoKS4KKworcHJpdmF0ZToKKyAgICBKU0M6OkhlYXAmIG1fc2VydmVyOwor
CisgICAgSXNvU3Vic3BhY2UgYXJyYXlTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBiaWdJbnRTcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSBjYWxsZWVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBjbG9uZWRB
cmd1bWVudHNTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBjdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZTsK
KyAgICBJc29TdWJzcGFjZSBkYXRlSW5zdGFuY2VTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBkb21B
dHRyaWJ1dGVHZXR0ZXJTZXR0ZXJTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBleGNlcHRpb25TcGFj
ZTsKKyAgICBJc29TdWJzcGFjZSBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2U7CisgICAg
SXNvU3Vic3BhY2UgZnVuY3Rpb25TcGFjZTsKKyAgICBJc29TdWJzcGFjZSBnZXR0ZXJTZXR0ZXJT
cGFjZTsKKyAgICBJc29TdWJzcGFjZSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsKKyAg
ICBJc29TdWJzcGFjZSBpbnRlcm5hbEZ1bmN0aW9uU3BhY2U7CisgICAgSXNvU3Vic3BhY2UganNQ
cm94eVNwYWNlOworICAgIElzb1N1YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKKyAgICBJ
c29TdWJzcGFjZSBudW1iZXJPYmplY3RTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwbGFpbk9iamVj
dFNwYWNlOworICAgIElzb1N1YnNwYWNlIHByb21pc2VTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBw
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgcHJvcGVydHlUYWJs
ZVNwYWNlOworICAgIElzb1N1YnNwYWNlIHJlZ0V4cFNwYWNlOworICAgIElzb1N1YnNwYWNlIHJl
Z0V4cE9iamVjdFNwYWNlOworICAgIElzb1N1YnNwYWNlIHJvcGVTdHJpbmdTcGFjZTsKKyAgICBJ
c29TdWJzcGFjZSBzY29wZWRBcmd1bWVudHNTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzcGFyc2VB
cnJheVZhbHVlTWFwU3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RyaW5nU3BhY2U7CisgICAgSXNv
U3Vic3BhY2Ugc3RyaW5nT2JqZWN0U3BhY2U7CisgICAgSXNvU3Vic3BhY2Ugc3RydWN0dXJlQ2hh
aW5TcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlOworICAgIElz
b1N1YnNwYWNlIHN0cnVjdHVyZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGJyYW5kZWRTdHJ1Y3R1
cmVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBzeW1ib2xUYWJsZVNwYWNlOworCisjZGVmaW5lIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmFtZSkgXAorICAgIHRlbXBsYXRlPFN1
YnNwYWNlQWNjZXNzIG1vZGU+IFwKKyAgICBJc29TdWJzcGFjZSogbmFtZSgpIFwKKyAgICB7IFwK
KyAgICAgICAgaWYgKG1fIyNuYW1lIHx8IG1vZGUgPT0gU3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkgXAorICAgICAgICAgICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgICAgIHJl
dHVybiBuYW1lIyNTbG93KCk7IFwKKyAgICB9IFwKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29T
dWJzcGFjZSogbmFtZSMjU2xvdygpOyBcCisgICAgc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PiBtXyMjbmFtZTsKKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihvYmpDQ2FsbGJhY2tGdW5jdGlvblNwYWNlKQor
I2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKGFwaVdyYXBwZXJPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzY0NhbGxiYWNrRnVuY3Rpb25TcGFjZSkKKyAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNrQVBJV3JhcHBlckdsb2Jh
bE9iamVjdFNwYWNlKQorI2VuZGlmCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihhcGlHbG9iYWxPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKGFwaVZhbHVlV3JhcHBlclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoYXJyYXlCdWZmZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGFycmF5SXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKGFzeW5jR2VuZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdJbnQ2NEFycmF5U3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdJbnRPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGJpZ1VpbnQ2NEFycmF5U3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihib29sZWFuT2JqZWN0U3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihib3VuZEZ1bmN0aW9uU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0NvbnN0cnVjdG9y
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0ds
b2JhbE9iamVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
Y2FsbGJhY2tGdW5jdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoY2FsbGJhY2tPYmplY3RTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKGN1c3RvbUdldHRlckZ1bmN0aW9uU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihjdXN0b21TZXR0ZXJGdW5jdGlvblNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZGF0YVZpZXdTcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGRlYnVnZ2VyU2NvcGVTcGFjZSkKKyAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGVycm9ySW5zdGFuY2VTcGFjZSkKKyAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGZsb2F0MzJBcnJheVNwYWNlKQorICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZmxvYXQ2NEFycmF5U3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihmdW5jdGlvblJhcmVEYXRhU3Bh
Y2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihnZW5lcmF0b3JTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGdsb2JhbE9iamVjdFNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW5qZWN0ZWRTY3Jp
cHRIb3N0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnQ4
QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludDE2
QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludDMy
QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGphdmFT
Y3JpcHRDYWxsRnJhbWVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKGpzTW9kdWxlUmVjb3JkU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihtYXBCdWNrZXRTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKG1hcEl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihtYXBTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KG1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihwcm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRlcnNT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNo
ZXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNldEJ1Y2tl
dFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2V0SXRlcmF0
b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNldFNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2hhZG93UmVhbG1TcGFj
ZSk7CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzdHJpY3RFdmFsQWN0
aXZhdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc3Ry
aW5nSXRlcmF0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHNvdXJjZUNvZGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHN5bWJvbFNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc3lt
Ym9sT2JqZWN0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHRlbXBvcmFsQ2FsZW5kYXJTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsRHVyYXRpb25TcGFjZSkKKyAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsSW5zdGFudFNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxQbGFpblRpbWVTcGFjZSkKKyAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsVGltZVpvbmVTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVpbnQ4QXJyYXlTcGFj
ZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVpbnQ4Q2xhbXBlZEFy
cmF5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1aW50MTZB
cnJheVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodWludDMy
QXJyYXlTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVubGlu
a2VkRXZhbENvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIodW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1bmxpbmtlZFByb2dyYW1D
b2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGZp
bmFsaXphdGlvblJlZ2lzdHJ5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUih3ZWFrT2JqZWN0UmVmU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3ZWFrU2V0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUih3ZWFrTWFwU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUih3aXRoU2NvcGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKGludGxDb2xsYXRvclNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50bERhdGVUaW1lRm9ybWF0U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihpbnRsRGlzcGxheU5hbWVzU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihpbnRsTGlzdEZvcm1hdFNwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bExvY2FsZVNwYWNlKQorICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bE51bWJlckZvcm1hdFNwYWNlKQorICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFBsdXJhbFJ1bGVzU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsUmVsYXRpdmVUaW1lRm9ybWF0
U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVu
dEl0ZXJhdG9yU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihp
bnRsU2VnbWVudGVyU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihpbnRsU2VnbWVudHNTcGFjZSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUV4Y2VwdGlvblNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlG
dW5jdGlvblNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2Vi
QXNzZW1ibHlHbG9iYWxTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHdlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TWVtb3J5U3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVNwYWNlKQorICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5VGFibGVT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5
VGFnU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvblNwYWNlKQorI2VuZGlmCisKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlKQorCisj
dW5kZWYgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUgorCisgICAgSXNvU3Vic3Bh
Y2UgY29kZUJsb2NrU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29TdWJz
cGFjZSB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworCisgICAgVmVjdG9yPElzb1N1
YnNwYWNlUGVyVk0qPiBwZXJWTUlzb1N1YnNwYWNlczsKKworICAgIGZyaWVuZCBjbGFzcyBKU0M6
OlZNOworICAgIGZyaWVuZCBjbGFzcyBKU0M6Oklzb1N1YnNwYWNlUGVyVk07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBHQ0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3MCw0ICsyNzAsMTMgQEAgdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVu
YwogICAgICAgICBmdW5jKCp2aXNpdG9yKTsKIH0KIAorbmFtZXNwYWNlIEdDQ2xpZW50IHsKKwor
QUxXQVlTX0lOTElORSBWTSYgSGVhcDo6dm0oKSBjb25zdAoreworICAgIHJldHVybiAqYml0d2lz
ZV9jYXN0PFZNKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpcykgLSBPQkpFQ1RfT0ZGU0VU
T0YoVk0sIGNsaWVudEhlYXApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgR0NDbGllbnQKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw2IEBAIG5hbWVz
cGFjZSBKU0MgewogSXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYg
aGVhcCwgY29uc3QgSGVhcENlbGxUeXBlJiBoZWFwQ2VsbFR5cGUsIHNpemVfdCBzaXplLCB1aW50
OF90IG51bWJlck9mTG93ZXJUaWVyQ2VsbHMsIHN0ZDo6dW5pcXVlX3B0cjxJc29NZW1vcnlBbGxv
Y2F0b3JCYXNlPiYmIGFsbG9jYXRvcikKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAg
LCBtX2RpcmVjdG9yeShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21T
aXplPihzaXplKSkKLSAgICAsIG1fbG9jYWxBbGxvY2F0b3IoJm1fZGlyZWN0b3J5KQogICAgICwg
bV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKGFsbG9jYXRvciA/IFdURk1vdmUoYWxsb2NhdG9y
KSA6IG1ha2VVbmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4obmFtZSkpCiB7CiAgICAg
bV9yZW1haW5pbmdMb3dlclRpZXJDZWxsQ291bnQgPSBudW1iZXJPZkxvd2VyVGllckNlbGxzOwpA
QCAtMTE5LDUgKzExOCwxNCBAQCB2b2lkIElzb1N1YnNwYWNlOjpkZXN0cm95TG93ZXJUaWVyRnJl
ZUxpCiAgICAgfSk7CiB9CiAKK25hbWVzcGFjZSBHQ0NsaWVudCB7CisKK0lzb1N1YnNwYWNlOjpJ
c29TdWJzcGFjZShKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXIpCisgICAgOiBtX2xvY2FsQWxsb2Nh
dG9yKCZzZXJ2ZXIubV9kaXJlY3RvcnkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSXNvQ2VsbFNldDsKIAorbmFtZXNwYWNlIEdDQ2xpZW50
IHsKK2NsYXNzIElzb1N1YnNwYWNlOworfQorCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBT
dWJzcGFjZSB7CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0
cmluZyBuYW1lLCBIZWFwJiwgY29uc3QgSGVhcENlbGxUeXBlJiwgc2l6ZV90IHNpemUsIHVpbnQ4
X3QgbnVtYmVyT2ZMb3dlclRpZXJDZWxscywgc3RkOjp1bmlxdWVfcHRyPElzb01lbW9yeUFsbG9j
YXRvckJhc2U+JiYgPSBudWxscHRyKTsKQEAgLTQyLDEwICs0Niw2IEBAIHB1YmxpYzoKIAogICAg
IHNpemVfdCBjZWxsU2l6ZSgpIHsgcmV0dXJuIG1fZGlyZWN0b3J5LmNlbGxTaXplKCk7IH0KIAot
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKLQot
ICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSk7Ci0KICAgICB2b2lkIHN3ZWVwTG93ZXJUaWVyQ2VsbChQcmVjaXNl
QWxsb2NhdGlvbiopOwogICAgIHZvaWQgY2xlYXJJc29DZWxsU2V0Qml0KFByZWNpc2VBbGxvY2F0
aW9uKik7CiAKQEAgLTU4LDI0ICs1OCw0NiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIElzb0NlbGxTZXQ7CisgICAgZnJpZW5kIGNsYXNzIEdDQ2xpZW50OjpJc29TdWJz
cGFjZTsKICAgICAKICAgICB2b2lkIGRpZFJlc2l6ZUJpdHModW5zaWduZWQgbmV3U2l6ZSkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkaWRSZW1vdmVCbG9jayh1bnNpZ25lZCBibG9ja0luZGV4KSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpI
YW5kbGUqKSBvdmVycmlkZTsKLSAgICAKKwogICAgIEJsb2NrRGlyZWN0b3J5IG1fZGlyZWN0b3J5
OwotICAgIExvY2FsQWxsb2NhdG9yIG1fbG9jYWxBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPElzb01lbW9yeUFsbG9jYXRvckJhc2U+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsK
ICAgICBTZW50aW5lbExpbmtlZExpc3Q8UHJlY2lzZUFsbG9jYXRpb24sIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxQcmVjaXNlQWxsb2NhdGlvbj4+IG1fbG93ZXJUaWVyRnJlZUxpc3Q7CiAgICAgU2Vu
dGluZWxMaW5rZWRMaXN0PElzb0NlbGxTZXQsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxJc29DZWxs
U2V0Pj4gbV9jZWxsU2V0czsKIH07CiAKKworbmFtZXNwYWNlIEdDQ2xpZW50IHsKKworY2xhc3Mg
SXNvU3Vic3BhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElzb1N1YnNwYWNlKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBJc29TdWJzcGFjZShKU0M6Oklzb1N1YnNwYWNlJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fklzb1N1YnNwYWNlKCkgPSBkZWZhdWx0OworCisgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1
cm4gbV9sb2NhbEFsbG9jYXRvci5jZWxsU2l6ZSgpOyB9CisKKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisKKyAgICB2b2lkKiBhbGxvY2F0ZShW
TSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwor
Citwcml2YXRlOgorICAgIExvY2FsQWxsb2NhdG9yIG1fbG9jYWxBbGxvY2F0b3I7Cit9OworCiBB
TFdBWVNfSU5MSU5FIEFsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBz
aXplLCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpID09IGNlbGxTaXplKCkp
OwogICAgIHJldHVybiBBbGxvY2F0b3IoJm1fbG9jYWxBbGxvY2F0b3IpOwogfQogCit9IC8vIG5h
bWVzcGFjZSBHQ0NsaWVudAorCiAjZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBD
ZWxsVHlwZSwgdHlwZSkgKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcCksIChoZWFw
Q2VsbFR5cGUpLCBzaXplb2YodHlwZSksIHR5cGU6Om51bWJlck9mTG93ZXJUaWVyQ2VsbHMpCiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw2ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgR0NDbGllbnQg
eworCiBBTFdBWVNfSU5MSU5FIHZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShWTSYgdm0sIHNp
emVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkgPT0gY2VsbFNpemUo
KSk7CkBAIC0zNSw2ICszNyw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogSXNvU3Vic3BhY2U6OmFs
bG9jYXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAor
CiBpbmxpbmUgdm9pZCBJc29TdWJzcGFjZTo6Y2xlYXJJc29DZWxsU2V0Qml0KFByZWNpc2VBbGxv
Y2F0aW9uKiBwcmVjaXNlQWxsb2NhdGlvbikKIHsKICAgICB1bnNpZ25lZCBsb3dlclRpZXJJbmRl
eCA9IHByZWNpc2VBbGxvY2F0aW9uLT5sb3dlclRpZXJJbmRleCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjUgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNsYXNzIElzb1N1YnNwYWNlUGVyVk06OkF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlIGZpbmFsIDog
cHVibGljIElzb1N1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBBdXRvcmVtb3ZpbmdJc29TdWJzcGFj
ZShJc29TdWJzcGFjZVBlclZNJiBwZXJWTSwgQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBjb25z
dCBIZWFwQ2VsbFR5cGUmIGhlYXBDZWxsVHlwZSwgc2l6ZV90IHNpemUpCi0gICAgICAgIDogSXNv
U3Vic3BhY2UobmFtZSwgaGVhcCwgaGVhcENlbGxUeXBlLCBzaXplLCAvKiBudW1iZXJPZkxvd2Vy
VGllckNlbGxzICovIDApCi0gICAgICAgICwgbV9wZXJWTShwZXJWTSkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIH5BdXRvcmVtb3ZpbmdJc29TdWJzcGFjZSgpIGZpbmFsCi0gICAgewotICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgbV9wZXJWTS5tX2xvY2sgfTsKLSAgICAgICAgbV9wZXJWTS5tX3N1
YnNwYWNlUGVyVk0ucmVtb3ZlKCZzcGFjZSgpLmhlYXAoKS52bSgpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgSXNvU3Vic3BhY2VQZXJWTSYgbV9wZXJWTTsKLX07Ci0KLUlzb1N1YnNwYWNlUGVy
Vk06Oklzb1N1YnNwYWNlUGVyVk0oRnVuY3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKFZNJik+IHN1
YnNwYWNlUGFyYW1ldGVycykKK0lzb1N1YnNwYWNlUGVyVk06Oklzb1N1YnNwYWNlUGVyVk0oRnVu
Y3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKEhlYXAmKT4gc3Vic3BhY2VQYXJhbWV0ZXJzKQogICAg
IDogbV9zdWJzcGFjZVBhcmFtZXRlcnMoV1RGTW92ZShzdWJzcGFjZVBhcmFtZXRlcnMpKQogewog
fQpAQCAtNTksMTYgKzQxLDUyIEBAIElzb1N1YnNwYWNlUGVyVk06On5Jc29TdWJzcGFjZVBlclZN
KCkKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KIAotSXNvU3Vic3BhY2UmIElz
b1N1YnNwYWNlUGVyVk06OmZvclZNKFZNJiB2bSkKK0lzb1N1YnNwYWNlJiBJc29TdWJzcGFjZVBl
clZNOjppc29TdWJzcGFjZWZvckhlYXAoTG9ja0hvbGRlciYsIEhlYXAmIGhlYXApCiB7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zdWJzcGFjZVBl
clZNLmFkZCgmdm0sIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gbV9zdWJzcGFjZVBlckhl
YXAuYWRkKCZoZWFwLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgU3Vic3BhY2VQYXJhbWV0ZXJzIHBhcmFtcyA9IG1fc3Vic3BhY2VQYXJhbWV0ZXJzKHZt
KTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBBdXRvcmVtb3ZpbmdJc29T
dWJzcGFjZSgqdGhpcywgcGFyYW1zLm5hbWUsIHZtLmhlYXAsICpwYXJhbXMuaGVhcENlbGxUeXBl
LCBwYXJhbXMuc2l6ZSk7CisgICAgICAgIFN1YnNwYWNlUGFyYW1ldGVycyBwYXJhbXMgPSBtX3N1
YnNwYWNlUGFyYW1ldGVycyhoZWFwKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IG5ldyBJc29TdWJzcGFjZShwYXJhbXMubmFtZSwgaGVhcCwgKnBhcmFtcy5oZWFwQ2VsbFR5cGUs
IHBhcmFtcy5zaXplLCAwKTsKKworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcC5sb2NrKCkg
fTsKKyAgICAgICAgaGVhcC5wZXJWTUlzb1N1YnNwYWNlcy5hcHBlbmQodGhpcyk7CiAgICAgfQog
ICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorR0NDbGllbnQ6Oklzb1N1
YnNwYWNlJiBJc29TdWJzcGFjZVBlclZNOjpjbGllbnRJc29TdWJzcGFjZWZvclZNKFZNJiB2bSkK
K3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgYXV0byByZXN1bHQgPSBtX2Ns
aWVudFN1YnNwYWNlUGVyVk0uYWRkKCZ2bSwgbnVsbHB0cik7CisgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gKnJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBJc29TdWJzcGFjZSYgc3Vic3BhY2UgPSBpc29TdWJz
cGFjZWZvckhlYXAobG9ja2VyLCB2bS5oZWFwKTsKKworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBuZXcgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKHN1YnNwYWNlKTsKKyAgICB2bS5jbGllbnRI
ZWFwLnBlclZNSXNvU3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKKyAgICByZXR1cm4gKnJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgSXNvU3Vic3BhY2VQZXJWTTo6cmVsZWFzZUlzb1N1
YnNwYWNlKEhlYXAmIGhlYXApCit7CisgICAgSXNvU3Vic3BhY2UqIHN1YnNwYWNlOworICAgIHsK
KyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBzdWJzcGFjZSA9IG1f
c3Vic3BhY2VQZXJIZWFwLnRha2UoJmhlYXApOworICAgIH0KKyAgICBkZWxldGUgc3Vic3BhY2U7
Cit9CisKK3ZvaWQgSXNvU3Vic3BhY2VQZXJWTTo6cmVsZWFzZUNsaWVudElzb1N1YnNwYWNlKFZN
JiB2bSkKK3sKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIGNsaWVudFN1YnNwYWNlOworICAg
IHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBjbGllbnRTdWJz
cGFjZSA9IG1fY2xpZW50U3Vic3BhY2VQZXJWTS50YWtlKCZ2bSk7CisgICAgfQorICAgIGRlbGV0
ZSBjbGllbnRTdWJzcGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDEwICszMiwyMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgSGVhcDsKK2NsYXNzIFZNOworCiAvLyBUaGlzIGlzIGFuIGFwcHJvcHJpYXRlIHdheSB0
byBzdGFzaCBJc29TdWJzcGFjZXMgZm9yIHJhcmVseS11c2VkIGNsYXNzZXMgb3IgY2xhc3NlcyB0
aGF0IGFyZSBtb3N0bHkKIC8vIHN1cmUgdG8gYmUgbWFpbi10aHJlYWQtb25seS4gQnV0IGlmIGEg
Y2xhc3MgdHlwaWNhbGx5IGdldHMgaW5zdGFudGlhdGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBh
dAogLy8gb25jZSwgdGhlbiB0aGlzIGlzIG5vdCBncmVhdCwgYmVjYXVzZSBjb25jdXJyZW50IGFs
bG9jYXRpb25zIHdpbGwgcHJvYmFibHkgY29udGVuZCBvbiB0aGlzIHRoaW5nJ3MKIC8vIGxvY2su
CisvLworLy8gVXNhZ2U6IEEgSXNvU3Vic3BhY2VQZXJWTSBpbnN0YW5jZSBpcyBpbnN0YW50aWF0
ZWQgdXNpbmcgTmV2ZXJEZXN0cm95ZWQgaS5lLiBlYWNoIElzb1N1YnNwYWNlUGVyVk0KKy8vIGlu
c3RhbmNlIGlzIGltbW9ydGFsIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2Vzcy4gVGhlcmUgaXMg
b25lIElzb1N1YnNwYWNlIHR5cGUgcGVyIElzb1N1YnNwYWNlUGVyVk0uCisvLyBJc29TdWJzcGFj
ZVBlclZNIGl0c2VsZiBpcyBhIGZhY3RvcnkgZm9yIHRob3NlIElzb1N1YnNwYWNlcyBwZXIgVk0g
YW5kIHBlciBIZWFwLiBJc29TdWJzcGFjZVBlclZNCisvLyBhbHNvIHNlcnZlcyBhcyB0aGUgbWFu
YWdlciBvZiB0aGUgSXNvU3Vic3BhY2VzLiBDbGllbnQgVk1zIGFyZSByZXNwb25zaWJsZSBmb3Ig
Y2FsbGluZworLy8gcmVsZWFzZUNsaWVudElzb1N1YnNwYWNlKCkgdG8gcmVsZWFzZSB0aGUgSXNv
U3Vic3BhY2Ugd2hlbiB0aGUgVk0gc2h1dHMgZG93bi4gU2ltaWxhcmx5LCBpZiB0aGUKKy8vIEhl
YXAgaXMgbm90IGFuIGltbW9ydGFsIHNpbmdsZXRvbiBoZWFwICh3aGVuIGdsb2JhbCBHQyBpcyBl
bmFibGVkKSwgdGhlIHBlciBIZWFwIElzb1N1YnNwYWNlIGFsc28KKy8vIG5lZWRzIHRvIGJlIHJl
bGVhc2VkIHdoZW4gdGhlIEhlYXAgaXMgZGVzdHJ1Y3RlZC4KIGNsYXNzIElzb1N1YnNwYWNlUGVy
Vk0gZmluYWwgewogcHVibGljOgogICAgIHN0cnVjdCBTdWJzcGFjZVBhcmFtZXRlcnMgewpAQCAt
NTMsMTggKzY0LDI0IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAg
fTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZVBlclZNKEZ1bmN0aW9u
PFN1YnNwYWNlUGFyYW1ldGVycyhWTSYpPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vi
c3BhY2VQZXJWTShGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoSGVhcCYpPik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgfklzb1N1YnNwYWNlUGVyVk0oKTsKICAgICAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBJc29TdWJzcGFjZSYgZm9yVk0oVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIGNsaWVudElzb1N1YnNwYWNlZm9yVk0oVk0mKTsKKworICAg
IC8vIEZJWE1FOiBHbG9iYWxHQzogdGhpcyBpcyBvbmx5IG5lZWRlZCB1bnRpbCB3ZSBoYXZlIGEg
aW1tb3J0YWwgc2luZ2xldG9uIGhlYXAgd2l0aCBHbG9iYWxHQy4KKyAgICB2b2lkIHJlbGVhc2VJ
c29TdWJzcGFjZShIZWFwJik7CisKKyAgICB2b2lkIHJlbGVhc2VDbGllbnRJc29TdWJzcGFjZShW
TSYpOwogCiBwcml2YXRlOgotICAgIGNsYXNzIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlOwotICAg
IGZyaWVuZCBjbGFzcyBBdXRvcmVtb3ZpbmdJc29TdWJzcGFjZTsKKyAgICBJc29TdWJzcGFjZSYg
aXNvU3Vic3BhY2Vmb3JIZWFwKExvY2tIb2xkZXImLCBIZWFwJik7CiAKICAgICBMb2NrIG1fbG9j
azsKLSAgICBIYXNoTWFwPFZNKiwgSXNvU3Vic3BhY2UqPiBtX3N1YnNwYWNlUGVyVk0gV1RGX0dV
QVJERURfQllfTE9DSyhtX2xvY2spOwotICAgIEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhW
TSYpPiBtX3N1YnNwYWNlUGFyYW1ldGVyczsKKworICAgIEhhc2hNYXA8SGVhcCosIElzb1N1YnNw
YWNlKj4gbV9zdWJzcGFjZVBlckhlYXA7CisgICAgSGFzaE1hcDxWTSosIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSo+IG1fY2xpZW50U3Vic3BhY2VQZXJWTSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9j
ayk7CisgICAgRnVuY3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKEhlYXAmKT4gbV9zdWJzcGFjZVBh
cmFtZXRlcnM7CiB9OwogCiAjZGVmaW5lIElTT19TVUJTUEFDRV9QQVJBTUVURVJTKGhlYXBDZWxs
VHlwZSwgdHlwZSkgOjpKU0M6Oklzb1N1YnNwYWNlUGVyVk06OlN1YnNwYWNlUGFyYW1ldGVycygi
SXNvbGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhlYXBDZWxsVHlwZSksIHNpemVvZih0eXBlKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw4IEBAIHZvaWQqIExvY2Fs
QWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEgKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSBu
dWxscHRyKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAorICAgIC8vIEZJWE1FIEdsb2JhbEdD
OiBOZWVkIHRvIHN5bmNocm9uaXplIGhlcmUgdG8gd2hlbiBhbGxvY2F0aW5nIGZyb20gdGhlIEJs
b2NrRGlyZWN0b3J5IGluIHRoZSBzZXJ2ZXIuCisKICAgICBTdWJzcGFjZSogc3Vic3BhY2UgPSBt
X2RpcmVjdG9yeS0+bV9zdWJzcGFjZTsKICAgICBpZiAoc3Vic3BhY2UtPmlzSXNvU3Vic3BhY2Uo
KSkgewogICAgICAgICBpZiAodm9pZCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SXNvU3Vic3BhY2Uq
PihzdWJzcGFjZSktPnRyeUFsbG9jYXRlRnJvbUxvd2VyVGllcigpKQpAQCAtMTY0LDYgKzE2Niw3
IEBAIHZvaWQgTG9jYWxBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgKIAogdm9pZCogTG9j
YWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQogeworICAgIC8vIEZJ
WE1FOiBHbG9iYWxHQwogICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2Vk
IGZvciByZWFsIG11bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0
bwogICAgIC8vIGNvbWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRo
YXQgcHJvdG9jb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKICAgICAvLwpAQCAt
MjQ5LDcgKzI1Miw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmsK
IAogdm9pZCBMb2NhbEFsbG9jYXRvcjo6ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChIZWFwJiBo
ZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewotICAgIGlmICghT3B0
aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgaWYgKExJS0VMWSghT3B0aW9u
czo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBz
dGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MSw3ICs0MSw3IEBAIGNsYXNzIExvY2FsQWxsb2NhdG9yIDogcHVibGljIEJhc2ljUmF3U2UKICAg
ICAKIHB1YmxpYzoKICAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSopOwotICAgIH5M
b2NhbEFsbG9jYXRvcigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Mb2NhbEFsbG9jYXRvcigp
OwogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4dCosIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCkBAIC01Niw3ICs1Niw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKICAgICAKICAgICBib29sIGlz
RnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0OwotICAgIAorCisgICAgQmxvY2tEaXJl
Y3RvcnkmIGRpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuICptX2RpcmVjdG9yeTsgfQorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BB
bGxvY2F0aW5nCiAKICAgICBmcmVlTGlzdC5mb3JFYWNoKAogICAgICAgICBbJl0gKEhlYXBDZWxs
KiBjZWxsKSB7Ci0gICAgICAgICAgICBpZiAoTWFya2VkQmxvY2tJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoTWFya2VkQmxvY2tJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1BvaW50ZXIoY2VsbCks
ICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVk
c0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcChIZWFwQ2VsbDo6U3RvcEFs
bG9jYXRpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRl
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0
b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWVudW0gY2xhc3MgTXV0YXRvclN0YXRlIHsKK2VudW0gY2xhc3MgTXV0YXRvclN0YXRlIDog
dWludDhfdCB7CiAgICAgLy8gVGhlIG11dGF0b3IgaXMgcnVubmluZyB3aGVuIGl0J3Mgbm90IGlu
c2lkZSBhIEhlYXAgc2xvdyBwYXRoLgogICAgIFJ1bm5pbmcsCiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9z
dC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmluamVjdGVkU2NyaXB0SG9z
dFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyAr
MzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFj
Y2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmphdmFTY3JpcHRDYWxsRnJhbWVTcGFjZTxtb2Rl
PigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAg
IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQWdncmVnYXRlRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWdncmVnYXRlRXJyb3JQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBFcnJvclByb3RvdHlwZUJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShB
cnJheUl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Zy
b21TeW5jSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0
ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTkgT2xla3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21h
aWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJv
dG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxp
YS5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNGdW5jdGlvblByb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IE9sZWtzYW5k
ciBTa2FjaGtvdiA8Z3NrYWNoa292QGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5j
R2VuZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
T2xla3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShBc3luY0dlbmVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXN5bmNJdGVyYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FzeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNJdGVyYXRvclByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
NyBPbGVrc2FuZHIgU2thY2hrb3YgPGdza2FjaGtvdkBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNJdGVyYXRvclByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoQXRvbWljc09iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2Jq
ZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0JpZ0ludE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPi4KLSAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTV3JhcHBlck9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5iaWdJbnRPYmplY3RTcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0lu
dFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0JpZ0ludFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdt
YWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcg
KzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQmlnSW50UHJvdG90eXBlLCBCYXNlKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmpl
Y3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gdm0uYm9vbGVhbk9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnJhbmRlZFN0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnJhbmRlZFN0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgSWdhbGlhIFMuQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQnJhbmRlZFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBT
dAogcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiAmdm0uYnJhbmRlZFN0cnVjdHVyZVNwYWNlKCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCFDZWxsVHlw
ZTo6bmVlZHNEZXN0cnVjdGlvbiwgIiIpOwogICAgICAgICByZXR1cm4gJnZtLmNsb25lZEFyZ3Vt
ZW50c1NwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xl
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZU9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zb2xlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShDb25zb2xlT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBDdXN0b21TZXR0
ZXIgPSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYzsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmN1c3RvbUdldHRlclNl
dHRlclNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RPTUF0dHJpYnV0ZUdldHRlclNl
dHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IEN1c3RvbUdldHRlclNldHRlcjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmRvbUF0dHJpYnV0ZUdldHRlclNl
dHRlclNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNSw3ICszNSw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gJnZtLmRhdGVJbnN0YW5jZVNwYWNlKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKERh
dGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNl
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZtLmVycm9ySW5zdGFuY2VTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShFcnJvclBy
b3RvdHlwZUJhc2UsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiB2bS5ldmFsRXhlY3V0YWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5leGNlcHRpb25T
cGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbmFs
aXphdGlvblJlZ2lzdHJ5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVn
aXN0cnlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDkgKzQ0LDkgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgp
LnNwYWNlOworICAgICAgICByZXR1cm4gJnZtLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCk7CiAg
ICAgfQogCiAgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIEludHJp
bnNpYyBpbnRyaW5zaWMsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LmZ1bmN0aW9uUmFyZURhdGFTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90
b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcg
KzM3LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJh
dG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoR2VuZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Nyw3ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNQdXQgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZ2V0dGVyU2V0dGVyU3BhY2Uo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsgLy8gVGhpcyBpcyBuZXZlciBhY2Nl
c3NlZCBkaXJlY3RseSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rYWdlIG9uIHNvbWUgY29t
cGlsZXJzLgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgaWYgY29uc3RleHByIChUeXBlID09IEhhc2hUYWJsZVR5cGU6OktleSkKICAgICAg
ICAgICAgIHJldHVybiB2bS5zZXRCdWNrZXRTcGFjZTxtb2RlPigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTM4LDcgKzM4LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEludGVybmFsRnVuY3Rpb24pLCAiSW50ZXJuYWxGdW5j
dGlvbiBzdWJjbGFzc2VzIHRoYXQgYWRkIGZpZWxkcyBuZWVkIHRvIG92ZXJyaWRlIHN1YnNwYWNl
Rm9yPD4oKSIpOwogICAgICAgICByZXR1cm4gJnZtLmludGVybmFsRnVuY3Rpb25TcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uaW50bENvbGxhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5
cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVy
LmZhbWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyAr
MzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsQ29sbGF0b3JQcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHZtLmludGxEYXRlVGltZUZvcm1hdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5
IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsRGlzcGxheU5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERpc3BsYXlOYW1lcy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUs
NyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxEaXNwbGF5TmFtZXNTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXNQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bExpc3RGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTGlzdEZvcm1hdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsTGlzdEZvcm1hdFNwYWNlPG1v
ZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExp
c3RGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRs
TGlzdEZvcm1hdFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2Fs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2Nh
bGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bExvY2FsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLmludGxMb2NhbGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSW50bExvY2FsZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29u
ZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE2NCw3ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxO
dW1iZXJGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIu
ZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICsz
Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5X
YWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0
eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxPYmplY3QsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLmludGxQbHVyYWxSdWxlc1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJv
dG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFu
d2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFi
bGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bFBsdXJhbFJ1bGVzUHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZl
VGltZUZvcm1hdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsUmVsYXRpdmVUaW1lRm9y
bWF0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdFByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICsz
Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJh
dG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLmludGxTZWdtZW50SXRlcmF0b3JTcGFjZTxtb2RlPigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0
b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsU2VnbWVudEl0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3JQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SW50bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFNlZ21lbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxTZWdtZW50ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsU2VnbWVudGVyU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVy
UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFNlZ21lbnRlclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bFNlZ21lbnRlclBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0uaW50bFNlZ21lbnRzU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHNQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHNQcm90b3R5cGUuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRzUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKEludGxTZWdtZW50c1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDksNyArNDksNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uYXJyYXlTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS5hcnJheUJ1ZmZlclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hcnJh
eUl0ZXJhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXN5
bmNHZW5lcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQs
NyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmJpZ0ludFNw
YWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljX2Fzc2VydChTdHJ1Y3R1cmVGbGFncyAmIEltcGxl
bWVudHNIYXNJbnN0YW5jZSwgIiIpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmJvdW5kRnVuY3Rpb25TcGFjZTxtb2Rl
PigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuICZ2bS5jYWxsZWVTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0
dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uY3VzdG9tR2V0dGVy
RnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVy
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uY3VzdG9tU2V0dGVyRnVu
Y3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQw
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgVHlwZWRBcnJheUNvbnRlbnRUeXBl
IGNvbnRlbnRUeXBlID0gVHlwZWRBcnJheUNvbnRlbnRUeXBlOjpOb25lOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmRh
dGFWaWV3U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpT
RGF0YVZpZXdQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0
aW9uUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmZpbmFs
aXphdGlvblJlZ2lzdHJ5U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJv
biBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAw
NyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgcmFyZURhdGFUYWcgPSAweDE7CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZnVuY3Rp
b25TcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS5nZW5lcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2MCw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3dpdGNoIChBZGFwdG9yOjp0eXBl
VmFsdWUpIHsKICAgICAgICAgY2FzZSBUeXBlSW50ODoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFs
T2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmds
b2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTYyOSw3ICs2MjksNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmdsb2JhbE9iamVjdFNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiB2bS5tYXBTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbnRlcm5hbEZpZWxkKEZpZWxkIGZpZWxkKSB7IHJldHVybiBCYXNlOjpp
bnRlcm5hbEZpZWxkKHN0YXRpY19jYXN0PHVpbnQzMl90PihmaWVsZCkpOyB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
bWFwSXRlcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVz
dWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFi
bGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNNb2R1bGVMb2FkZXIsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
bW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzTW9kdWxlUmVjb3JkU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0
ZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ubmF0aXZlU3RkRnVuY3Rp
b25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNPTk9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Mj47
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gJnZtLnByb21pc2VTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNQcm9taXNlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8PCAxKSAt
IDE7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICByZXR1cm4gJnZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlk
ZXNQdXQgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxU
eXBlKSA9PSBzaXplb2YoSlNQcm94eSkpOwogICAgICAgICByZXR1cm4gJnZtLmpzUHJveHlTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3Rl
RnVuY3Rpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgogICogQXV0aG9yOiBDYWl0bGlu
IFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ3LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5yZW1vdGVG
dW5jdGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNo
UGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGlj
OgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc2NyaXB0RmV0Y2hQYXJhbWV0
ZXJzU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NjcmlwdEZldGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS5zY3JpcHRGZXRjaGVyU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3
ICszNyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNl
dFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGludGVybmFs
RmllbGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6OmludGVybmFsRmllbGQoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zZXRJdGVyYXRvclNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3Vy
Y2VDb2RlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAg
cHVibGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc291cmNlQ29kZVNw
YWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAvLyBX
ZSBzcGVjaWFsaXplIHRoZSBzdHJpbmcgc3Vic3BhY2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3Np
YmxlIHN3ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAgICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5n
IGRpZG4ndCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdTcGFjZSgpOwogICAgIH0KQEAgLTI3Miw3ICsy
NzIsNyBAQCBjbGFzcyBKU1JvcGVTdHJpbmcgZmluYWwgOiBwdWJsaWMgSlNTdHJpCiAgICAgZnJp
ZW5kIGNsYXNzIEpTU3RyaW5nOwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gJnZtLnJvcGVTdHJpbmdTcGFjZSgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5zdHJpbmdJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJ
bW1vcnRhbDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLnRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvclNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVm
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2Jq
ZWN0UmVmLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2Vha09iamVjdFJlZlNwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgQmFzZSA9IEpTU2NvcGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2l0aFNjb3BlU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
cEl0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKE1hcEl0ZXJhdG9yUHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShNYXBQ
cm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMjksNyArMjksNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTWF0aE9iamVj
dCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcs
NyArMzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS5tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBAIHBy
aXZhdGU6CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEVycm9yUHJvdG90eXBlQmFzZTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTmF0aXZlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ubmF0aXZlRXhlY3V0YWJsZVNwYWNlKCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5udW1iZXJPYmplY3RTcGFjZSgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3Rv
dHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoT2JqZWN0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTUs
NiArMzU1LDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICBcCiAg
ICAgdihHQ0xvZ0xldmVsLCBsb2dHQywgR0NMb2dnaW5nOjpOb25lLCBOb3JtYWwsICJkZWJ1Z2dp
bmcgb3B0aW9uIHRvIGxvZyBHQyBhY3Rpdml0eSAoMCA9IE5vbmUsIDEgPSBCYXNpYywgMiA9IFZl
cmJvc2UpIikgXAogICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoQm9vbCwgdXNlR2xvYmFsR0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIGdjQXRFbmQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUganNjIENMSSB3aWxs
IGRvIGEgR0MgYmVmb3JlIGV4aXRpbmciKSBcCiAgICAgdihCb29sLCBmb3JjZUdDU2xvd1BhdGhz
LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgSklUIGZhc3QgYWxs
b2NhdGlvbnMgZG93biB0aGVpciBzbG93IHBhdGhzLiIpIFwKICAgICB2KEJvb2wsIGZvcmNlRGlk
RGVmZXJHQ1dvcmssIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBE
ZWZlckdDIGRlc3RydWN0aW9ucyB0byBwZXJmb3JtIGEgR0MuIikgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZtLnByb2dyYW1FeGVjdXRhYmxlU3BhY2Uo
KS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCk7CiAg
ICAgfQogCiAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJl
SXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICByZXR1cm4gJnZtLnByb3BlcnR5VGFibGVTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBP
dmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ucHJveHlPYmplY3RT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5UmV2b2tlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlSZXZva2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5wcm94eVJldm9rZVNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxl
Y3RPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVmbGVjdE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShSZWZsZWN0T2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHAuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ucmVnRXhwU3BhY2UoKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghQ2VsbFR5cGU6Om5lZWRz
RGVzdHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5yZWdFeHBPYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoUmVnRXhwUHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE5IEFsZXhl
eSBTaHZheWthIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NCw3ICs0NCw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghQ2VsbFR5cGU6Om5lZWRz
RGVzdHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5zY29wZWRBcmd1bWVudHNTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRF
eGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDgsNyArMTA4LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2Vs
bAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoJlZNOjpTcGFjZUFuZFNldDo6
c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNldCk7CisgICAgQVNTRVJUKCZI
ZWFwOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNl
dCk7CiAgICAgY2xlYXJhYmxlQ29kZVNldC5yZW1vdmUodGhpcyk7CiB9CiAKQEAgLTE4Nyw3ICsx
ODcsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8mIGNsZWFyYWJsZUNvZGVTZXQgPSBWTTo6U3BhY2VB
bmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSk7CisgICAgYXV0byYgY2xlYXJhYmxlQ29kZVNldCA9
IEhlYXA6OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpOwogICAgIGlmIChoYXNDbGVh
cmFibGVDb2RlKHZtKSkKICAgICAgICAgY2xlYXJhYmxlQ29kZVNldC5hZGQodGhpcyk7CiAgICAg
ZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJ
dGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTZXRJdGVyYXRvclByb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9
IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2V0UHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dSZWFsbU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtT2Jq
ZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NoYWRvd1JlYWxtT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
c2hhZG93UmVhbG1TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93UmVhbG1Qcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93UmVhbG1Qcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFi
bGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2hhZG93UmVhbG1Qcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOCw3ICsxMDgsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnNwYXJzZUFy
cmF5VmFsdWVNYXBTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBKU1Njb3BlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnN0cmljdEV2YWxBY3RpdmF0aW9uU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNyArMzEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gJnZtLnN0cmluZ09iamVjdFNwYWNlKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB+U3RydWN0dXJlKCk7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiAmdm0uc3RydWN0dXJlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1
cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uc3RydWN0dXJlQ2hhaW5TcGFjZSgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJ1Y3R1cmVSYXJl
RGF0YVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc3lt
Ym9sU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzEsNyArMzEsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTV3JhcHBlck9iamVjdDsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zeW1ib2xPYmpl
Y3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4LDcg
KzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU3ltYm9sUHJvdG90eXBlLCBCYXNlKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00NTQsNyArNDU0LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgV1RGOjpJdGVyYXRvclJh
bmdlPHR5cGVuYW1lIFByaXZhdGVOYW1lRW52aXJvbm1lbnQ6Oml0ZXJhdG9yPiBQcml2YXRlTmFt
ZUl0ZXJhdG9yUmFuZ2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuICZ2bS5zeW1ib2xUYWJsZVNwYWNlKCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXIuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxDYWxlbmRhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsQ2FsZW5kYXJT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXJQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsRHVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0
LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZtLnRlbXBvcmFsRHVyYXRpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
SW5zdGFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzksNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0udGVtcG9yYWxJbnN0YW50U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnRQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3Rh
bnRQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKFRlbXBvcmFsSW5zdGFudFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxOb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbE5vdy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbE5vdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKFRlbXBvcmFsTm93LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYyLDcgKzYyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsUGxhaW5UaW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxQbGFpblRpbWUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxQbGFpblRpbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1w
b3JhbFBsYWluVGltZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxQbGFpblRpbWVQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZVByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbFBsYWluVGltZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxQbGFpblRpbWVQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbFRpbWVab25lU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRp
bWVab25lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3Jh
bFRpbWVab25lUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUsCiAgICAgLCBtX3JhbmRvbShPcHRpb25zOjpzZWVkT2ZWTVJhbmRvbUZvckZ1
enplcigpID8gT3B0aW9uczo6c2VlZE9mVk1SYW5kb21Gb3JGdXp6ZXIoKSA6IGNyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyKCkpCiAgICAgLCBtX2ludGVncml0eVJhbmRvbSgqdGhpcykKICAg
ICAsIGhlYXAoKnRoaXMsIGhlYXBUeXBlKQorICAgICwgY2xpZW50SGVhcChoZWFwKQogICAgICwg
dm1UeXBlKHZtVHlwZSkKICAgICAsIGNsaWVudERhdGEobnVsbHB0cikKICAgICAsIHRvcEVudHJ5
RnJhbWUobnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMzLDYgKzMzMyw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBIZWFw
IGhlYXA7CisgICAgR0NDbGllbnQ6OkhlYXAgY2xpZW50SGVhcDsKIAogICAgIGNvbnN0IEhlYXBD
ZWxsVHlwZSYgY2VsbEhlYXBDZWxsVHlwZSgpIHsgcmV0dXJuIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZTsgfQogICAgIGNvbnN0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlJiBkZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSB7IHJldHVybiBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZTsgfTsKQEAgLTM0OSw0MiArMzUwLDQyIEBAIHB1YmxpYzoKICAgICBBTFdB
WVNfSU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIHZhcmlhYmxlU2l6ZWRDZWxsU3BhY2UoKSB7IHJl
dHVybiBoZWFwLnZhcmlhYmxlU2l6ZWRDZWxsU3BhY2U7IH0KICAgICBBTFdBWVNfSU5MSU5FIENv
bXBsZXRlU3Vic3BhY2UmIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RTcGFjZTsgfQogCi0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFj
ZSYgYXJyYXlTcGFjZSgpIHsgcmV0dXJuIGhlYXAuYXJyYXlTcGFjZTsgfQotICAgIEFMV0FZU19J
TkxJTkUgSXNvU3Vic3BhY2UmIGJpZ0ludFNwYWNlKCkgeyByZXR1cm4gaGVhcC5iaWdJbnRTcGFj
ZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGNhbGxlZVNwYWNlKCkgeyByZXR1
cm4gaGVhcC5jYWxsZWVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGNs
b25lZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5jbG9uZWRBcmd1bWVudHNTcGFjZTsg
fQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGN1c3RvbUdldHRlclNldHRlclNwYWNl
KCkgeyByZXR1cm4gaGVhcC5jdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19J
TkxJTkUgSXNvU3Vic3BhY2UmIGRhdGVJbnN0YW5jZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5kYXRl
SW5zdGFuY2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGRvbUF0dHJp
YnV0ZUdldHRlclNldHRlclNwYWNlKCkgeyByZXR1cm4gaGVhcC5kb21BdHRyaWJ1dGVHZXR0ZXJT
ZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGV4Y2VwdGlvblNw
YWNlKCkgeyByZXR1cm4gaGVhcC5leGNlcHRpb25TcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUg
SXNvU3Vic3BhY2UmIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSgpIHsgcmV0dXJuIGhl
YXAuZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJ
c29TdWJzcGFjZSYgZnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuZnVuY3Rpb25TcGFjZTsg
fQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGdldHRlclNldHRlclNwYWNlKCkgeyBy
ZXR1cm4gaGVhcC5nZXR0ZXJTZXR0ZXJTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vi
c3BhY2UmIGdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlKCkgeyByZXR1cm4gaGVhcC5nbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3Bh
Y2UmIGludGVybmFsRnVuY3Rpb25TcGFjZSgpIHsgcmV0dXJuIGhlYXAuaW50ZXJuYWxGdW5jdGlv
blNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYganNQcm94eVNwYWNlKCkg
eyByZXR1cm4gaGVhcC5qc1Byb3h5U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNw
YWNlJiBuYXRpdmVFeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLm5hdGl2ZUV4ZWN1dGFi
bGVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIG51bWJlck9iamVjdFNw
YWNlKCkgeyByZXR1cm4gaGVhcC5udW1iZXJPYmplY3RTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSXNvU3Vic3BhY2UmIHBsYWluT2JqZWN0U3BhY2UoKSB7IHJldHVybiBoZWFwLnBsYWluT2Jq
ZWN0U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBwcm9taXNlU3BhY2Uo
KSB7IHJldHVybiBoZWFwLnByb21pc2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vi
c3BhY2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsgcmV0dXJuIGhlYXAucHJvcGVy
dHlOYW1lRW51bWVyYXRvclNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYg
cHJvcGVydHlUYWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5wcm9wZXJ0eVRhYmxlU3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByZWdFeHBTcGFjZSgpIHsgcmV0dXJuIGhl
YXAucmVnRXhwU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiByZWdFeHBP
YmplY3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAucmVnRXhwT2JqZWN0U3BhY2U7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIElzb1N1YnNwYWNlJiByb3BlU3RyaW5nU3BhY2UoKSB7IHJldHVybiBoZWFwLnJv
cGVTdHJpbmdTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHNjb3BlZEFy
Z3VtZW50c1NwYWNlKCkgeyByZXR1cm4gaGVhcC5zY29wZWRBcmd1bWVudHNTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSgpIHsg
cmV0dXJuIGhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElO
RSBJc29TdWJzcGFjZSYgc3RyaW5nU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cmluZ1NwYWNlOyB9
Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgc3RyaW5nT2JqZWN0U3BhY2UoKSB7IHJl
dHVybiBoZWFwLnN0cmluZ09iamVjdFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJz
cGFjZSYgc3RydWN0dXJlQ2hhaW5TcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3RydWN0dXJlQ2hhaW5T
cGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN0cnVjdHVyZVJhcmVEYXRh
U3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2U7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVTcGFjZSgpIHsgcmV0dXJuIGhlYXAuc3Ry
dWN0dXJlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBicmFuZGVkU3Ry
dWN0dXJlU3BhY2UoKSB7IHJldHVybiBoZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFjZTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN5bWJvbFRhYmxlU3BhY2UoKSB7IHJldHVybiBo
ZWFwLnN5bWJvbFRhYmxlU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSYgYXJyYXlTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuYXJyYXlTcGFjZTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBiaWdJbnRTcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAuYmlnSW50U3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSYgY2FsbGVlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmNhbGxl
ZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGNsb25l
ZEFyZ3VtZW50c1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5jbG9uZWRBcmd1bWVudHNTcGFj
ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBjdXN0b21HZXR0
ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuY3VzdG9tR2V0dGVyU2V0dGVyU3Bh
Y2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZGF0ZUluc3Rh
bmNlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFwLmRhdGVJbnN0YW5jZVNwYWNlOyB9CisgICAg
QUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbUF0dHJpYnV0ZUdldHRlclNl
dHRlclNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5kb21BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXJT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBleGNlcHRp
b25TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZXhjZXB0aW9uU3BhY2U7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3Bh
Y2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZnVuY3Rpb25T
cGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuZnVuY3Rpb25TcGFjZTsgfQorICAgIEFMV0FZU19J
TkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBnZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJu
IGNsaWVudEhlYXAuZ2V0dGVyU2V0dGVyU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSYgZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2UoKSB7IHJldHVy
biBjbGllbnRIZWFwLmdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlOyB9CisgICAgQUxXQVlT
X0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGludGVybmFsRnVuY3Rpb25TcGFjZSgpIHsg
cmV0dXJuIGNsaWVudEhlYXAuaW50ZXJuYWxGdW5jdGlvblNwYWNlOyB9CisgICAgQUxXQVlTX0lO
TElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGpzUHJveHlTcGFjZSgpIHsgcmV0dXJuIGNsaWVu
dEhlYXAuanNQcm94eVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UmIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAubmF0aXZl
RXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIG51bWJlck9iamVjdFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5udW1iZXJPYmplY3RT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBwbGFpbk9i
amVjdFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wbGFpbk9iamVjdFNwYWNlOyB9CisgICAg
QUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb21pc2VTcGFjZSgpIHsgcmV0
dXJuIGNsaWVudEhlYXAucHJvbWlzZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UmIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpIHsgcmV0dXJuIGNs
aWVudEhlYXAucHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHByb3BlcnR5VGFibGVTcGFjZSgpIHsgcmV0dXJuIGNs
aWVudEhlYXAucHJvcGVydHlUYWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UmIHJlZ0V4cFNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5yZWdFeHBT
cGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiByZWdFeHBP
YmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAucmVnRXhwT2JqZWN0U3BhY2U7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcm9wZVN0cmluZ1NwYWNlKCkg
eyByZXR1cm4gY2xpZW50SGVhcC5yb3BlU3RyaW5nU3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc2NvcGVkQXJndW1lbnRzU3BhY2UoKSB7IHJldHVybiBj
bGllbnRIZWFwLnNjb3BlZEFyZ3VtZW50c1NwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UmIHNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSgpIHsgcmV0dXJuIGNs
aWVudEhlYXAuc3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cmluZ1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5z
dHJpbmdTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBz
dHJpbmdPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RyaW5nT2JqZWN0U3BhY2U7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSYgc3RydWN0dXJlQ2hh
aW5TcGFjZSgpIHsgcmV0dXJuIGNsaWVudEhlYXAuc3RydWN0dXJlQ2hhaW5TcGFjZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVSYXJlRGF0YVNw
YWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlOyB9CisgICAg
QUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHN0cnVjdHVyZVNwYWNlKCkgeyBy
ZXR1cm4gY2xpZW50SGVhcC5zdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlJiBicmFuZGVkU3RydWN0dXJlU3BhY2UoKSB7IHJldHVybiBjbGll
bnRIZWFwLmJyYW5kZWRTdHJ1Y3R1cmVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlJiBzeW1ib2xUYWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5z
eW1ib2xUYWJsZVNwYWNlOyB9CiAKICNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihuYW1lKSBcCiAgICAgdGVtcGxhdGU8U3Vic3BhY2VBY2Nlc3MgbW9kZT4gXAotICAg
IEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UqIG5hbWUoKSB7IHJldHVybiBoZWFwLm5hbWU8bW9k
ZT4oKTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBuYW1lKCkg
eyByZXR1cm4gY2xpZW50SGVhcC5uYW1lPG1vZGU+KCk7IH0KIAogI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVy
T2JqZWN0U3BhY2UpCkBAIC00ODksMjQgKzQ5MCwxOCBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNl
KQogI2VuZGlmCiAKLSN1bmRlZiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSCi0K
ICAgICBBTFdBWVNfSU5MSU5FIElzb0NlbGxTZXQmIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Vz
V2l0aENvbnN0cmFpbnRzKCkgeyByZXR1cm4gaGVhcC5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
c1dpdGhDb25zdHJhaW50czsgfQogICAgIEFMV0FZU19JTkxJTkUgSXNvQ2VsbFNldCYgZXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycygpIHsgcmV0dXJuIGhlYXAuZXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVyczsgfQogCi0jZGVmaW5lIERZTkFNSUNf
U1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG5hbWUpIFwKLSAgICB0ZW1wbGF0ZTxTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBcCi0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSogbmFtZSgpIHsg
cmV0dXJuIGhlYXAubmFtZTxtb2RlPigpOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIGNvZGVCbG9ja1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5jb2RlQmxv
Y2tTcGFjZTsgfQogCi0gICAgdXNpbmcgU3BhY2VBbmRTZXQgPSBIZWFwOjpTcGFjZUFuZFNldDsK
LSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiBjb2RlQmxvY2tTcGFjZSgpIHsgcmV0dXJu
IGhlYXAuY29kZUJsb2NrU3BhY2U7IH0KLQotICAgIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJ
TkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCi0gICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VU
X0RFRklORV9NRU1CRVIobW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKKyAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCisgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNw
YWNlKQorI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIKIAotICAgIEFM
V0FZU19JTkxJTkUgU3BhY2VBbmRTZXQmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1
cm4gaGVhcC5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgU3Bh
Y2VBbmRTZXQmIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLnByb2dyYW1F
eGVjdXRhYmxlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiB1bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC51bmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5mdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlJiBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5wcm9ncmFt
RXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBjbGllbnRIZWFw
LnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7IH0KIAogICAgIFZNVHlwZSB2bVR5cGU7
CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4Miw3ICsyODIs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChpc1dlYWtNYXAoKSkKICAgICAgICAg
ICAgIHJldHVybiB2bS53ZWFrTWFwU3BhY2U8bW9kZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2Vh
a01hcFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtPYmplY3RSZWZQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5h
bE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWFrT2JqZWN0UmVmUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrU2V0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKFdlYWtTZXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NhbGxlZTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS5qc1RvV2FzbUlDQ2FsbGVlU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEpTV2ViQXNzZW1ibHksIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlF
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUdsb2JhbC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZt
LndlYkFzc2VtYmx5R2xvYmFsU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1NSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2Vt
Ymx5SW5zdGFuY2VTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlNZW1vcnlTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlNb2R1bGVTcGFjZTxtb2RlPigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0ud2ViQXNzZW1ibHlUYWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlUYWdTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1
MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLndlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9i
YWxQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFi
bGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlHbG9iYWxQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNz
ZW1ibHlJbnN0YW5jZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtF
cnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJs
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseU1vZHVsZVByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2bS53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLCBCYXNlKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFnUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MDUg
QEAKKzIwMjItMDItMTcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFNwbGl0IElzb1N1YnNwYWNlIGludG8gYSBHQ0NsaWVudCBhbGxvY2F0b3IgdXNlZCBieSBWTSBh
bmQgYSBiYWNrZW5kIG1hbmFnZWQgYnkgSGVhcC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzg3OAorICAgICAgICByZGFyOi8vcHJvYmxlbS84NjEw
ODM5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEu
IE1ha2UgdmFyaW91cyBjbGFzc2VzIGNsaWVudC1zZXJ2ZXIgYXdhcmUgaW4gdGVybXMgb2YgSXNv
U3Vic3BhY2VzLgorICAgICAgICAyLiBNYWtlIENvZGVHZW5lcmF0b3JKUy5wbSBjbGllbnQtc2Vy
dmVyIGF3YXJlIGluIHRlcm1zIG9mIElzb1N1YnNwYWNlcy4KKyAgICAgICAgMy4gUmViYXNlIGJp
bmRpbmdzIHRlc3QgcmVzdWx0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9NR0NPdXRw
dXRDb25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6
ZXhlY3V0ZUltcGxJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUFzeW5jSXRlcmF0b3IuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFj
ZUZvcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvck5vdENhbGxhYmxlLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGU6OnN1YnNwYWNlRm9yKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93UHJv
cGVydGllczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd1Byb3BlcnRpZXMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJl
Y3RvcnlIYW5kbGVJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1dpbmRvd1Byb3h5OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTV2luZG93UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlND
bGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OkpTSGVhcERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SlNIZWFwRGF0YTo6ZW5zdXJlSGVhcERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERh
dGE6OmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNIZWFwRGF0YTo6c3Vic3BhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OnNldEZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGll
bnREYXRhOjpub3JtYWxXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6
cmVtZW1iZXJXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6Zm9yZ2V0
V29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OmhlYXBEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpidWlsdGluTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OmJ1aWx0aW5GdW5jdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNWTUNsaWVudERhdGE6OmRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpkb21Db25zdHJ1Y3RvclNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpkb21OYW1lc3BhY2VPYmplY3RTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZG9tV2luZG93UHJvcGVydGllc1NwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpydW50aW1lQXJyYXlTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6cnVudGltZU1ldGhvZFNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpydW50aW1lT2JqZWN0U3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OndpbmRvd1Byb3h5U3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OmlkYlNlcmlhbGl6YXRpb25TcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OnNldEZp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVk1DbGllbnREYXRhOjpjbGllbnRTdWJzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNW
TUNsaWVudERhdGE6OmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OnN1YnNwYWNlcyk6IERlbGV0ZWQuCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5l
cmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlUHJvdG90eXBl
RGVjbGFyYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxz
LnBsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4
cG9zZWRTdGFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFN0YXJET01Db25zdHJ1
Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3Nl
ZFN0YXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTRXhwb3NlZFN0YXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFN0YXI6OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3Jr
ZXJBbmRXaW5kb3c6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xv
YmFsU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJl
ZFdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Q0VSZWFjdGlvbnNET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9u
cy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q0VSZWFjdGlvbnM6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpz
dWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENh
bGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbFRyYWNlckRPTUNvbnN0
cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q2FsbFRyYWNlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2Fs
bFRyYWNlcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckRPTUNvbnN0cnVjdG9yOjpw
cm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXNET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbGx5
UmVhZFdyaXRlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RET01KSVRET01D
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdERPTUpJVDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RE9NSklULmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RET01KSVQ6
OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09O
RE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3REZWZhdWx0VG9KU09OOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9z
ZWRET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9K
U09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2VET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRET01Db25zdHJ1Y3Rvcjo6
cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRE9N
Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZURPTUNvbnN0cnVjdG9y
Ojpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVsZWdh
dGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRp
Y0F0dHJpYnV0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3REb21haW5TZWN1cml0eURPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RG9tYWluU2VjdXJpdHk6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3Vy
aXR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REb21haW5TZWN1cml0eTo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlT
ZXR0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmdET01D
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxlZEZvckNvbnRleHRET01Db25zdHJ1Y3Rvcjo6cHJv
dG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RW5hYmxlZEZvckNvbnRleHQ6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpzdWJzcGFjZUZvcik6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0RE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldDo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpzdWJzcGFj
ZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25ET01Db25zdHJ1Y3Rvcjo6
cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlv
bjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXhjZXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb246OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRl
QWRkT3BhcXVlUm9vdERPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290OjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUFk
ZE9wYXF1ZVJvb3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlQWRkT3BhcXVl
Um9vdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2JhbE9iamVj
dDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmpl
Y3Q6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25ET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckRP
TUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNl
RE9NQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlRE9NQ29uc3RydWN0
b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpzdWJz
cGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJh
YmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEl0ZXJhYmxlRE9NQ29uc3RydWN0b3I6
OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJdGVyYWJs
ZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0SXRlcmFibGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJdGVy
YWJsZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5
RmFjdG9yeUZ1bmN0aW9uOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExl
Z2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluc0RPTUNvbnN0cnVjdG9yOjpw
cm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5T3Zl
cnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE1hcExpa2VET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2U6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvcik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25ET01Db25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkRPTUNvbnN0cnVjdG9yOjpw
cm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1
Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhET01Db25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGg6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJET01Db25zdHJ1Y3Rvcjo6
cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJET01Db25zdHJ1Y3Rvcjo6cHJv
dG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNET01Db25z
dHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9yKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0RPTUNvbnN0cnVjdG9yOjpwcm90b3R5
cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3Ry
dWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNw
YWNlT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZW50
cmllc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RPYmpET01Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
Ymo6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWxET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRp
b25Db25kaXRpb25hbC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWw6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzdWJzcGFjZUZv
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0UGx1Z2luSW50ZXJmYWNlRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdp
bkludGVyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpz
dWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBy
b21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpzdWJzcGFjZUZvcik6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seU1hcExpa2VET01Db25zdHJ1Y3Rvcjo6cHJv
dG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlYWRPbmx5TWFw
TGlrZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFk
T25seU1hcExpa2U6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFJlYWRPbmx5U2V0TGlrZURPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExp
a2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRy
YU1lbW9yeUNvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0RE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Ojpz
dWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBl
Rm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1YnNw
YWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlr
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlRE9NQ29uc3RydWN0b3I6OnBy
b3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXRMaWtlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlOjpzdWJzcGFjZUZv
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0RPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1
Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllckRPTUNvbnN0cnVjdG9y
Ojpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5n
aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdp
Zmllcjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkRPTUNvbnN0cnVjdG9yOjpwcm90
b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6c3Vi
c3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb25ET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBc0RPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJp
bmc6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5oOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpzdWJzcGFjZUZv
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZURPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0
dHJpYnV0ZURPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFRhZ2dlZFdyYXBwZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFRhZ2dlZFdyYXBwZXI6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdy
YXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFRhZ2dlZFdyYXBwZXI6OnN1YnNwYWNl
Rm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNET01Db25zdHJ1Y3Rvcjo6Y29u
c3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OnN1YnNwYWNlRm9yKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvcik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxT
Y29wZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNl
Rm9yKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKiBi
cmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKiBicmlk
Z2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21ldGhvZC5oOgorICAgICAg
ICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpS
dW50aW1lT2JqZWN0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
X29iamVjdC5oOgorCiAyMDIyLTAyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYWtlIEhlYXBUeXBlIGFuIGVudW0gY2xhc3MuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwODYsNiArMjA4Niw3IEBAIHNldChNQUtFX05BTUVTX0RF
UEVOREVOQ0lFUwogKQogc2V0KFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUgJHtXZWJDb3Jl
X0RFUklWRURfU09VUkNFU19ESVJ9L3N1cHBsZW1lbnRhbF9kZXBlbmRlbmN5LnRtcCkKIHNldChJ
U09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9E
T01Jc29TdWJzcGFjZXMuaCkKK3NldChDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSAk
e1dlYkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgpCiBz
ZXQoQ09OU1RSVUNUT1JTX0hFQURFUl9GSUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9ET01Db25zdHJ1Y3RvcnMuaCkKIHNldChXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEUgJHtXZWJD
b3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5pZGwpCiBzZXQo
V09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUgJHtXZWJDb3JlX0RFUklWRURfU09V
UkNFU19ESVJ9L1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCkKQEAgLTIyNzQsOSAr
MjI3NSwxMCBAQCBHRU5FUkFURV9CSU5ESU5HUyhXZWJDb3JlQmluZGluZ3MKICAgICBHRU5FUkFU
T1IgSlMKICAgICBTVVBQTEVNRU5UQUxfREVQRklMRSAke1NVUFBMRU1FTlRBTF9ERVBFTkRFTkNZ
X0ZJTEV9CiAgICAgUFBfRVhUUkFfT1VUUFVUCi0gICAgJHtJU09fU1VCU1BBQ0VTX0hFQURFUl9G
SUxFfSAke0NPTlNUUlVDVE9SU19IRUFERVJfRklMRX0gJHtXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJ
TEV9ICR7V09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEV9ICR7U0hBRE9XUkVBTE1H
TE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRX0gJHtERURJQ0FURURXT1JLRVJHTE9CQUxTQ09Q
RV9DT05TVFJVQ1RPUlNfRklMRX0KKyAgICAke0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEV9ICR7
Q0xJRU5UX0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEV9ICR7Q09OU1RSVUNUT1JTX0hFQURFUl9G
SUxFfSAke1dJTkRPV19DT05TVFJVQ1RPUlNfRklMRX0gJHtXT1JLRVJHTE9CQUxTQ09QRV9DT05T
VFJVQ1RPUlNfRklMRX0gJHtTSEFET1dSRUFMTUdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxF
fSAke0RFRElDQVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfQogICAgIFBQ
X0VYVFJBX0FSR1MKICAgICAgICAgLS1pc29TdWJzcGFjZXNIZWFkZXJGaWxlICR7SVNPX1NVQlNQ
QUNFU19IRUFERVJfRklMRX0KKyAgICAgICAgLS1jbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxl
ICR7Q0xJRU5UX0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEV9CiAgICAgICAgIC0tY29uc3RydWN0
b3JzSGVhZGVyRmlsZSAke0NPTlNUUlVDVE9SU19IRUFERVJfRklMRX0KICAgICAgICAgLS13aW5k
b3dDb25zdHJ1Y3RvcnNGaWxlICR7V0lORE9XX0NPTlNUUlVDVE9SU19GSUxFfQogICAgICAgICAt
LXdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAke1dPUktFUkdMT0JBTFNDT1BFX0NP
TlNUUlVDVE9SU19GSUxFfQpJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC05LDYg
KzksNyBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db2xvckRhdGEuY3BwCiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db21tYW5kTGluZUFQSU1v
ZHVsZVNvdXJjZS5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9Db3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTUNsaWVudElzb1N1YnNwYWNlcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01Db25zdHJ1Y3RvcnMuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NSXNvU3Vic3BhY2Vz
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTUpJVEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDc2LDYgKzIwNzYsNyBAQCBKU19CSU5ESU5HU19TQ1JJUFRT
ID0gJChDT01NT05fQklORElOR1NfCiBTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFID0gU3Vw
cGxlbWVudGFsRGVwZW5kZW5jaWVzLnR4dAogU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMgPSBT
dXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCiBJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFID0g
RE9NSXNvU3Vic3BhY2VzLmgKK0NMSUVOVF9JU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFID0gRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgKIENPTlNUUlVDVE9SU19IRUFERVJfRklMRSA9IERPTUNvbnN0
cnVjdG9ycy5oCiBXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEUgPSBET01XaW5kb3dDb25zdHJ1Y3Rv
cnMuaWRsCiBXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSA9IFdvcmtlckdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JzLmlkbApAQCAtMjA5Miw2ICsyMDkzLDcgQEAgSURMX0lOVEVSTUVE
SUFURV9GSUxFUyA9IFwKICAgICAkKFNVUFBMRU1FTlRBTF9NQUtFRklMRV9ERVBTKSBcCiAgICAg
JChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFKSBcCiAgICAgJChJU09fU1VCU1BBQ0VTX0hF
QURFUl9GSUxFKSBcCisgICAgJChDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSkgXAog
ICAgICQoQ09OU1RSVUNUT1JTX0hFQURFUl9GSUxFKSBcCiAgICAgJChXSU5ET1dfQ09OU1RSVUNU
T1JTX0ZJTEUpIFwKICAgICAkKFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSBc
CkBAIC0yMTA2LDcgKzIxMDgsNyBAQCBJRExfSU5URVJNRURJQVRFX1BBVFRFUk5TID0gJChzdWJz
dCAuLCUsCiAKICQoSURMX0lOVEVSTUVESUFURV9QQVRURVJOUykgOiAkKFBSRVBST0NFU1NfSURM
U19TQ1JJUFRTKSAkKElETF9BVFRSSUJVVEVTX0ZJTEUpICQoSlNfQklORElOR19JRExTKSAkKEZF
QVRVUkVfQU5EX1BMQVRGT1JNX0RFRklORV9ERVBFTkRFTkNJRVMpCiAJJChzaGVsbCBlY2hvICQo
SlNfQklORElOR19JRExTKSB8IHRyICIgIiAiXG4iID4gSURMRmlsZU5hbWVzTGlzdC50eHQpCi0J
JChQRVJMKSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsIC0t
ZGVmaW5lcyAiJChGRUFUVVJFX0FORF9QTEFURk9STV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NS
SVBUIiAtLWlkbEZpbGVOYW1lc0xpc3QgSURMRmlsZU5hbWVzTGlzdC50eHQgLS1pZGxBdHRyaWJ1
dGVzRmlsZSAkKElETF9BVFRSSUJVVEVTX0ZJTEUpIC0tc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZp
bGUgJChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFKSAtLWlzb1N1YnNwYWNlc0hlYWRlckZp
bGUgJChJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxFKSAtLWNvbnN0cnVjdG9yc0hlYWRlckZpbGUg
JChDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEUpIC0td2luZG93Q29uc3RydWN0b3JzRmlsZSAkKFdJ
TkRPV19DT05TVFJVQ1RPUlNfRklMRSkgLS13b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0Zp
bGUgJChXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zaGFkb3dSZWFsbUds
b2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNIQURPV1JFQUxNR0xPQkFMU0NPUEVfQ09OU1RS
VUNUT1JTX0ZJTEUpIC0tZGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoREVESUNBVEVEV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNFUlZJQ0VXT1JLRVJHTE9CQUxT
Q09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zaGFyZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9yc0ZpbGUgJChTSEFSRURXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS13
b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoV09SS0xFVEdMT0JBTFNDT1BFX0NP
TlNUUlVDVE9SU19GSUxFKSAtLXBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmls
ZSAkKFBBSU5UV09SS0xFVEdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLWF1ZGlvV29y
a2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKEFVRElPV09SS0xFVEdMT0JBTFNDT1BF
X0NPTlNUUlVDVE9SU19GSUxFKSAtLXN1cHBsZW1lbnRhbE1ha2VmaWxlRGVwcyAkKFNVUFBMRU1F
TlRBTF9NQUtFRklMRV9ERVBTKQorCSQoUEVSTCkgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRz
L3ByZXByb2Nlc3MtaWRscy5wbCAtLWRlZmluZXMgIiQoRkVBVFVSRV9BTkRfUExBVEZPUk1fREVG
SU5FUykgTEFOR1VBR0VfSkFWQVNDUklQVCIgLS1pZGxGaWxlTmFtZXNMaXN0IElETEZpbGVOYW1l
c0xpc3QudHh0IC0taWRsQXR0cmlidXRlc0ZpbGUgJChJRExfQVRUUklCVVRFU19GSUxFKSAtLXN1
cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlICQoU1VQUExFTUVOVEFMX0RFUEVOREVOQ1lfRklMRSkg
LS1pc29TdWJzcGFjZXNIZWFkZXJGaWxlICQoSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRSkgLS1j
bGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlICQoQ0xJRU5UX0lTT19TVUJTUEFDRVNfSEVBREVS
X0ZJTEUpIC0tY29uc3RydWN0b3JzSGVhZGVyRmlsZSAkKENPTlNUUlVDVE9SU19IRUFERVJfRklM
RSkgLS13aW5kb3dDb25zdHJ1Y3RvcnNGaWxlICQoV0lORE9XX0NPTlNUUlVDVE9SU19GSUxFKSAt
LXdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFdPUktFUkdMT0JBTFNDT1BFX0NP
TlNUUlVDVE9SU19GSUxFKSAtLXNoYWRvd1JlYWxtR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxl
ICQoU0hBRE9XUkVBTE1HTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1kZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChERURJQ0FURURXT1JLRVJHTE9CQUxT
Q09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnNGaWxlICQoU0VSVklDRVdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAt
LXNoYXJlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKFNIQVJFRFdPUktFUkdM
T0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVj
dG9yc0ZpbGUgJChXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tcGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoUEFJTlRXT1JLTEVUR0xPQkFMU0NP
UEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tYXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnNGaWxlICQoQVVESU9XT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc3Vw
cGxlbWVudGFsTWFrZWZpbGVEZXBzICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpCiAKICMK
ICMgRW1pdCB0aGUgcnVsZXMgdG8gZ2VuZXJhdGUgYmluZGluZ3MgZnJvbSBJREwgZmlsZXMuIE5v
dGUgdGhhdCB0aGVyZSBhcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM3LDEwICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLURPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9NR0NPdXRwdXRDb25z
dHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEpCitET01HQ091dHB1dENv
bnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludChWTSYgdm0sIEpTSGVhcERhdGEmIGhlYXBE
YXRhKQogICAgIDogTWFya2luZ0NvbnN0cmFpbnQoIkRvbW8iLCAiRE9NIE91dHB1dCIsIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQsIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29u
Y3VycmVudCwgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKICAgICAsIG1fdm0odm0p
Ci0gICAgLCBtX2NsaWVudERhdGEoY2xpZW50RGF0YSkKKyAgICAsIG1faGVhcERhdGEoaGVhcERh
dGEpCiAgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZtLmhlYXAubXV0YXRvckV4ZWN1dGlv
blZlcnNpb24oKSkKIHsKIH0KQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBET01HQ091dHB1dENvbnN0
cmFpbnQ6OmV4ZWN1dGVJbXBsSQogICAgIAogICAgIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBo
ZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CiAgICAgCi0gICAgbV9jbGllbnREYXRhLmZv
ckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAgbV9oZWFwRGF0YS5mb3JFYWNoT3V0cHV0
Q29uc3RyYWludFNwYWNlKAogICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewogICAg
ICAgICAgICAgYXV0byBmdW5jID0gW10gKFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFw
Q2VsbCwgSGVhcENlbGw6OktpbmQpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNv
blNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6RE9NR0NPdXRwdXQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTIgKzMzLDEy
IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTVk1DbGllbnRE
YXRhOworY2xhc3MgSlNIZWFwRGF0YTsKIAogY2xhc3MgRE9NR0NPdXRwdXRDb25zdHJhaW50IDog
cHVibGljIEpTQzo6TWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIERPTUdDT3V0cHV0Q29uc3RyYWludChKU0M6OlZNJiwgSlNWTUNs
aWVudERhdGEmKTsKKyAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTSGVhcERh
dGEmKTsKICAgICB+RE9NR0NPdXRwdXRDb25zdHJhaW50KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CkBA
IC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
dm9pZCBleGVjdXRlSW1wbEltcGwoVmlzaXRvciYpOwogCiAgICAgSlNDOjpWTSYgbV92bTsKLSAg
ICBKU1ZNQ2xpZW50RGF0YSYgbV9jbGllbnREYXRhOworICAgIEpTSGVhcERhdGEmIG1faGVhcERh
dGE7CiAgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXN5bmNJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXN5bmNJdGVyYXRvci5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFzeW5jSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBE
T01XcmFwcGVkID0gdHlwZW5hbWUgSlNXcmFwcGVyOjpET01XcmFwcGVkOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0RPTUFzeW5jSXRl
cmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCkBAIC0zOSw3ICsz
OSw3IEBAIHZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdEMKIAogREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZSk7CiAKLUpTQzo6SXNv
U3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAm
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+ZG9tQnVpbHRpbkNv
bnN0cnVjdG9yU3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDE1LCAyMDE2IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNyArMjgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTRE9NQ29uc3RydWN0b3JCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZSkpOwogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShDZWxs
VHlwZSwgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpT
RnVuY3Rpb24mKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAKICAgICBKU0M6OldyaXRlQmFycmll
cjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
c3RydWN0b3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxz
YW1Ad2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1p
Y2hhZWxANjhrLm9yZz4KICAqCkBAIC00Niw3ICs0Niw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihjYWxsVGhyb3dUeXBlRXIKICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlND
Ojpqc051bGwoKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTRE9NQ29uc3RydWN0b3JCYXNl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNET01Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
ICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSkt
PmRvbUNvbnN0cnVjdG9yU3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2
IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihKU0RPTUNvbnN0cnVjdG9yQmFzZSkpOwog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShDZWxsVHlwZSwgSlNE
T01Db25zdHJ1Y3RvckJhc2UpOwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBKU0M6OmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KEJhc2U6Omdsb2JhbE9iamVjdCgpKTsgfQogICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBn
bG9iYWxPYmplY3QoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2Fs
bGFibGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db25zdHJ1Y3Rvck5vdENhbGxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIEFsZXhleSBTaHZheWthIDxzaHZhaWthbGVz
aEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0
NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZUZvclN0cnVj
dHVyZShKU0M6OlZNJiwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihKU0RPTUNvbnN0
cnVjdG9yTm90Q2FsbGFibGUpKTsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoQ2VsbFR5cGUsIEpTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE2IENhbm9u
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHVzaW5nIERPTVdyYXBwZWQg
PSB0eXBlbmFtZSBKU1dyYXBwZXI6OkRPTVdyYXBwZWQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRE9NSXRlcmF0b3JQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVz
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzOCw3ICsxMzgsNyBA
QCBib29sIEpTRE9NV2luZG93UHJvcGVydGllczo6ZGVmaW5lT3duUHJvCiAgICAgcmV0dXJuIHR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgc2hvdWxkVGhyb3csICJEZWZpbmlu
ZyBhIHByb3BlcnR5IG9uIGEgV2luZG93UHJvcGVydGllcyBvYmplY3QgaXMgbm90IGFsbG93ZWQu
Il9zKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNE
T01XaW5kb3dQcm9wZXJ0aWVzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAg
cmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21X
aW5kb3dQcm9wZXJ0aWVzU3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoQ2VsbFR5cGU6OmRlc3Ryb3kgPT0gSlNDOjpKU0NlbGw6OmRlc3Ryb3ksICJK
U0RPTVdpbmRvd1Byb3BlcnRpZXMgaXMgbm90IGRlc3RydWN0aWJsZSBhY3R1YWxseSIpOwogICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0
ZToKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3Qm
KTsKLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
KTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDcsMjcgKzQ3LDM5IEBAIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIEpT
RmlsZVN5c3RlbURpcmVjdG8KIHRlbXBsYXRlPD4KIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIEpTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJEaXJl
Y3RvcnkgSGFuZGxlIEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclBy
b3RvdHlwZSkgfTsKIAotSXNvU3Vic3BhY2UqIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yOjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2
bSkKIHsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBhcGlMb2NrZXIodm0pOworICAgIEpTTG9ja0hv
bGRlciBhcGlMb2NrZXIodm0pOwogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBj
bGllbnREYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkpCi0gICAg
ICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yPiB8fCAhSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I+KQotICAg
ICAgICBjbGllbnREYXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNl
KG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvcikpOwotICAgIGVsc2UKLSAgICAgICAgY2xpZW50RGF0YS5zZXRGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTRmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKSk7Ci0gICAgYXV0byogc3BhY2UgPSBjbGllbnREYXRh
LmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7CisgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50RGF0YS5maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZSgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07CisKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBoZWFwRGF0YS5maWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpOworICAgIGlmICghc3BhY2UpIHsKKyAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3I+IHx8ICFKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
cjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3I+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcik7
CisgICAgICAgIGhlYXBEYXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNw
YWNlKHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpKTsKKwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNs
aWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAog
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBhdXRv
KiBjbGllbnRTcGFjZSA9IG5ldyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UoKnNwYWNlKTsKKyAgICBj
bGllbnREYXRhLnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6
dW5pcXVlX3B0cjxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KGNsaWVudFNwYWNlKSk7CisgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwogfQogCiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0ZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcl9vblByb21pc2VTZXR0bGVkQm9keShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSosIEpTRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yKiBjYXN0ZWRUaGlzKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDEzICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpD
b25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlh
bGl6YXRpb25HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIEpTSURCU2VyaWFsaXphdGlvbkdsb2Jh
bE9iamVjdDo6ZmluCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi1Jc29TdWJz
cGFjZSogSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoVk0m
IHZtKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmpl
Y3Q6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5pZGJTZXJpYWxpemF0aW9uU3BhY2UoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNiwxMyArMzYsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0lEQlNl
cmlhbGl6YXRpb25HbG9iYWxPYmplY3QqIGNyZWF0ZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUq
LCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
KTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJik7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmNwcAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzcsNyArMTc3LDcgQEAgV2luZG93UHJveHkq
IEpTV2luZG93UHJveHk6OnRvV3JhcHBlZChWTQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1K
U0M6Oklzb1N1YnNwYWNlKiBKU1dpbmRvd1Byb3h5OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXaW5kb3dQcm94eTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKS0+d2luZG93UHJveHlTcGFjZSgpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFj
Y2Vzcz4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKSB7
IHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pIHsgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2
bSk7IH0KIAogICAgIHN0YXRpYyBKU1dpbmRvd1Byb3h5JiBjcmVhdGUoSlNDOjpWTSYsIEFic3Ry
YWN0RE9NV2luZG93JiwgRE9NV3JhcHBlcldvcmxkJik7CiAKQEAgLTcxLDcgKzcxLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBKU1dpbmRvd1Byb3h5KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVy
ZSYsIERPTVdyYXBwZXJXb3JsZCYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IEFic3RyYWN0RE9NV2luZG93Jik7Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAgUmVmPERPTVdyYXBwZXJXb3Js
ZD4gbV93b3JsZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIgogCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZS5oIgpAQCAtNTMsMTUg
KzU0LDE0IEBACiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRpbWVf
bWV0aG9kLmgiCiAjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKKyNpbmNsdWRlIDxtdXRleD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZt
KQotICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQotICAgICwgbV9idWlsdGluTmFtZXModm0p
Ci0gICAgLCBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6
QXJnczxSdW50aW1lQXJyYXk+KCkpCitKU0hlYXBEYXRhOjpKU0hlYXBEYXRhKEhlYXAmIGhlYXAp
CisgICAgOiBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6
QXJnczxSdW50aW1lQXJyYXk+KCkpCiAgICAgLCBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGUo
SlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdD4o
KSkKICAgICAsIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5cGUoSlNDOjpJc29IZWFwQ2VsbFR5cGU6
OkFyZ3M8SlNXaW5kb3dQcm94eT4oKSkKICAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNET01XaW5k
b3coSlNDOjpJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNET01XaW5kb3c+KCkpCkBAIC04MSwxOSAr
ODEsNTMgQEAgSlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICAsIG1f
aGVhcENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZShKU0M6Oklzb0hlYXBDZWxs
VHlwZTo6QXJnczxKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlPigpKQogI2VuZGlmCiAgICAgLCBt
X2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdChKU0M6Oklzb0hl
YXBDZWxsVHlwZTo6QXJnczxKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q+KCkpCi0gICAg
LCBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKQotICAg
ICwgbV9kb21Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUoKSwgSlNET01Db25zdHJ1Y3RvckJhc2UpCi0gICAgLCBtX2RvbU5hbWVz
cGFjZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2Vs
bFR5cGUoKSwgSlNET01PYmplY3QpCi0gICAgLCBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTRE9NV2lu
ZG93UHJvcGVydGllcykKLSAgICAsIG1fcnVudGltZUFycmF5U3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGUsIFJ1bnRpbWVBcnJheSkKLSAg
ICAsIG1fcnVudGltZU1ldGhvZFNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUoKSwgUnVudGltZU1ldGhvZCkgLy8gSGFzaDoweGY3MGM0YTg1Ci0gICAg
LCBtX3J1bnRpbWVPYmplY3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3J1bnRp
bWVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3QpCi0gICAg
LCBtX3dpbmRvd1Byb3h5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgbV93aW5kb3dQ
cm94eUhlYXBDZWxsVHlwZSwgSlNXaW5kb3dQcm94eSkKLSAgICAsIG1faWRiU2VyaWFsaXphdGlv
blNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJT
ZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Qp
CisgICAgLCBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKQor
ICAgICwgbV9kb21Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNET01Db25zdHJ1Y3RvckJhc2UpCisgICAgLCBtX2RvbU5hbWVz
cGFjZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNET01PYmplY3QpCisgICAgLCBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRE9NV2luZG93UHJv
cGVydGllcykKKyAgICAsIG1fcnVudGltZUFycmF5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgbV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGUsIFJ1bnRpbWVBcnJheSkKKyAgICAsIG1fcnVu
dGltZU1ldGhvZFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgUnVudGltZU1ldGhvZCkgLy8gSGFzaDoweGY3MGM0YTg1CisgICAgLCBtX3J1bnRpbWVP
YmplY3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3J1bnRpbWVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3QpCisgICAgLCBtX3dpbmRvd1Byb3h5
U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZSwg
SlNXaW5kb3dQcm94eSkKKyAgICAsIG1faWRiU2VyaWFsaXphdGlvblNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2Jq
ZWN0LCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QpCiAgICAgLCBtX3N1YnNwYWNlcyht
YWtlVW5pcXVlPERPTUlzb1N1YnNwYWNlcz4oKSkKIHsKIH0KIAorSlNIZWFwRGF0YSogSlNIZWFw
RGF0YTo6ZW5zdXJlSGVhcERhdGEoSGVhcCYgaGVhcCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6OnVz
ZUdsb2JhbEdDKCkpCisgICAgICAgIHJldHVybiBuZXcgSlNIZWFwRGF0YShoZWFwKTsKKworICAg
IHN0YXRpYyBKU0hlYXBEYXRhKiBzaW5nbGV0b24gPSBudWxscHRyOworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdIHsK
KyAgICAgICAgc2luZ2xldG9uID0gbmV3IEpTSGVhcERhdGEoaGVhcCk7CisgICAgfSk7CisgICAg
cmV0dXJuIHNpbmdsZXRvbjsKK30KKworI2RlZmluZSBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQo
c3Vic3BhY2UpIHN1YnNwYWNlKG1faGVhcERhdGEtPnN1YnNwYWNlKQorCitKU1ZNQ2xpZW50RGF0
YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQorICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQor
ICAgICwgbV9idWlsdGluTmFtZXModm0pCisgICAgLCBtX2hlYXBEYXRhKEpTSGVhcERhdGE6OmVu
c3VyZUhlYXBEYXRhKHZtLmhlYXApKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1f
ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lO
SVQobV9kb21Db25zdHJ1Y3RvclNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklU
KG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lO
SVQobV9kb21XaW5kb3dQcm9wZXJ0aWVzU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQobV9ydW50aW1lQXJyYXlTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5J
VChtX3J1bnRpbWVNZXRob2RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVCht
X3J1bnRpbWVPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3dp
bmRvd1Byb3h5U3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9pZGJTZXJp
YWxpemF0aW9uU3BhY2UpCisgICAgLCBtX2NsaWVudFN1YnNwYWNlcyhtYWtlVW5pcXVlPERPTUNs
aWVudElzb1N1YnNwYWNlcz4oKSkKK3sKK30KKworI3VuZGVmIENMSUVOVF9JU09fU1VCU1BBQ0Vf
SU5JVAorCiBKU1ZNQ2xpZW50RGF0YTo6fkpTVk1DbGllbnREYXRhKCkKIHsKICAgICBBU1NFUlQo
bV93b3JsZFNldC5jb250YWlucyhtX25vcm1hbFdvcmxkLmdldCgpKSk7CkBAIC0xNDIsNyArMTc2
LDcgQEAgdm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgogICAgIEpTVk1D
bGllbnREYXRhKiBjbGllbnREYXRhID0gbmV3IEpTVk1DbGllbnREYXRhKCp2bSk7CiAgICAgdm0t
PmNsaWVudERhdGEgPSBjbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAK
LSAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChtYWtlVW5pcXVlPERPTUdDT3V0cHV0
Q29uc3RyYWludD4oKnZtLCAqY2xpZW50RGF0YSkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdD
b25zdHJhaW50KG1ha2VVbmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sIGNsaWVudERh
dGEtPmhlYXBEYXRhKCkpKTsKIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01X
cmFwcGVyV29ybGQ6OmNyZWF0ZSgqdm0sIERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6Tm9ybWFsKTsK
ICAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIodHlwZSA9PSBXb3JrZXJUaHJlYWRUeXBlOjpEZWRpY2F0ZWRXb3Jr
ZXIgfHwgdHlwZSA9PSBXb3JrZXJUaHJlYWRUeXBlOjpXb3JrbGV0KSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAg
LTI1LDU0ICsyNSwyNiBAQAogI2luY2x1ZGUgIldlYkNvcmVCdWlsdGluTmFtZXMuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNCdWlsdGlucy5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZFR5cGUuaCIK
KyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBET01D
bGllbnRJc29TdWJzcGFjZXM7CiBjbGFzcyBET01Jc29TdWJzcGFjZXM7CiAKLWNsYXNzIEpTVk1D
bGllbnREYXRhIDogcHVibGljIEpTQzo6Vk06OkNsaWVudERhdGEgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEpTVk1DbGllbnREYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
ZnJpZW5kIGNsYXNzIFZNV29ybGRJdGVyYXRvcjsKLQorY2xhc3MgSlNIZWFwRGF0YSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSlNIZWFwRGF0YSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIEpTVk1DbGllbnREYXRhOwogcHVibGljOgotICAgIGV4
cGxpY2l0IEpTVk1DbGllbnREYXRhKEpTQzo6Vk0mKTsKLQotICAgIHZpcnR1YWwgfkpTVk1DbGll
bnREYXRhKCk7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgaW5pdE5vcm1h
bFdvcmxkKEpTQzo6Vk0qLCBXb3JrZXJUaHJlYWRUeXBlKTsKLQotICAgIERPTVdyYXBwZXJXb3Js
ZCYgbm9ybWFsV29ybGQoKSB7IHJldHVybiAqbV9ub3JtYWxXb3JsZDsgfQorICAgIEpTSGVhcERh
dGEoSlNDOjpIZWFwJik7CiAKLSAgICB2b2lkIGdldEFsbFdvcmxkcyhWZWN0b3I8UmVmPERPTVdy
YXBwZXJXb3JsZD4+Jik7Ci0KLSAgICB2b2lkIHJlbWVtYmVyV29ybGQoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV93b3JsZFNldC5jb250YWlucygmd29y
bGQpKTsKLSAgICAgICAgbV93b3JsZFNldC5hZGQoJndvcmxkKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGZvcmdldFdvcmxkKERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCi0gICAgewotICAgICAgICBBU1NF
UlQobV93b3JsZFNldC5jb250YWlucygmd29ybGQpKTsKLSAgICAgICAgbV93b3JsZFNldC5yZW1v
dmUoJndvcmxkKTsKLSAgICB9CisgICAgc3RhdGljIEpTSGVhcERhdGEqIGVuc3VyZUhlYXBEYXRh
KEpTQzo6SGVhcCYpOwogCi0gICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyYgYnVpbHRpbk5hbWVzKCkg
eyByZXR1cm4gbV9idWlsdGluTmFtZXM7IH0KLSAgICBKU0J1aWx0aW5GdW5jdGlvbnMmIGJ1aWx0
aW5GdW5jdGlvbnMoKSB7IHJldHVybiBtX2J1aWx0aW5GdW5jdGlvbnM7IH0KLSAgICAKLSAgICBK
U0M6Oklzb1N1YnNwYWNlJiBkb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpIHsgcmV0dXJuIG1f
ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBkb21D
b25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21Db25zdHJ1Y3RvclNwYWNlOyB9Ci0gICAg
SlNDOjpJc29TdWJzcGFjZSYgZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX2Rv
bU5hbWVzcGFjZU9iamVjdFNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgZG9tV2luZG93
UHJvcGVydGllc1NwYWNlKCkgeyByZXR1cm4gbV9kb21XaW5kb3dQcm9wZXJ0aWVzU3BhY2U7IH0K
LSAgICBKU0M6Oklzb1N1YnNwYWNlJiBydW50aW1lQXJyYXlTcGFjZSgpIHsgcmV0dXJuIG1fcnVu
dGltZUFycmF5U3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBydW50aW1lTWV0aG9kU3Bh
Y2UoKSB7IHJldHVybiBtX3J1bnRpbWVNZXRob2RTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3Bh
Y2UmIHJ1bnRpbWVPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU9iamVjdFNwYWNlOyB9
Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgd2luZG93UHJveHlTcGFjZSgpIHsgcmV0dXJuIG1fd2lu
ZG93UHJveHlTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIGlkYlNlcmlhbGl6YXRpb25T
cGFjZSgpIHsgcmV0dXJuIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOyB9Ci0gICAgSlNDOjpJc29T
dWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJldHVy
biBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9Ci0gICAg
dm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1
ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gc3BhY2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhjaGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9CisgICAg
TG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIERPTUlzb1N1YnNwYWNlcyYgc3Vi
c3BhY2VzKCkgeyByZXR1cm4gKm1fc3Vic3BhY2VzLmdldCgpOyB9CiAKICAgICBWZWN0b3I8SlND
OjpJc29TdWJzcGFjZSo+JiBvdXRwdXRDb25zdHJhaW50U3BhY2VzKCkgeyByZXR1cm4gbV9vdXRw
dXRDb25zdHJhaW50U3BhY2VzOyB9CiAKQEAgLTgzLDE0ICs1NSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBmdW5jKCpzcGFjZSk7CiAgICAgfQogCi0gICAgRE9NSXNvU3Vic3BhY2VzJiBzdWJz
cGFjZXMoKSB7IHJldHVybiAqbV9zdWJzcGFjZXMuZ2V0KCk7IH0KKyAgICBKU0M6Oklzb1N1YnNw
YWNlKiBmaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1f
ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0
cjxKU0M6Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvclNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFjZSwgbnVsbHB0cik7IH0KIAogcHJpdmF0
ZToKLSAgICBIYXNoU2V0PERPTVdyYXBwZXJXb3JsZCo+IG1fd29ybGRTZXQ7Ci0gICAgUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4gbV9ub3JtYWxXb3JsZDsKLQotICAgIEpTQnVpbHRpbkZ1bmN0aW9u
cyBtX2J1aWx0aW5GdW5jdGlvbnM7Ci0gICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyBtX2J1aWx0aW5O
YW1lczsKKyAgICBMb2NrIG1fbG9jazsKIAogICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1fcnVu
dGltZUFycmF5SGVhcENlbGxUeXBlOwogICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1fcnVudGlt
ZU9iamVjdEhlYXBDZWxsVHlwZTsKQEAgLTEyNSw4ICs5NCw3OCBAQCBwcml2YXRlOgogICAgIEpT
Qzo6SXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwogICAgIEpTQzo6SXNvU3Vic3BhY2Ug
bV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vi
c3BhY2U+IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2U7CisKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RE9NSXNvU3Vic3BhY2VzPiBtX3N1YnNwYWNlczsKICAgICBWZWN0b3I8
SlNDOjpJc29TdWJzcGFjZSo+IG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsKIH07CiAKKworY2xh
c3MgSlNWTUNsaWVudERhdGEgOiBwdWJsaWMgSlNDOjpWTTo6Q2xpZW50RGF0YSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSlNWTUNsaWVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBmcmllbmQgY2xhc3MgVk1Xb3JsZEl0ZXJhdG9yOworCitwdWJsaWM6CisgICAgZXhw
bGljaXQgSlNWTUNsaWVudERhdGEoSlNDOjpWTSYpOworCisgICAgdmlydHVhbCB+SlNWTUNsaWVu
dERhdGEoKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBpbml0Tm9ybWFs
V29ybGQoSlNDOjpWTSosIFdvcmtlclRocmVhZFR5cGUpOworCisgICAgRE9NV3JhcHBlcldvcmxk
JiBub3JtYWxXb3JsZCgpIHsgcmV0dXJuICptX25vcm1hbFdvcmxkOyB9CisKKyAgICB2b2lkIGdl
dEFsbFdvcmxkcyhWZWN0b3I8UmVmPERPTVdyYXBwZXJXb3JsZD4+Jik7CisKKyAgICB2b2lkIHJl
bWVtYmVyV29ybGQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV93b3JsZFNldC5jb250YWlucygmd29ybGQpKTsKKyAgICAgICAgbV93b3JsZFNldC5hZGQo
JndvcmxkKTsKKyAgICB9CisKKyAgICB2b2lkIGZvcmdldFdvcmxkKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQpCisgICAgeworICAgICAgICBBU1NFUlQobV93b3JsZFNldC5jb250YWlucygmd29ybGQp
KTsKKyAgICAgICAgbV93b3JsZFNldC5yZW1vdmUoJndvcmxkKTsKKyAgICB9CisKKyAgICBKU0hl
YXBEYXRhJiBoZWFwRGF0YSgpIHsgcmV0dXJuICptX2hlYXBEYXRhOyB9CisKKyAgICBXZWJDb3Jl
QnVpbHRpbk5hbWVzJiBidWlsdGluTmFtZXMoKSB7IHJldHVybiBtX2J1aWx0aW5OYW1lczsgfQor
ICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyYgYnVpbHRpbkZ1bmN0aW9ucygpIHsgcmV0dXJuIG1fYnVp
bHRpbkZ1bmN0aW9uczsgfQorICAgIAorICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBk
b21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZG9tQnVpbHRpbkNvbnN0cnVj
dG9yU3BhY2U7IH0KKyAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgZG9tQ29uc3RydWN0
b3JTcGFjZSgpIHsgcmV0dXJuIG1fZG9tQ29uc3RydWN0b3JTcGFjZTsgfQorICAgIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlJiBkb21OYW1lc3BhY2VPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1f
ZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2U7IH0KKyAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSYgZG9tV2luZG93UHJvcGVydGllc1NwYWNlKCkgeyByZXR1cm4gbV9kb21XaW5kb3dQcm9wZXJ0
aWVzU3BhY2U7IH0KKyAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcnVudGltZUFycmF5
U3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVBcnJheVNwYWNlOyB9CisgICAgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVNZXRob2RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU1l
dGhvZFNwYWNlOyB9CisgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmpl
Y3RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU9iamVjdFNwYWNlOyB9CisgICAgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UmIHdpbmRvd1Byb3h5U3BhY2UoKSB7IHJldHVybiBtX3dpbmRvd1By
b3h5U3BhY2U7IH0KKyAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgaWRiU2VyaWFsaXph
dGlvblNwYWNlKCkgeyByZXR1cm4gbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7IH0KKyAgICBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNl
LmdldCgpOyB9CisgICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JT
cGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7
IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdl
KHNwYWNlLCBudWxscHRyKTsgfQorCisgICAgRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBjbGllbnRT
dWJzcGFjZXMoKSB7IHJldHVybiAqbV9jbGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KKworcHJpdmF0
ZToKKyAgICBIYXNoU2V0PERPTVdyYXBwZXJXb3JsZCo+IG1fd29ybGRTZXQ7CisgICAgUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4gbV9ub3JtYWxXb3JsZDsKKworICAgIEpTQnVpbHRpbkZ1bmN0aW9u
cyBtX2J1aWx0aW5GdW5jdGlvbnM7CisgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyBtX2J1aWx0aW5O
YW1lczsKKworICAgIEpTSGVhcERhdGEqIG1faGVhcERhdGE7CisgICAgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UgbV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZTsKKyAgICBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSBtX2RvbUNvbnN0cnVjdG9yU3BhY2U7CisgICAgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UgbV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZTsKKyAgICBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZTsKKyAgICBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSBtX3J1bnRpbWVBcnJheVNwYWNlOworICAgIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlIG1fcnVudGltZU1ldGhvZFNwYWNlOworICAgIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNwYWNlOworICAgIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlIG1fd2luZG93UHJveHlTcGFjZTsKKyAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2Ns
aWVudFN1YnNwYWNlczsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgQ29weXJpZ2h0
IChDKSAyMDA2IEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4KICMgQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogIyBDb3B5cmln
aHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSMgQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENv
cHlyaWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5hdT4KICMgQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0zMDkzLDEzICszMDkzLDEzIEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pXG4iKTsKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTtcbiIpOwogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTtc
biIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pO1xuIik7CiAKICAgICAj
IHZpc2l0IGZ1bmN0aW9uCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKQEAgLTQ4NzEs
MzcgKzQ4NzEsNTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAKICAgICBHZW5l
cmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJs
ZTsKIAorICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01DbGllbnRJc29TdWJzcGFjZXMuaCIpOwog
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Iik7
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvck1hY3Jv
cy5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJ
bmxpbmVzLmg+Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6Oklzb1N1YnNwYWNlKiAk
e2NsYXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7XG4iKTsKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNl
cygpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpKVxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBzcGFjZTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFt
ZX0uZ2V0KCkpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCFzcGFjZSkge1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwO1xuIik7CisKICAgICBpZiAoSXNET01HbG9i
YWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlw
ZUZvciR7Y2xhc3NOYW1lfSwgJHtjbGFzc05hbWV9KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX0sICR7Y2xhc3NO
YW1lfSk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4i
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+KVxuIik7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
ciR7aW50ZXJmYWNlTmFtZX0gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0Vf
SU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgJHtjbGFz
c05hbWV9KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBlbHNlXG4iKTsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
JHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgJHtjbGFzc05hbWV9KTtcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+IHx8ICEk
e2NsYXNzTmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4pXG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgJHtjbGFz
c05hbWV9KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgZWxzZVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCAke2NsYXNzTmFtZX0pO1xuIik7CiAgICAgfQotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpbnRlcmZhY2VOYW1lfSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
O1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1
bnJlYWNoYWJsZS1jb2RlXCIpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9X
QVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0
cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOwotICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpXG4iKTsKLSMgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCYk
e2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7XG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpXG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FS
TklOR1NfRU5EXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19F
TkRcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzcGFjZTtcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4iKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9
LmdldCgpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYg
KCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKQEAgLTY3ODUsMjkgKzY3OTgsNDAgQEAgcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSAke2l0ZXJhdG9yTmFtZX1CYXNlOwogICAgIERFQ0xBUkVfSU5GTzsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNv
bnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBhdXRvJiBz
cGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKSkKLSAgICAgICAgICAg
IHJldHVybiBzcGFjZTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+IHx8ICEke2l0ZXJhdG9y
TmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4pCi0g
ICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSgpLCAke2l0ZXJhdG9yTmFtZX0pOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2Vs
bFR5cGUoKSwgJHtpdGVyYXRvck5hbWV9KTsKLSAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsKKyAgICAgICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICAgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9y
TmFtZX0uZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICAgICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgICAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKKyAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7CisgICAgICAgIGlmICghc3BhY2UpIHsK
KyAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJh
dG9yTmFtZX0+IHx8ICEke2l0ZXJhdG9yTmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+KQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCAke2l0ZXJhdG9yTmFtZX0pOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgJHtpdGVyYXRvck5hbWV9KTsKKyAgICAgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2Rl
XCIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gJHtpdGVyYXRvck5hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFt
ZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAg
ICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgcmV0
dXJuIHNwYWNlOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgICAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTc1ODgsNyArNzYx
Miw3IEBAIHN1YiBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uCiAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIERFQ0xBUkVfSU5GTztcbiIpOwogCiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPlxu
Iik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOwogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoJHtwcm90b3R5cGVDbGFzc05hbWV9LCBCYXNlKTtcbiIpOwogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7XG4iKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1p
ZGxzLnBsCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3ByZXByb2Nlc3MtaWRscy5wbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBt
eSAkaWRsRmlsZU5hbWVzTGlzdDsKIG15ICR0ZXN0R2xvYmFsQ29udGV4dE5hbWU7CiBteSAkc3Vw
cGxlbWVudGFsRGVwZW5kZW5jeUZpbGU7CiBteSAkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZTsKK215
ICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlOwogbXkgJGNvbnN0cnVjdG9yc0hlYWRlckZp
bGU7CiBteSAkd2luZG93Q29uc3RydWN0b3JzRmlsZTsKIG15ICR3b3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yc0ZpbGU7CkBAIC04MSw2ICs4Miw3IEBAIEdldE9wdGlvbnMoJ2RlZmluZXM9cycg
PT4gXCRkZWZpbmVzLAogICAgICAgICAgICAndGVzdEdsb2JhbENvbnRleHROYW1lPXMnID0+IFwk
dGVzdEdsb2JhbENvbnRleHROYW1lLAogICAgICAgICAgICAnc3VwcGxlbWVudGFsRGVwZW5kZW5j
eUZpbGU9cycgPT4gXCRzdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSwKICAgICAgICAgICAgJ2lz
b1N1YnNwYWNlc0hlYWRlckZpbGU9cycgPT4gXCRpc29TdWJzcGFjZXNIZWFkZXJGaWxlLAorICAg
ICAgICAgICAnY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZT1zJyA9PiBcJGNsaWVudElTT1N1
YnNwYWNlc0hlYWRlckZpbGUsCiAgICAgICAgICAgICdjb25zdHJ1Y3RvcnNIZWFkZXJGaWxlPXMn
ID0+IFwkY29uc3RydWN0b3JzSGVhZGVyRmlsZSwKICAgICAgICAgICAgJ3dpbmRvd0NvbnN0cnVj
dG9yc0ZpbGU9cycgPT4gXCR3aW5kb3dDb25zdHJ1Y3RvcnNGaWxlLAogICAgICAgICAgICAnd29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlPXMnID0+IFwkd29ya2VyR2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcnNGaWxlLApAQCAtMTE0LDYgKzExNiw3IEBAIGRpZSgnTXVzdCBzcGVjaWZ5IElE
TCBhdHRyaWJ1dGVzIGZpbGUgdXMKIAogJHN1cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlID0gQ3ln
d2luUGF0aElmTmVlZGVkKCRzdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZSk7CiAkaXNvU3Vic3Bh
Y2VzSGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkaXNvU3Vic3BhY2VzSGVhZGVyRmls
ZSk7CiskY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgk
Y2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSk7CiAkY29uc3RydWN0b3JzSGVhZGVyRmlsZSA9
IEN5Z3dpblBhdGhJZk5lZWRlZCgkY29uc3RydWN0b3JzSGVhZGVyRmlsZSk7CiAkd2luZG93Q29u
c3RydWN0b3JzRmlsZSA9IEN5Z3dpblBhdGhJZk5lZWRlZCgkd2luZG93Q29uc3RydWN0b3JzRmls
ZSk7CiAkd29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlID0gQ3lnd2luUGF0aElmTmVl
ZGVkKCR3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUpOwpAQCAtMTc1LDYgKzE3OCw3
IEBAIG15ICRpc29TdWJzcGFjZXNIZWFkZXJDb2RlID0gPDxFTkQ7CiAjcHJhZ21hIG9uY2UKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogY2xhc3MgRE9NSXNv
U3Vic3BhY2VzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShET01Jc29TdWJzcGFjZXMpOwpA
QCAtMTgzLDYgKzE4NywyMiBAQCBwdWJsaWM6CiAgICAgRE9NSXNvU3Vic3BhY2VzKCkgPSBkZWZh
dWx0OwogRU5ECiAKK215ICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJDb2RlID0gPDxFTkQ7Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK2NsYXNzIERPTUNsaWVudElzb1N1YnNwYWNlcyB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRE9NQ2xpZW50SXNvU3Vic3BhY2VzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RChET01DbGllbnRJc29TdWJzcGFjZXMpOworcHVibGljOgorICAgIERPTUNsaWVudElzb1N1YnNw
YWNlcygpID0gZGVmYXVsdDsKK0VORAorCiBteSBAY29uc3RydWN0b3JzID0gKCk7CiBteSAkY29u
c3RydWN0b3JzSGVhZGVyQ29kZSA9IDw8RU5EOwogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CkBAIC0yNDgsOSArMjY4LDExIEBAIGZvcmVhY2ggbXkgJGlkbEZpbGVOYW1lIChzb3J0IGtleXMg
JWlkbEYKIAogICAgIG15ICRpc0NhbGxiYWNrSW50ZXJmYWNlID0gaXNDYWxsYmFja0ludGVyZmFj
ZUZyb21JREwoJGlkbEZpbGUpOwogICAgIGlmICghJGlzQ2FsbGJhY2tJbnRlcmZhY2UpIHsKLSAg
ICAgICAgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9wdHI8SlND
OjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX07XG4iOworICAgICAg
ICAkaXNvU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4gbV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX07XG4iOworICAgICAgICAkY2xpZW50
SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9O1xuIjsKICAg
ICAgICAgaWYgKGNvbnRhaW5zSXRlcmFibGVJbnRlcmZhY2VGcm9tSURMKCRpZGxGaWxlKSkgewot
ICAgICAgICAgICAgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIiAgICBzdGQ6OnVuaXF1ZV9w
dHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRv
cjtcbiI7CisgICAgICAgICAgICAkaXNvU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVy
YXRvcjtcbiI7CisgICAgICAgICAgICAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAi
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0NsaWVudDo6SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vic3Bh
Y2VGb3Ike2ludGVyZmFjZU5hbWV9SXRlcmF0b3I7XG4iOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0zMjYsNiArMzQ4LDEyIEBAIGlmICgkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSkgewogICAgIFdy
aXRlRmlsZUlmQ2hhbmdlZCgkaXNvU3Vic3BhY2VzSGVhZGVyRmlsZSwgJGlzb1N1YnNwYWNlc0hl
YWRlckNvZGUpOwogfQogCitpZiAoJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUpIHsKKyAg
ICAkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAifTtcbiI7CisgICAgJGNsaWVudElT
T1N1YnNwYWNlc0hlYWRlckNvZGUgLj0gIn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcbiI7CisgICAg
V3JpdGVGaWxlSWZDaGFuZ2VkKCRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlLCAkY2xpZW50
SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSk7Cit9CisKIGlmICgkY29uc3RydWN0b3JzSGVhZGVyRmls
ZSkgewogICAgIG15ICRjb25zdHJ1Y3RvcnNMZW5ndGggPSBAY29uc3RydWN0b3JzOwogICAgICRj
b25zdHJ1Y3RvcnNIZWFkZXJDb2RlIC49ICJ9O1xuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1
ZGUgIkpTRE9NV2luZG93LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgpAQCAtMzYzLDIzICszNjQsMzQgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRE9NV2lu
ZG93X1RlcwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNET01XaW5kb3c+OjpnZXQ8anNET01X
aW5kb3dfVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlNDOjpJc29T
dWJzcGFjZSogSlNET01XaW5kb3c6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9N
V2luZG93LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JET01XaW5kb3cgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3csIEpTRE9N
V2luZG93KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93
LmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
KworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTRE9NV2luZG93LCBK
U0RPTVdpbmRvdyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93ID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRE9NV2luZG93Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRE9NV2luZG93Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJ
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRE9NV2luZG93ID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCk7CiB9CiAKIHZvaWQgSlNET01XaW5kb3c6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RP
TVdpbmRvdy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUw
LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0
cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwg
SlNDOjpIZWFwQW5hbHl6ZXImKTsKICAgICBET01XaW5kb3cmIHdyYXBwZWQoKSBjb25zdAogICAg
IHsKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNET01XaW5k
b3dQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKQEAg
LTE2NCwyMyArMTY1LDM0IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RlZGljYXRlZFdv
cmsKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU+
OjpnZXQ8anNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV9FeHBvc2VkU3RhckNvbnN0cnVjdG9y
R2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsK
IH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SXNv
U3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEubV9oZWFwQ2Vs
bFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLCBKU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLCBKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Cisg
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUuZ2V0KCk7CiB9CiAKIHZvaWQgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMyArNDcsMTMg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9k
ZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOwogICAgIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlJiB3cmFwcGVk
KCkgY29uc3QKICAgICB7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
SU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRTdGFyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRTdGFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAog
I2luY2x1ZGUgIkpTRXhwb3NlZFN0YXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRXhwb3Nl
ZFN0YXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKQEAgLTIyOCwyNyArMjI5LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc0V4
cG9zZWRTdGFyUHIKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTRXhwb3NlZFN0YXI+OjpjYWxs
PGpzRXhwb3NlZFN0YXJQcm90b3R5cGVGdW5jdGlvbl9vcGVyYXRpb25KdXN0Rm9yV29ya2VyQ29u
dGV4dHNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm9wZXJhdGlvbkp1
c3RGb3JXb3JrZXJDb250ZXh0cyIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU0V4cG9zZWRT
dGFyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNFeHBvc2VkU3Rhcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFN0YXI+IHx8ICFKU0V4cG9z
ZWRTdGFyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFN0YXI+KQotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRTdGFyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlKCksIEpTRXhwb3NlZFN0YXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JFeHBvc2VkU3RhciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNFeHBvc2VkU3Rhcik7Ci0g
ICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRTdGFyLmdldCgpOwor
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Cisg
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JFeHBvc2VkU3Rhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JH
UFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rhcj4gfHwgIUpTRXhwb3NlZFN0YXI6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFN0YXI+KQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFN0YXIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFN0YXIpOworICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvckV4cG9zZWRTdGFyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTRXhwb3NlZFN0YXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNFeHBvc2VkU3Rhcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvckV4cG9zZWRTdGFyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JF
eHBvc2VkU3Rhci5nZXQoKTsKIH0KIAogdm9pZCBKU0V4cG9zZWRTdGFyOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRTdGFyLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRTdGFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihK
U0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJz
cGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09
IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Cisg
ICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVh
cEFuYWx5emVyJik7CiAgICAgRXhwb3NlZFN0YXImIHdyYXBwZWQoKSBjb25zdAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhw
b3NlZFRvV29ya2VyQW5kV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBA
QAogI2luY2x1ZGUgIkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCkBAIC0xMDksNyArMTEwLDcgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTI0NiwyNyAr
MjQ3LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc0V4cG9zZWRUb1dvcmsKICAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Pjo6Y2FsbDxqc0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uX2RvU29tZXRoaW5nQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJkb1NvbWV0aGluZyIpOwogfQogCi1K
U0M6Oklzb1N1YnNwYWNlKiBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3cuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93PiB8fCAhSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+KQotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSgpLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7Ci0gICAgZWxzZQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFw
Q2VsbFR5cGUoKSwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cpOwotICAgIGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7Cisg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
ckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3c+IHx8ICFKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6bmVlZHNEZXN0cnVjdGlvbik7Cisg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+KQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdp
bmRvdyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7CiB9CiAKIHZvaWQg
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsMTMgKzUwLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
JiwgUmVmPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgpAQCAtMTYzLDIzICsxNjQsMzQgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzUGFp
bnRXb3JrbGV0RwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZT46OmdldDxqc1BhaW50V29ya2xldEdsb2JhbFNjb3BlX1BhaW50V29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0
dHJpYnV0ZU5hbWUpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBD
ZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUsIEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGUpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdvcmts
ZXRHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
KworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBp
ZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hl
YXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUsIEpTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2Jh
bFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKIH0KIAogdm9pZCBK
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDEzICs0NywxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAgICAgUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGUmIHdyYXBwZWQoKSBjb25zdAogICAgIHsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogCiAg
ICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZSwgQmFzZSk7
CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCkBAIC0xNjMsMjMgKzE2NCwzNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoanNTZXJ2aWNlV29ya2VyCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZT46OmdldDxqc1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZV9TZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTU2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IHNwYWNlOwotICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xp
ZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLCBKU1Nl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckds
b2JhbFNjb3BlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1h
cE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKKyAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZSwgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlLmdldCgpOwogfQogCiB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEzICs0NywxMyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwg
Y29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiAgICAgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJiB3cmFwcGVkKCkgY29uc3QKICAgICB7
CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3Bl
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0xNDksMjMgKzE1MCwzNCBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNTaGFkb3dSZWFsbUdsCiAgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU+OjpnZXQ8anNTaGFkb3dSZWFsbUds
b2JhbFNjb3BlX1NoYWRvd1JlYWxtR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNv
U3Vic3BhY2UqIEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTU2hhZG93UmVhbG1HbG9iYWxT
Y29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhZG93UmVhbG1H
bG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIGNsaWVudERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1NoYWRvd1JlYWxtR2xvYmFsU2Nv
cGUsIEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxt
R2xvYmFsU2NvcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BV
TWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOworICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2hhZG93UmVhbG1HbG9iYWxTY29w
ZSwgSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
U2hhZG93UmVhbG1HbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgp
OwogfQogCiB2b2lkIEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1Jl
YWxtR2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNT
aGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCkBAIC0xNDcsMjMgKzE0OCwzNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNTaGFy
ZWRXb3JrZXJHCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1NoYXJlZFdvcmtlckdsb2JhbFNj
b3BlPjo6Z2V0PGpzU2hhcmVkV29ya2VyR2xvYmFsU2NvcGVfU2hhcmVkV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgYXR0
cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFy
ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENl
bGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSwgSlNTaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owor
CisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlm
ICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVh
cENlbGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSwgSlNTaGFyZWRXb3JrZXJHbG9i
YWxTY29wZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNTaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOwogfQogCiB2b2lkIEpT
U2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2Nv
cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsMTMgKzQ3LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBj
b25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwo
dm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKICAgICBTaGFyZWRXb3JrZXJHbG9iYWxTY29w
ZSYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAKICAg
ICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
RVJlYWN0aW9ucy5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1
ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRWxl
bWVudElubGluZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTg4LDcgKzg5LDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTQzMCwyNyAr
NDMxLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RDRVJlYWN0aW8KICAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENFUmVhY3Rpb25zPjo6Y2FsbDxqc1Rlc3RDRVJlYWN0
aW9uc1Byb3RvdHlwZUZ1bmN0aW9uX21ldGhvZFdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZEJvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aENFUmVhY3Rpb25z
Tm90TmVlZGVkIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdENFUmVhY3Rpb25zOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0Q0VSZWFjdGlvbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnM+IHx8ICFK
U1Rlc3RDRVJlYWN0aW9uczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0
aW9ucz4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdENFUmVhY3Rpb25zKTsKLSAgICBlbHNl
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zID0gbWFrZVVuaXF1
ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxs
VHlwZSgpLCBKU1Rlc3RDRVJlYWN0aW9ucyk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7Cisg
ICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RDRVJlYWN0aW9ucz4gfHwgIUpTVGVzdENFUmVhY3Rpb25zOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnMpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENFUmVhY3Rpb25zKTsKKyAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0Q0VSZWFjdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q0VSZWFjdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RD
RVJlYWN0aW9uczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdENFUmVhY3Rpb25zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QmLCBSZWY8VGVzdENFUmVhY3Rpb25zPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUu
aCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgpAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAg
IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yNTYsMjcgKzI1NywzOCBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0Q0VSZWFjdGlvCiAgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Y2FsbDxqc1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25fdG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
K0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4g
fHwgIUpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUoKSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcik7Ci0gICAgZWxzZQotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZSgpLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKTsKLSAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCk7
CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
KyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyPiB8fCAhSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6bmVlZHNEZXN0cnVj
dGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4pCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5E
CiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIg
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0g
SlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAg
ICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXI+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxUcmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk
ZSAiSlNUZXN0Q2FsbFRyYWNlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgpAQCAtOTQsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RDYWxs
VHJhY2VyUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkBAIC01MDUsMjcgKzUwNiwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNU
ZXN0Q2FsbFRyYWNlCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6
Y2FsbDxqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25fdGVzdE9wZXJhdGlvbldpdGhE
ZWZhdWx0VmFyaWFudEFyZ3VtZW50Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJ0ZXN0T3BlcmF0aW9uV2l0aERlZmF1bHRWYXJpYW50QXJndW1lbnQiKTsKIH0KIAotSlND
OjpJc29TdWJzcGFjZSogSlNUZXN0Q2FsbFRyYWNlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdENhbGxUcmFjZXI6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2Vz
ID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7
Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RDYWxsVHJhY2VyPiB8fCAhSlNUZXN0Q2FsbFRyYWNlcjo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDYWxsVHJhY2VyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBK
U1Rlc3RDYWxsVHJhY2VyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdENhbGxUcmFjZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdENhbGxUcmFjZXIpOwotICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsK
KyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwor
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdENhbGxUcmFjZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKwor
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENhbGxUcmFjZXI+IHx8ICFKU1Rlc3RDYWxs
VHJhY2VyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDYWxsVHJhY2VyPikK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDYWxsVHJhY2Vy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RDYWxsVHJh
Y2VyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDYWxsVHJhY2VyOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENhbGxUcmFjZXI6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7CiB9CiAK
IHZvaWQgSlNUZXN0Q2FsbFRyYWNlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2Fs
bFRyYWNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNv
bnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNw
YWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdENhbGxUcmFjZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0Q2FsbFRyYWNlcj4mJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3IuaCIK
QEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTE2OCwyNyArMTY5LDM4IEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc1Rlc3RDbGFzc1dpdGgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+IHx8
ICFKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4pCi0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKKyAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5j
cHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0xMjQsNyArMTI1LDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAt
NzgxLDI3ICs3ODIsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENvbmRpdGlv
bgogCiAjZW5kaWYKIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
czo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25k
aXRpb25hbEluY2x1ZGVzLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzPiB8fCAhSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPikKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKTsKLSAgICBl
bHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMg
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5j
ZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMpOwotICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQo
KTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwor
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXM+IHx8ICFKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpuZWVkc0Rlc3RydWN0aW9uKTsK
KyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPikKKyAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1
ZGVzKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
cyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwx
MyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0
Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7
CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogCiAgICAgLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5jcHAJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQ
cm94eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC05NSw3ICs5Niw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGVQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTYwMywy
NyArNjA0LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUihzZXRKU1Rlc3RDb25kaXQKICAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU+OjpzZXQ8
c2V0SlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZV9zZXR0aW5nc0NvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGVQcm9taXNlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNl
KiBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRX
cml0ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3Jp
dGU+IHx8ICFKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU+KQotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlKCksIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOwotICAgIGVsc2UKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSk7Ci0gICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdl
dCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKSkKKyAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsK
KyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9u
YWxseVJlYWRXcml0ZT4gfHwgIUpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU+KQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFsbHlS
ZWFkV3JpdGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RDb25kaXRpb25hbGx5UmVhZFdyaXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdy
aXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxs
eVJlYWRXcml0ZS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRl
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9u
YWxseVJlYWRXcml0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
b25kaXRpb25hbGx5UmVhZFdyaXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2Rl
ID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0g
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6
SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9w
ZXJ0eVRhYmxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0RE9NSklULmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01K
SVRBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRE9NSklUSURMQ29udmVydC5o
IgpAQCAtNDc4LDcgKzQ3OSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERP
TUpJVFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpAQCAtMTI0NCwyNyArMTI0NSwzOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04oanNU
ZXN0RE9NSklUUHJvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFj
ZTxOb2RlTGlzdD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIHRocm93U2NvcGUsIGltcGwuZ2V0RWxlbWVudHNCeU5hbWUoV1RGTW92ZShlbGVtZW50
TmFtZSkpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERPTUpJVDo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERP
TUpJVDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0RE9NSklUPiB8fCAhSlNUZXN0RE9NSklUOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdERPTUpJVD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERPTUpJVCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RET01K
SVQpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RE9NSklUID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RET01KSVQpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpKQorICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisK
KyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYg
KCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RET01KSVQ+IHx8ICFKU1Rlc3RET01KSVQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERPTUpJVD4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0RE9NSklUKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RET01KSVQpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RE9NSklUOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERPTUpJVDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VO
RAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0
RE9NSklUOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9N
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERPTUpJVC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAgICAgVGVzdERPTUpJVCYgd3JhcHBlZCgp
IGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT04uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAj
aW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCkBAIC0xMjEsNyArMTIyLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9J
TkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtODAwLDI3ICs4MDEsMzggQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRUbwogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OmNhbGw8anNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0
aW9uX3RvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09O
Iik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT046OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RE
ZWZhdWx0VG9KU09OOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTj4gfHwgIUpT
VGVzdERlZmF1bHRUb0pTT046Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVs
dFRvSlNPTj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04g
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7Ci0g
ICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsKLSAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1h
cE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8fCAhSlNUZXN0RGVmYXVsdFRv
SlNPTjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTj4p
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRv
SlNPTik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVm
YXVsdFRvSlNPTik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pT
T04gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RE
ZWZhdWx0VG9KU09OOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNw
YWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT04gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT04uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rl
c3REZWZhdWx0VG9KU09OKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8
VGVzdERlZmF1bHRUb0pTT04+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09ORmlsdGVyZWRCeUV4cG9zZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBA
CiAjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNzIsNyArNzMsNyBAQCBwdWJs
aWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9z
ZWRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKQEAgLTI2MiwyNyArMjYzLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RE
ZWZhdWx0VG8KICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT05GaWx0
ZXJlZEJ5RXhwb3NlZD46OmNhbGw8anNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2Vk
UHJvdG90eXBlRnVuY3Rpb25fdG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJ0b0pTT04iKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRv
SlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBv
c2VkOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2Vk
LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
RmlsdGVyZWRCeUV4cG9zZWQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9z
ZWQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVk
QnlFeHBvc2VkPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBtYWtl
VW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVh
cENlbGxUeXBlKCksIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCk7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVy
ZWRCeUV4cG9zZWQuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZD4gfHwgIUpTVGVzdERl
ZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkPikKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4
cG9zZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERl
ZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVs
dFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5n
ZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09O
RmlsdGVyZWRCeUV4cG9zZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rl
c3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkPiYmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNTksNyArNjAsNyBAQCBw
dWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpAQCAtMTU0LDI3ICsxNTUsMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpz
VGVzdERlZmF1bHRUbwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJ
c29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpKQotICAgICAgICByZXR1cm4g
c3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4gfHwg
IUpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPikKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCks
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKTsKLSAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCkp
CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAg
ICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPiB8fCAhSlNUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPikKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiAgICAgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlJiB3cmFwcGVkKCkgY29u
c3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5j
cHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01B
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTg2LDcgKzg3LDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAg
LTI4NCwyNyArMjg1LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3REZWZhdWx0
VG8KICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6
Y2FsbDxqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uX3RvSlNPTkJv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7CiB9CiAKLUpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4pCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlKCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KTsKLSAgICBlbHNlCi0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZSgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCk7Ci0gICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKTsKKyAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKTsKIH0KIAogdm9pZCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMyArNDgsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogICAgIFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdCYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5j
bHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTg4LDcgKzg5LDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzI0LDI3ICsz
MjUsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRUbwogICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OmNhbGw8
anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uX3RvSlNPTkJv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7CiB9CiAKLUpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWwgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7CisgICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6bmVlZHNEZXN0
cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4pCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNw
YWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOwogfQogCiB2b2lkIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWwuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTMgKzQ4LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0
YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vz
czo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKICAgICBU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRl
VG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhl
dGljQXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRy
aWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5o
IgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpT
VGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGVQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTIzOCwyNyArMjM5LDM4
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUihzZXRKU1Rlc3REZWxlZ2EKICAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU+Ojpz
ZXRQYXNzaW5nUHJvcGVydHlOYW1lPHNldEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNB
dHRyaWJ1dGVfc2hhcmVkQXR0cmlidXRlMlNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlNDOjpJc29TdWJz
cGFjZSogSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERl
bGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RE
ZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpKQotICAgICAgICByZXR1cm4g
c3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlPiB8
fCAhSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlPikK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRp
Y0F0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3REZWxlZ2F0
ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUgPSBtYWtl
VW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVh
cENlbGxUeXBlKCksIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOwot
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJl
ZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0
aWNBdHRyaWJ1dGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BV
TWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1
dGU+IHx8ICFKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjpuZWVkc0Rl
c3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0
cmlidXRlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RE
ZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmli
dXRlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWxl
Z2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0
aWNBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3Bh
Y2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVs
ZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7
CiB9CiAKIHZvaWQgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFy
ZWRTeW50aGV0aWNBdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJp
YnV0ZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpD
b25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRo
ZXRpY0F0dHJpYnV0ZT4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNp
bmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAg
ICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShKU1Rlc3REb21haW5TZWN1cml0eVByb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzEyLDI3ICszMTMsMzggQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERvbWFpblNlYwogICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0RG9tYWluU2VjdXJpdHk+OjpjYWxsPGpzVGVzdERvbWFpblNlY3VyaXR5
UHJvdG90eXBlRnVuY3Rpb25fb3ZlcmxvYWRlZE1ldGhvZE92ZXJsb2FkRGlzcGF0Y2hlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAK
LUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERvbWFpblNlY3VyaXR5OjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RG9tYWluU2Vj
dXJpdHk6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RG9tYWluU2VjdXJpdHk+IHx8ICFKU1Rlc3RE
b21haW5TZWN1cml0eTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REb21haW5TZWN1
cml0eT4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5ID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdERvbWFpblNlY3VyaXR5KTsKLSAg
ICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5ID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3REb21haW5TZWN1cml0eSk7Ci0gICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsKKyAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERv
bWFpblNlY3VyaXR5LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQ
VU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REb21haW5TZWN1cml0eT4gfHwgIUpTVGVzdERvbWFp
blNlY3VyaXR5OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REb21haW5TZWN1
cml0eT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RG9t
YWluU2VjdXJpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdERvbWFpblNlY3VyaXR5KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RG9t
YWluU2VjdXJpdHkgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RG9tYWluU2Vj
dXJpdHk6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0RG9tYWluU2VjdXJpdHk6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RG9tYWluU2VjdXJpdHkgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3REb21haW5TZWN1
cml0eTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFp
blNlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4g
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNj
ZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVz
dEVuYWJsZWRCeVNldHRpbmcuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCkBAIC04OSw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdEVu
YWJsZWRCeVNldHRpbmdQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKQEAgLTQ1MSwyNyArNDUyLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RFbmFibGVkQnkKIAogI2VuZGlmCiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVz
dEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVu
dERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwot
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZz4gfHwgIUpTVGVzdEVuYWJsZWRCeVNldHRpbmc6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZz4pCi0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBtYWtlVW5pcXVl
PElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyk7Ci0gICAgZWxzZQot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZSgpLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFi
bGVkQnlTZXR0aW5nLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQ
VU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPiB8fCAhSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZzo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxl
ZEJ5U2V0dGluZz4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Cisg
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdldCgpOwogfQogCiB2
b2lkIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMg
KzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4
cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwog
ICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYzLDcgKzY0LDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTE3OCwy
NyArMTc5LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RFbmFibGVkRm8KICAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6Z2V0PGpzVGVz
dEVuYWJsZWRGb3JDb250ZXh0X1Rlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9y
R2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsK
IH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dD4gfHwgIUpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0
KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElz
b1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsK
KyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0PiB8fCAhSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6
Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0PikK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFi
bGVkRm9yQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpOwogfQogCiB2b2lkIEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0
OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHBy
IChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAg
ICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTE0NCw3ICsxNDUsNyBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zMTUsMjcgKzMx
NiwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0RXZlbnRDb25zCiAKICNlbmRp
ZgogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0
KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+
IHx8ICFKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3I+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RF
dmVudENvbnN0cnVjdG9yID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3IpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0RXZlbnRDb25zdHJ1Y3RvciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudENv
bnN0cnVjdG9yLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3Bh
Y2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdEV2ZW50Q29uc3RydWN0b3I6Om5lZWRzRGVzdHJ1Y3Rp
b24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+KQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3Ip
OworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFj
ZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVu
dENvbnN0cnVjdG9yID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nl
c3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAgICAg
VGVzdEV2ZW50Q29uc3RydWN0b3ImIHdyYXBwZWQoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdEV2ZW50VGFyZ2V0LmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFi
c3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNzAsNyAr
NzEsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAt
MjU0LDI3ICsyNTUsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEV2ZW50VGFy
ZwogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RXZlbnRUYXJnZXQ+OjpjYWxsPGpzVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25faXRlbUJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAiaXRlbSIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RF
dmVudFRhcmdldDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdEV2ZW50VGFyZ2V0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZl
bnRUYXJnZXQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV2ZW50
VGFyZ2V0PiB8fCAhSlNUZXN0RXZlbnRUYXJnZXQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0RXZlbnRUYXJnZXQ+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVu
dFRhcmdldCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RFdmVudFRhcmdl
dCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdl
dCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZt
LmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RXZlbnRUYXJnZXQpOwotICAgIGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVu
dFRhcmdldC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBN
b2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXQ+IHx8ICFKU1Rlc3RFdmVudFRhcmdldDo6
bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXQ+KQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudFRhcmdldCk7
CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV2ZW50VGFyZ2V0Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV2ZW50VGFyZ2V0Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1Nf
RU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7CiB9CiAK
IHZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDEzIEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0m
LCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpT
dWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6
ZXImKTsKICAgICBUZXN0RXZlbnRUYXJnZXQmIHdyYXBwZWQoKSBjb25zdAogICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYzLDcgKzY0LDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0xNzksMjcgKzE4MCwz
OCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0RXhjZXB0aW9uCiAgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RFeGNlcHRpb24+OjpnZXQ8anNUZXN0RXhjZXB0aW9uX25hbWVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RF
eGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV4Y2Vw
dGlvbj4gfHwgIUpTVGVzdEV4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RFeGNlcHRpb24+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24g
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RXhjZXB0aW9uKTsKLSAgICBl
bHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2Vs
bFR5cGUoKSwgSlNUZXN0RXhjZXB0aW9uKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owor
CisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlm
ICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0RXhjZXB0aW9uPiB8fCAhSlNUZXN0RXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RFeGNlcHRpb24+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdEV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0RXhjZXB0aW9uKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV4Y2Vw
dGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3RFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1
cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhj
ZXB0aW9uLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24u
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyArNTAsMTMg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9k
ZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEV4Y2VwdGlvbihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RFeGNlcHRpb24+JiYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
QWRkT3BhcXVlUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5jcHAJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3
IEBACiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjMsNyArNjQsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3RQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTE3OSwyNyAr
MTgwLDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RHZW5lcmF0ZUEKICAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdD46OmdldDxqc1Rl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Rfc29tZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgYXR0
cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEdlbmVyYXRlQWRkT3Bh
cXVlUm9vdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdDo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRh
LnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwot
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290PiB8fCAhSlNUZXN0R2VuZXJhdGVBZGRP
cGFxdWVSb290OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlQWRkT3Bh
cXVlUm9vdD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3Bh
cXVlUm9vdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RHZW5lcmF0ZUFk
ZE9wYXF1ZVJvb3QpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RHZW5lcmF0ZUFk
ZE9wYXF1ZVJvb3QpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290
LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q+IHx8ICFKU1Rlc3RHZW5lcmF0ZUFk
ZE9wYXF1ZVJvb3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRl
QWRkT3BhcXVlUm9vdD4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QpOworICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEdlbmVyYXRlQWRk
T3BhcXVlUm9vdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFj
ZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5l
cmF0ZUFkZE9wYXF1ZVJvb3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEz
ICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRD
b25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3Rl
eHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsK
ICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBA
CiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYzLDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMTg5LDI3ICsxOTAsMzgg
QEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEdlbmVyYXRlSQogICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT46OmdldDxqc1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlX2FTZWNyZXRBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5h
bWUpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGU+IHx8ICFKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+KQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpOwotICAgIGVsc2UK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSk7Ci0gICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOwor
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Cisg
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZT4gfHwgIUpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+KQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUp
OworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJl
dHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0
OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHBy
IChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAg
ICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBA
QAogI2luY2x1ZGUgIkpTVGVzdEdsb2JhbE9iamVjdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAjaW5jbHVk
ZSAiRE9NV3JhcHBlcldvcmxkLmgiCkBAIC0xODIyLDIzICsxODIzLDM0IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihqc1Rlc3RHbG9iYWxPYmoKIAogI2VuZGlmCiAKLUpTQzo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdEdsb2JhbE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEdsb2JhbE9iamVjdDo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGll
bnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEubV9oZWFwQ2VsbFR5
cGVGb3JKU1Rlc3RHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7CisgICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RHbG9iYWxPYmplY3QuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
R1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOworICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTVGVzdEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xv
YmFsT2JqZWN0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEdsb2JhbE9iamVj
dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RHbG9iYWxPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1
cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0R2xvYmFsT2JqZWN0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
R2xvYmFsT2JqZWN0LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEdsb2JhbE9iamVjdDo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlLCBCYXNlKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAK
ICNpbmNsdWRlICJKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNjIsNyAr
NjMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkBAIC0yNjgsMjcgKzI2OSwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIo
anNUZXN0SW5kZXhlZFNlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vi
c3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CisgICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisK
KyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
PiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4pCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVf
V0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAg
IH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewog
ICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3Vy
cmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNjIsNyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTI2OCwy
NyArMjY5LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RJbmRleGVkU2UKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUo
KSwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICBlbHNlCi0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZt
LmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBN
b2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAh
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsK
KyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9p
ZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC03MCw3ICs3
MSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpAQCAtMzAwLDI3ICszMDEsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdEluZGV4ZWRTZQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXJQcm90b3R5cGVGdW5jdGlvbl9pbmRleGVkU2V0dGVyQm9keT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICJpbmRleGVkU2V0dGVyIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2Uq
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxJc29T
dWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgp
LCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgp
OworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQorICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkg
eworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOworICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogI2luY2x1ZGUgIkpTVGVzdEludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRWxlbWVudElubGluZXMuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTE3OCw3ICsxNzksNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTEwOTYsMjkgKzEwOTcsNDAgQEAgcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBUZXN0SW50ZXJmYWNlSXRlcmF0b3JCYXNlOwogICAgIERFQ0xB
UkVfSU5GTzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50
bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAg
ICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQo
KSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SW50ZXJmYWNlSXRl
cmF0b3I+IHx8ICFUZXN0SW50ZXJmYWNlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcj4pCi0gICAgICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElT
T19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSgpLCBUZXN0SW50ZXJmYWNlSXRlcmF0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvciA9IG1ha2VVbmlxdWU8SXNv
U3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUo
KSwgVGVzdEludGVyZmFjZUl0ZXJhdG9yKTsKLSAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICAgICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
CisKKyAgICAgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgICAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7CisgICAg
ICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBUZXN0SW50ZXJmYWNlSXRlcmF0b3I+IHx8ICFUZXN0SW50ZXJmYWNlSXRlcmF0
b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SW50ZXJmYWNlSXRlcmF0
b3I+KQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBUZXN0SW50
ZXJmYWNlSXRlcmF0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgVGVzdEludGVyZmFjZUl0ZXJhdG9yKTsKKyAgICAgICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBUZXN0SW50ZXJmYWNlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3RJbnRlcmZhY2VJ
dGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQor
ICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAg
ICByZXR1cm4gc3BhY2U7CisgICAgICAgIH0KKworICAgICAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQpAQCAtMTE5MCwyNyArMTIwMiwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0
SW50ZXJmYWNlCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxs
PGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2ZvckVhY2hDYWxsZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIpOwogfQogCi1KU0M6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dEludGVyZmFjZT4gfHwgIUpTVGVzdEludGVyZmFjZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RJbnRlcmZhY2U+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRl
cmZhY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0SW50ZXJmYWNlKTsK
LSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZSA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0SW50ZXJmYWNlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOwor
ICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0SW50ZXJmYWNlPiB8fCAhSlNUZXN0SW50ZXJmYWNlOjpuZWVkc0Rlc3RydWN0aW9u
KTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2U+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJmYWNlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SW50ZXJmYWNlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dEludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RJbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SW50ZXJmYWNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0SW50ZXJmYWNlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEludGVyZmFjZTo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMyAr
NTMsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhw
ciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAg
ICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOwogCiAgICAgLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjMsNyAr
NjQsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpAQCAtMTc5LDI3ICsxODAsMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzVGVzdEludGVyZmFjZQogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmU+OjpnZXQ8anNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVf
cmVhZG9ubHlHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1KU0M6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPiB8fCAhSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmU+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUpOwotICAgIGF1dG8qIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7Cisg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmU+IHx8ICFKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmU+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSk7CisgICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7CiB9
CiAKIHZvaWQgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0g
SlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAg
ICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZT4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJdGVyYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNs
dWRlICJKU1Rlc3RJdGVyYWJsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0SXRlcmFibGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTE5MSwyOSArMTkyLDQwIEBAIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gVGVzdEl0ZXJhYmxlSXRlcmF0b3JCYXNlOwogICAgIERFQ0xBUkVf
SU5GTzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBh
dXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJdGVyYWJsZUl0ZXJhdG9y
PiB8fCAhVGVzdEl0ZXJhYmxlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IFRlc3RJdGVyYWJsZUl0ZXJhdG9yPikKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgVGVz
dEl0ZXJhYmxlSXRlcmF0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4g
SVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBUZXN0SXRl
cmFibGVJdGVyYXRvcik7Ci0gICAgICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVy
YXRvci5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgICAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOworICAgICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOworICAgICAgICBpZiAoIXNwYWNl
KSB7CisgICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVz
dEl0ZXJhYmxlSXRlcmF0b3I+IHx8ICFUZXN0SXRlcmFibGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVj
dGlvbik7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJdGVyYWJsZUl0ZXJhdG9yPikKKyAgICAgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgVGVzdEl0ZXJhYmxlSXRlcmF0b3IpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVGVzdEl0ZXJh
YmxlSXRlcmF0b3IpOworICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFi
bGVJdGVyYXRvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVGVzdEl0ZXJhYmxl
SXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwor
ICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3RJdGVyYWJsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgICAgIHJldHVybiBzcGFjZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJh
YmxlSXRlcmF0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOworICAgICAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
SXRlcmFibGVJdGVyYXRvci5nZXQoKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMjg1LDI3ICsyOTcsMzggQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEl0ZXJhYmxlUAogICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0SXRlcmFibGU+OjpjYWxsPGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVu
Y3Rpb25fZm9yRWFjaENhbGxlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJm
b3JFYWNoIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEl0ZXJhYmxlOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
SXRlcmFibGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SXRlcmFibGU+IHx8ICFKU1Rlc3RJdGVyYWJsZTo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJdGVyYWJsZT4pCi0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
KCksIEpTVGVzdEl0ZXJhYmxlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEl0ZXJhYmxlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJdGVyYWJsZSk7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKTsKKyAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEl0ZXJhYmxlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQ
VU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJdGVyYWJsZT4gfHwgIUpTVGVzdEl0ZXJhYmxlOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJdGVyYWJsZT4pCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SXRlcmFibGUpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEl0ZXJhYmxlKTsKKyAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0SXRlcmFibGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0SXRlcmFibGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RJdGVyYWJsZTo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEl0ZXJhYmxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwx
MyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0
Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7
CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEl0ZXJhYmxl
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEl0ZXJhYmxlPiYm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiAr
MjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjIyLDI3ICsyMjMsMzgg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEpTQnVpbHRpbgogICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpjYWxsPGpzVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25fdGVzdEN1c3RvbUZ1bmN0aW9uQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0ZXN0Q3VzdG9tRnVuY3Rpb24iKTsK
IH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewog
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPikKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IgPSBtYWtlVW5pcXVl
PElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IpOwotICAgIGVs
c2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Ig
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5j
ZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAgICBhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdl
dCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yPiB8fCAhSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6Om5lZWRzRGVzdHJ1Y3Rp
b24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPikKKyAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOwogfQog
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDEz
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1v
ZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0K
LSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CiAKICAgICAvLyBDdXN0b20gYXR0cmlidXRlcwogICAgIEpTQzo6SlNW
YWx1ZSB0ZXN0QXR0cmlidXRlQ3VzdG9tKEpTQzo6SlNHbG9iYWxPYmplY3QmKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lG
YWN0b3J5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
NyBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yMjQsMjcgKzIyNSwz
OCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TGVnYWN5RmFjCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24+IHx8ICFKU1Rlc3RMZWdhY3lGYWN0b3J5RnVu
Y3Rpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdh
Y3lGYWN0b3J5RnVuY3Rpb24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0Vf
SU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdh
Y3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0
KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElz
b1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsK
KyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4gfHwgIUpTVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5RmFjdG9y
eUZ1bmN0aW9uPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbik7CisgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5RmFjdG9yeUZ1
bmN0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwor
ICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExl
Z2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RMZWdhY3lGYWN0b3J5
RnVuY3Rpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RM
ZWdhY3lGYWN0b3J5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUw
LDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3Io
SlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldExlZ2FjeUZhY3RvcnlGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QmLCBSZWY8VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4mJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdh
Y3lOb0ludGVyZmFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtODIsNyArODMsNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSwgQmFzZSk7
CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzI3LDI3ICszMjgs
MzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdExlZ2FjeU5vSQogICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q+OjpjYWxsU3RhdGlj
PGpzVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3JGdW5jdGlvbl9zdGF0aWNP
cGVyYXRpb25Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInN0YXRpY09w
ZXJhdGlvbiIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFj
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0PiB8fCAhSlNUZXN0TGVnYWN5
Tm9JbnRlcmZhY2VPYmplY3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5
Tm9JbnRlcmZhY2VPYmplY3Q+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdh
Y3lOb0ludGVyZmFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rl
c3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7CisgICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RM
ZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmpl
Y3Q+IHx8ICFKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6bmVlZHNEZXN0cnVjdGlvbik7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q+KQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lO
b0ludGVyZmFjZU9iamVjdCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2Fj
eU5vSW50ZXJmYWNlT2JqZWN0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExl
Z2FjeU5vSW50ZXJmYWNlT2JqZWN0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
KyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5E
CiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZh
Y2VPYmplY3QuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0lu
dGVyZmFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUwLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOwogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHBy
IChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAg
ICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiAKICAgICAvLyBDdXN0b20gYXR0cmlidXRlcwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3
IEBACiAjaW5jbHVkZSAiSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTcwLDcgKzcxLDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluc1By
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpA
QCAtMjQxLDI3ICsyNDIsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdExlZ2Fj
eU92ZQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElu
cz46OmNhbGw8anNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluc1Byb3RvdHlwZUZ1bmN0aW9uX25h
bWVkSXRlbUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibmFtZWRJdGVt
Iik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWls
dElucz4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TGVnYWN5T3ZlcnJp
ZGVCdWlsdElucyk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
KyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUu
Z2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TGVnYWN5
T3ZlcnJpZGVCdWlsdEluczo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdElucz4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7CisgICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
cmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOwogfQogCiB2b2lkIEpT
VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTMgKzUyLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewog
ICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3Vy
cmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWFwTGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RNYXBMaWtlLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNzksNyArODAsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RNYXBMaWtlUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zNTgsMjcgKzM1
OSwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TWFwTGlrZVByCiAgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlPjo6Y2FsbDxqc1Rlc3RNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25fZGVsZXRlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJkZWxldGUiKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TWFwTGlrZTo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dE1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlLmdldCgpKQotICAgICAgICBy
ZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RNYXBMaWtlPiB8fCAhSlNUZXN0TWFwTGlrZTo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RNYXBMaWtlPikKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBK
U1Rlc3RNYXBMaWtlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE1hcExpa2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE1hcExpa2UpOwotICAgIGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsKKyAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExp
a2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwor
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5n
ZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdE1hcExpa2U+IHx8ICFKU1Rlc3RNYXBMaWtlOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RNYXBMaWtlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RNYXBMaWtlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RNYXBMaWtlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TWFwTGlrZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RNYXBM
aWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdE1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisg
ICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4g
c3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TWFwTGlrZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2Uu
Z2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWFwTGlrZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNv
bnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNw
YWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE1hcExpa2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0TWFwTGlrZT4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCkBAIC04Myw3ICs4
NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKQEAgLTM3MiwyNyArMzczLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RNYXBMaWtlV2kKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbl9kZWxldGVCb2R5PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgImRlbGV0ZSIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHx8ICFKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxJc29T
dWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlKCksIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwot
ICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucyk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOworICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6
Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
czo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwx
MyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByICht
b2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9
Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpT
Qzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Y3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYzLDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFS
RV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zMzYsMjcg
KzMzNywzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRBbmRJCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPikKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0
KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAo
IXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPikKKyAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlND
OjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92
ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02Myw3ICs2NCw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkBAIC0zMzYsMjcgKzMzNywzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoanNUZXN0TmFtZWRBbmRJCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkp
OwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZt
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFw
Q2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24p
OwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24+IHx8ICFKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7CisgICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xp
ZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKwor
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CiB9CiAK
IHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFj
ZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFj
dE9wZXJhdGlvbnMuaCIKQEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9J
TkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTM5MywyNyAr
Mzk0LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZEFuZEkKICAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZUZ1bmN0aW9uX2luZGV4ZWRTZXR0ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgImluZGV4ZWRTZXR0ZXIiKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewog
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0g
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4gfHwgIUpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPikKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENl
bGxUeXBlKCksIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsKLSAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BV
TWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3Bh
Y2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJl
dHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwg
Y29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlk
ZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAog
I2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYyLDcgKzYzLDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBA
IC0yMzgsMjcgKzIzOSwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRE
ZWxlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgpKQot
ICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZp
ZXI+IHx8ICFKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPikKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7Ci0gICAg
ZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7
Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXIuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCkp
CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAg
ICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7CisgICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5nZXQoKTsKIH0K
IAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDEzIEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBj
b25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNz
IG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJz
cGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
Rm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKQEAgLTYyLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTIzOCwyNyArMjM5LDM4IEBAIEpTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZERlbGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
KSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24+
IHx8ICFKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCi0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKKyAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9u
OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKTsK
KyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQK
IElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwor
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMyArNTQsMTMgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4g
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNj
ZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBA
QAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCkBAIC02OSw3ICs3MCw3IEBAIHB1
YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkBAIC0yNjIsMjcgKzI2MywzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFt
ZWREZWxlCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcj46OmNhbGw8anNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVG
dW5jdGlvbl9uYW1lZERlbGV0ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgIm5hbWVkRGVsZXRlciIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNw
YWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+KQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
cik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVN
YXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+IHx8ICFK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+KQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVf
V0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAg
IH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6
Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01B
YnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYzLDcg
KzY0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKQEAgLTI1NCwyNyArMjU1LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1Rlc3ROYW1lZERlbGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLUpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNl
OwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI+IHx8ICFKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4pCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKTsK
LSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SW5kZXhlZEdldHRlcik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisK
KyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4p
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKTsKKyAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCwxMyArNTQsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGguaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CkBAIC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGhQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKQEAgLTIxMiwyNyArMjEzLDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1Rlc3ROYW1lZEdldHQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGg6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJz
cGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGg6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoLmdldCgpKQotICAg
ICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoPiB8fCAh
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGgpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGguZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwor
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5n
ZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+IHx8ICFKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGguZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMyArNTIsMTMgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJz
cGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNl
QWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQ
cm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lu
Y2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjIsNyArNjMsNyBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjEy
LDI3ICsyMTMsMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkR2V0dAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlw
ZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMg
PSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICBy
ZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4gfHwgIUpT
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUoKSwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENl
bGxUeXBlKCksIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgp
OworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPikKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
cjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDEzICs1MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29u
c3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZt
KTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0
ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKQEAgLTY3LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZP
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAg
ICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjM4LDI3ICsyMzksMzggQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkR2V0dAogICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhbGw8anNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uX2dldHRlck5hbWVCb2R5PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImdldHRlck5hbWUiKTsKIH0KIAotSlNDOjpJ
c29TdWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPikKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7
CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwxMyArNTIsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpD
b25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjIsNyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSwgQmFzZSk7
CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjkyLDI3ICsyOTMs
MzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnRE
YXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3Bh
Y2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCks
IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOworICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24p
OworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPikKKyAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VO
RAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwx
MyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByICht
b2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9
Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpT
Qzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCkBAIC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTI5MiwyNyArMjkzLDM4IEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZFNldHQKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAgICAg
ICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
PiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKKyAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24+IHx8ICFKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rl
c3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKKyAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxMyArNTUsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlm
IGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRp
b25zLmgiCkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTMyMywyNyArMzI0LDM4IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNldHQKICAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYWxsPGpzVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbl9uYW1lZFNldHRlckJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibmFtZWRTZXR0ZXIiKTsKIH0KIAotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
KworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9u
KTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPikKKyAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7Cisg
ICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9p
ZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCkBAIC03Miw3ICs3Myw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAg
LTM3MCwyNyArMzcxLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNl
dHQKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXI+OjpjYWxsPGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJQcm90b3R5cGVG
dW5jdGlvbl9pbmRleGVkU2V0dGVyQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJpbmRleGVkU2V0dGVyIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
cj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7
CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
KyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpKQorICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkg
eworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcik7
CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNs
aWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJ
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAg
ewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29u
Y3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3Bl
cmF0aW9ucy5oIgpAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAg
IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC00MjAsMjcgKzQy
MSwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRTZXR0CiAgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJv
dG90eXBlRnVuY3Rpb25faW5kZXhlZFNldHRlck92ZXJsb2FkRGlzcGF0Y2hlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJpbmRleGVkU2V0dGVyIik7CiB9CiAKLUpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVu
dERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlcj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNw
YWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcik7
Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIu
Z2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7Cisg
ICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPiB8fCAhSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4p
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0
dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9y
KEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUg
PT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk
ZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFj
dE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYyLDcgKzYzLDcg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
T3ZlcnJpZGVCdWlsdEluc1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpAQCAtMjY5LDI3ICsyNzAsMzggQEAgSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkp
OwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
czo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+KQotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SXNv
U3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUo
KSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVN
YXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWls
dElucz4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
NyBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgpA
QCAtNzEsNyArNzIsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewog
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTM1MywyNyArMzU0LDM4IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNldHQKICAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cz46OmNhbGw8anNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
SW5zdGFuY2VGdW5jdGlvbl91bmZvcmdlYWJsZU9wZXJhdGlvbkJvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAidW5mb3JnZWFibGVPcGVyYXRpb24iKTsKIH0KIAotSlNDOjpJ
c29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNw
YWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+IHx8ICFKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzPikKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7Ci0gICAgZWxzZQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMu
Z2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcz4g
fHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwor
ICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsMTMgKzU1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhl
YXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJy
aWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNp
bmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgpAQCAtNzEsNyArNzIsNyBAQCBwdWJs
aWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zMzAsMjcgKzMzMSwz
OCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRTZXR0CiAgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zSW5z
dGFuY2VGdW5jdGlvbl91bmZvcmdlYWJsZU9wZXJhdGlvbkJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAidW5mb3JnZWFibGVPcGVyYXRpb24iKTsKIH0KIAotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
QW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQor
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKKyAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BV
TWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPikKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsK
KyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQK
IElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CiB9CiAKIHZvaWQg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4g
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNj
ZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6
Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVzcGFjZU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lc3Bh
Y2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0y
NzIsMjcgKzI3MywzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZXNwYWNl
CiAKICNlbmRpZgogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3ROYW1lc3BhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmpl
Y3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVzcGFjZU9i
amVjdD4gfHwgIUpTVGVzdE5hbWVzcGFjZU9iamVjdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lc3BhY2VPYmplY3QgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0Vf
SU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0
TmFtZXNwYWNlT2JqZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE5hbWVzcGFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZXNwYWNlT2Jq
ZWN0KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVzcGFj
ZU9iamVjdC5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKSkKKyAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2Up
IHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZXNw
YWNlT2JqZWN0PiB8fCAhSlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpuZWVkc0Rlc3RydWN0aW9uKTsK
KyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q+KQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVzcGFjZU9iamVjdCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZXNwYWNlT2JqZWN0KTsKKyAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVzcGFjZU9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQor
CisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0
LmdldCgpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDEzIEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9y
KEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUg
PT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZXNwYWNlT2JqZWN0KEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk
ZSAiSlNUZXN0Tm9kZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKQEAg
LTkyLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0Tm9kZVByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAt
Mzk3LDI5ICszOTgsNDAgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBUZXN0Tm9kZUl0ZXJh
dG9yQmFzZTsKICAgICBERUNMQVJFX0lORk87CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFj
ZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICAgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMo
KTsKLSAgICAgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9k
ZUl0ZXJhdG9yLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRl
c3ROb2RlSXRlcmF0b3I+IHx8ICFUZXN0Tm9kZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBUZXN0Tm9kZUl0ZXJhdG9yPikKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBU
ZXN0Tm9kZUl0ZXJhdG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBUZXN0Tm9kZUl0ZXJh
dG9yKTsKLSAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2Rl
SXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7CisgICAgICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvci5nZXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OworCisgICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwor
ICAgICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2Rl
SXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0Tm9kZUl0ZXJhdG9yPiB8fCAhVGVz
dE5vZGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3ROb2Rl
SXRlcmF0b3I+KQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBU
ZXN0Tm9kZUl0ZXJhdG9yKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIFRlc3ROb2RlSXRlcmF0b3IpOworICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBU
ZXN0Tm9kZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKKyAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0Tm9kZUl0ZXJhdG9yOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgICAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgICAgIHJldHVybiBzcGFjZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5v
ZGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
b2RlSXRlcmF0b3IuZ2V0KCk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTQ5MSwyNyArNTAzLDM4IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROb2RlUHJvdG8KICAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbl9mb3JFYWNo
Q2FsbGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImZvckVhY2giKTsKIH0K
IAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Tm9kZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5vZGU6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROb2RlLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROb2RlPiB8fCAhSlNUZXN0Tm9kZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RO
b2RlPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZSA9IG1ha2VVbmlxdWU8
SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROb2RlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5vZGUpOwot
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsKKyAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5vZGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFw
TW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5vZGU+IHx8ICFKU1Rlc3ROb2RlOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROb2RlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBKU1Rlc3ROb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3ROb2RlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
Tm9kZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROb2RlOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5vZGU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZSA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0
Tm9kZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyAr
NDgsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhw
ciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAg
ICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOwogICAgIFRlc3ROb2RlJiB3cmFwcGVkKCkgY29uc3QKICAg
ICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgogI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgpAQCAtMTg2Niw3ICsxODY3LDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0T2JqUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC05MDU5LDI3ICs5MDYwLDM4IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihqc1Rlc3RPYmpQcm90b3QKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25fdG9TdHJpbmdCb2R5Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE9iai5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T2JqPiB8fCAh
SlNUZXN0T2JqOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9iaj4pCi0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9iaiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElT
T19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSgpLCBKU1Rlc3RPYmopOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0T2JqID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RPYmopOwotICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T2JqLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T2JqLmdldCgpKQorICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisK
KyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYg
KCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RPYmo+IHx8ICFKU1Rlc3RPYmo6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE9iaj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T2Jq
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPYmopOwor
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmogPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0T2JqOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE9iajo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RPYmogPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RP
YmouZ2V0KCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEzICs1OSwxMyBAQCBwdWJsaWM6
CiAjaWYgRU5BQkxFKENPTkRJVElPTikKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpT
Qzo6VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUzOwogI2VuZGlmCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUg
PT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRp
b25Db25kaXRpb25hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNs
dWRlICJKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTc4LDcgKzc5LDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTIy
NiwyNyArMjI3LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RPcGVyYXRpb24K
IAogI2VuZGlmCiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPcGVy
YXRpb25Db25kaXRpb25hbC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+IHx8ICFKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4pCi0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKTsK
LSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRp
dGlvbmFsID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbCk7Ci0g
ICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRp
b25hbC5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpKQorICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFj
ZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVy
YXRpb25Db25kaXRpb25hbD4gfHwgIUpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpuZWVkc0Rl
c3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4pCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWwgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQo
KTsKIH0KIAogdm9pZCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMyArNTEsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPiYmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
NyBAQAogI2luY2x1ZGUgIkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yOTcsMjcgKzI5OCwz
OCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0T3ZlcmxvYWRlCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwot
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gfHwgIUpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycz4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2
bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1h
cE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiB8fCAhSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyk7
CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpOwogfQogCiB2
b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6
Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3Rl
ZDoKICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgpAQCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAg
ICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBA
IC0yMzQsMjcgKzIzNSwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0T3Zlcmxv
YWRlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNw
YWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4gfHwg
IUpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4pCi0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZSgpLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKTsKLSAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1h
cE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
PiB8fCAhSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6bmVlZHNEZXN0
cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNl
OworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgpOwog
fQogCiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAg
ewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29u
Y3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2U+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
Miw3IEBACiAjaW5jbHVkZSAiSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNjEsNyArNjIs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RQbHVnaW5JbnRlcmZhY2VQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAg
LTIzNiwyNyArMjM3LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RQbHVnaW5J
bnQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFBsdWdpbkludGVyZmFjZTo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQbHVnaW5JbnRl
cmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQbHVn
aW5JbnRlcmZhY2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFBs
dWdpbkludGVyZmFjZT4gfHwgIUpTVGVzdFBsdWdpbkludGVyZmFjZTo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+KQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUo
KSwgSlNUZXN0UGx1Z2luSW50ZXJmYWNlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElT
T19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0UGx1
Z2luSW50ZXJmYWNlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFBsdWdpbkludGVyZmFjZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZS5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owor
CisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlm
ICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlPiB8fCAhSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+KQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFBsdWdpbkludGVyZmFjZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UGx1Z2luSW50ZXJmYWNl
KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFBsdWdpbkludGVyZmFjZTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RQbHVnaW5J
bnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7
CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2lu
SW50ZXJmYWNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2lu
SW50ZXJmYWNlLmdldCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMyArNTYsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKQEAgLTE0NSw3ICsxNDYsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTI5NSwyNyArMjk2LDM4IEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1Rlc3RQcm9taXNlUmUKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudD46OmdldDxqc1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRf
cmVhc29uR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlNDOjpJc29TdWJz
cGFjZSogSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgp
KQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQ+IHx8ICFKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50PikKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlKCksIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCk7Ci0gICAgZWxzZQotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENl
bGxUeXBlKCksIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCk7Ci0gICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCk7Cisg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAg
IEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudD4gfHwgIUpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6bmVlZHNEZXN0cnVjdGlvbik7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50PikKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsK
IH0KIAogdm9pZCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0
YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vz
czo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKICAgICBU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50JiB3cmFwcGVkKCkgY29uc3QKICAgICB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBM
aWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlr
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RS
ZWFkT25seU1hcExpa2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CkBAIC03Niw3ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFJlYWRP
bmx5TWFwTGlrZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpAQCAtMjk3LDI3ICsyOTgsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdFJlYWRPbmx5TQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0UmVhZE9ubHlN
YXBMaWtlPjo6Y2FsbDxqc1Rlc3RSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbl9mb3JF
YWNoQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJmb3JFYWNoIik7CiB9
CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRP
bmx5TWFwTGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlPiB8fCAh
SlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJl
YWRPbmx5TWFwTGlrZT4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5
TWFwTGlrZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RSZWFkT25seU1h
cExpa2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9u
bHlNYXBMaWtlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RSZWFkT25seU1hcExpa2UpOwotICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdl
dCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZWFkT25seU1hcExpa2U+
IHx8ICFKU1Rlc3RSZWFkT25seU1hcExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdFJlYWRPbmx5TWFwTGlrZT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seU1hcExpa2UpOworICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAog
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7CiB9
CiAKIHZvaWQgSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlr
ZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEz
ICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRD
b25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3Rl
eHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsK
ICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0UmVhZE9ubHlN
YXBMaWtlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFJlYWRP
bmx5TWFwTGlrZT4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seVNldExpa2UuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC03NSw3ICs3Niw3IEBAIHB1YmxpYzoKIAogICAg
IERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKEpTVGVzdFJlYWRPbmx5U2V0TGlrZVByb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjc2LDI3ICsyNzcsMzggQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFJlYWRPbmx5UwogICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0UmVhZE9ubHlTZXRMaWtlPjo6Y2FsbDxqc1Rlc3RSZWFkT25seVNldExp
a2VQcm90b3R5cGVGdW5jdGlvbl9mb3JFYWNoQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICJmb3JFYWNoIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRP
bmx5U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFJlYWRPbmx5U2V0TGlrZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0UmVhZE9ubHlTZXRMaWtlPiB8fCAhSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZT4pCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSgpLCBKU1Rlc3RSZWFkT25seVNldExpa2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rl
c3RSZWFkT25seVNldExpa2UpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7Cisg
ICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RSZWFkT25seVNldExpa2U+IHx8ICFKU1Rlc3RSZWFkT25seVNldExpa2U6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZT4pCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlTZXRMaWtlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seVNl
dExpa2UpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2Ug
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFJl
YWRPbmx5U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBz
cGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RS
ZWFkT25seVNldExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RS
ZWFkT25seVNldExpa2UuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRM
aWtlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0
ZWQ6CiAgICAgSlNUZXN0UmVhZE9ubHlTZXRMaWtlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdFJlYWRPbmx5U2V0TGlrZT4mJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJh
TWVtb3J5Q29zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRl
ICJKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02MCw3ICs2MSw3IEBAIHB1Ymxp
YzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
SlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdFByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMTYz
LDI3ICsxNjQsMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdFJlcG9ydEV4dAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Ojpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUt
Pmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGll
bnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNw
YWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PiB8fCAhSlNUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RSZXBv
cnRFeHRyYU1lbW9yeUNvc3QpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RSZXBv
cnRFeHRyYU1lbW9yeUNvc3QpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1v
ZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q+IHx8ICFKU1Rlc3RSZXBv
cnRFeHRyYU1lbW9yeUNvc3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdD4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QpOworICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Ojp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFJlcG9y
dEV4dHJhTWVtb3J5Q29zdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
KyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVy
biBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuZ2V0KCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDEzICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47
CiAKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCkBAIC04Niw3ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5G
TzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisg
ICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzQxLDI3ICszNDIsMzgg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNlcmlhbGl6ZQogICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6Y2FsbDxq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbl9mdW5j
dGlvblJldHVybmluZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZnVu
Y3Rpb25SZXR1cm5pbmciKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U+IHx8ICFKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBtYWtl
VW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVh
cENlbGxUeXBlKCksIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gfHwgIUpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPikKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5n
ZXQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
MTMgKzUzLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgbXV0YWJsZSBK
U0M6OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1fY2FjaGVkVmFsdWU7CiAgICAgbXV0YWJs
ZSBKU0M6OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1fY2FjaGVkUmVhZG9ubHlWYWx1ZTsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlm
IGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwogCiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6
ZXImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXRMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFNldExpa2UuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC03OCw3ICs3OSw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFNldExpa2VQcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTMzNCwyNyArMzM1
LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTZXRMaWtlUHIKICAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2U+OjpjYWxsPGpzVGVzdFNldExpa2VQcm90b3R5
cGVGdW5jdGlvbl9kZWxldGVCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
ImRlbGV0ZSIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXRMaWtlOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2U+IHx8ICFKU1Rlc3RTZXRMaWtlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2U+KQotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTZXRMaWtlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpT
VGVzdFNldExpa2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
U2V0TGlrZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U2V0TGlrZSk7Ci0gICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdldCgpOworICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlr
ZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Cisg
ICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdl
dCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0U2V0TGlrZT4gfHwgIUpTVGVzdFNldExpa2U6Om5lZWRzRGVzdHJ1Y3Rp
b24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2U+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2UpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2UpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXRMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExp
a2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBz
cGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
ZXRMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
KyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5n
ZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RTZXRMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXRMaWtlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U2V0TGlrZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0JiwgUmVmPFRlc3RTZXRMaWtlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKQEAgLTgyLDcgKzgz
LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZSgpOwpAQCAtMzQ2LDI3ICszNDcsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdFNldExpa2VXaQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uX2NsZWFyQm9keT4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICJjbGVhciIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHx8ICFKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlKCksIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwotICAg
IGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucyk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOworICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucz4gfHwgIUpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMp
OworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisK
KyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2Rl
ID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0g
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6
SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNjYs
NyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTdHJpbmdpZmllclBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpA
QCAtMTg0LDI3ICsxODUsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmlu
Z2lmaQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXI+OjpjYWxsPGpz
VGVzdFN0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25fdG9TdHJpbmdCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdFN0cmluZ2lmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0U3RyaW5naWZpZXI+IHx8ICFKU1Rlc3RTdHJpbmdpZmllcjo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllcj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dFN0cmluZ2lmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RTdHJpbmdpZmllcik7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKTsK
KyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwor
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisK
KyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllcj4gfHwgIUpTVGVzdFN0
cmluZ2lmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmll
cj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5n
aWZpZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0
cmluZ2lmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXI6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5n
aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7Cisg
ICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5n
ZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJpbmdpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9k
ZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFN0cmluZ2lmaWVyKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFN0cmluZ2lmaWVyPiYmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAg
ICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvblByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMTg0
LDI3ICsxODUsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQog
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b24+OjpjYWxsPGpzVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uUHJvdG90eXBlRnVu
Y3Rpb25fdG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRv
U3RyaW5nIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2Vz
ID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb24+IHx8ICFKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbj4pCi0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0
aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKTsK
KyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwor
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmdldCgpKQorICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkg
eworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0
aW9uKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNv
bnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNw
YWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTIw
MSwyNyArMjAyLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkK
ICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24+
OjpjYWxsPGpzVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGlvbl90
b1N0cmluZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9TdHJpbmci
KTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7
Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPiB8fCAhSlNUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgp
LCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24gPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENl
bGxUeXBlKCksIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24pOwotICAgIGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5n
ZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCkpCisgICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFw
RGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNl
KSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24+IHx8ICFKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKTsKKyAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7CiB9CiAK
IHZvaWQgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYs
IGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24oSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbj4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcg
QEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjAxLDI3ICsyMDIsMzggQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPjo6Y2FsbDxqc1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5cGVGdW5jdGlvbl90b1N0cmlu
Z0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9TdHJpbmciKTsKIH0K
IAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNs
aWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpKQotICAg
ICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXM+IHx8ICFKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyk7Ci0gICAgZWxzZQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMg
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5j
ZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
cyk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
R1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50
ZWRBcz4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6bmVlZHNE
ZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
cyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
SW1wbGVtZW50ZWRBcyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwor
ICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsKIH0KIAog
dm9pZCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
PiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25O
YW1lZFRvU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1
ZGUgIkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTY2LDcg
KzY3LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkBAIC0xODQsMjcgKzE4NSwzOCBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+OjpjYWxsPGpzVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZ1Byb3RvdHlwZUZ1bmN0aW9uX3RvU3RyaW5nQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCi1KU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZz4g
fHwgIUpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+KQot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmcgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2Vs
bFR5cGUoKSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKTsKLSAgICBh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZy5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2Rl
LmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nPiB8fCAh
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpuZWVkc0Rlc3RydWN0aW9u
KTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+KQor
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKTsKKyAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
IGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25OYW1lZFRvU3RyaW5nID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOwogfQogCiB2b2lkIEpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwx
MyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0
Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7
CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgUmVmPFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+JiYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJSZWFk
T25seUF0dHJpYnV0ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
QEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjAwLDI3ICsyMDEsMzggQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZVByb3RvdHlwZUZ1bmN0aW9uX3RvU3RyaW5nQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCi1KU0M6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+IHx8ICFKU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGU+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCks
IEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUpOwotICAgIGVsc2UKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSk7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOwor
ICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdp
ZmllclJlYWRPbmx5QXR0cmlidXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAg
ICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRPbmx5QXR0cmlidXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwg
Y29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZShK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTdHJpbmdpZmllclJl
YWRPbmx5QXR0cmlidXRlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lu
Y2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZVByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAt
MjE5LDI3ICsyMjAsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lm
aQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGU+OjpjYWxsPGpzVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlUHJvdG90eXBl
RnVuY3Rpb25fdG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
InRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3Bh
Y2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGU+IHx8ICFKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4p
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBK
U1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSk7Ci0gICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQo
KTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpKQorICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFj
ZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQor
CisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYs
IGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5j
cHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFRhZ2dlZFdyYXBwZXIuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02MCw3ICs2MSw3
IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFRhZ2dlZFdyYXBwZXJQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTE2
MiwyNyArMTYzLDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RUYWdnZWRXcmEK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFRhZ2dlZFdyYXBwZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0VGFnZ2VkV3JhcHBlcjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdFRhZ2dlZFdyYXBwZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVy
LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUYWdnZWRXcmFwcGVy
PiB8fCAhSlNUZXN0VGFnZ2VkV3JhcHBlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RUYWdnZWRXcmFwcGVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFnZ2Vk
V3JhcHBlciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RUYWdnZWRXcmFw
cGVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRhZ2dlZFdy
YXBwZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdFRhZ2dlZFdyYXBwZXIpOwotICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsKKyAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKwor
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRhZ2dlZFdyYXBwZXI+IHx8ICFKU1Rlc3RU
YWdnZWRXcmFwcGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUYWdnZWRX
cmFwcGVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RU
YWdnZWRXcmFwcGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RUYWdnZWRXcmFwcGVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFn
Z2VkV3JhcHBlciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RUYWdnZWRXcmFw
cGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdFRhZ2dlZFdyYXBwZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICBy
ZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0VGFnZ2VkV3JhcHBlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0VGFnZ2VkV3JhcHBlcjo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdyYXBw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCwxMyArNTAsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9p
ZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgog
ICAgIEpTVGVzdFRhZ2dlZFdyYXBwZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFJlZjxUZXN0VGFnZ2VkV3JhcHBlcj4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAK
ICNpbmNsdWRlICJKU1Rlc3RUeXBlZGVmcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgpAQCAtMTEzLDcgKzExNCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkBAIC03NzIsMjcgKzc3MywzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0VHlwZWRlZnNQCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVm
cz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbl9jYWxsV2l0aFNlcXVlbmNl
VGhhdFJlcXVpcmVzSW5jbHVkZUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAiY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUiKTsKIH0KIAotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0VHlwZWRlZnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnRE
YXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFR5cGVkZWZzLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RUeXBlZGVmcz4gfHwgIUpTVGVzdFR5cGVkZWZzOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdFR5cGVkZWZzPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRl
ZnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0VHlwZWRlZnMpOwotICAg
IGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENl
bGxUeXBlKCksIEpTVGVzdFR5cGVkZWZzKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAo
IXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFR5cGVkZWZzPiB8fCAhSlNUZXN0VHlwZWRlZnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdFR5cGVkZWZzPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RUeXBlZGVmcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0VHlwZWRlZnMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RU
eXBlZGVmcyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RUeXBlZGVmczo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RU
eXBlZGVmczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAg
ICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdO
T1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsK
KyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVm
cyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgp
OwogfQogCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFs
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNXb3JrZXJH
bG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAg
LTI0MywyMyArMjQ0LDM0IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1dvcmtlckdsb2Jh
bFMKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTV29ya2VyR2xvYmFsU2NvcGU+OjpnZXQ8anNX
b3JrZXJHbG9iYWxTY29wZV9Xb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlNDOjpJ
c29TdWJzcGFjZSogSlNXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTV29ya2VyR2xvYmFsU2NvcGU6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3Bh
Y2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4g
c3BhY2U7Ci0gICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEu
bV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlLCBKU1dvcmtlckdsb2JhbFNjb3Bl
KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2Nv
cGUuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1dv
cmtlckdsb2JhbFNjb3BlLCBKU1dvcmtlckdsb2JhbFNjb3BlKTsKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
KyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CiB9CiAKIHZvaWQgSlNX
b3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTV29ya2VyR2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJH
bG9iYWxTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyArNTAsMTMgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYs
IGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3cmFwcGVkKCkgY29uc3QKICAgICB7CkBAIC04
Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTV29ya2VyR2xvYmFsU2Nv
cGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmts
ZXRHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEds
b2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUg
IkpTV29ya2xldEdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgpAQCAtMTU3LDIzICsxNTgsMzQgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpz
V29ya2xldEdsb2JhbAogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNXb3JrbGV0R2xvYmFsU2Nv
cGU+OjpnZXQ8anNXb3JrbGV0R2xvYmFsU2NvcGVfV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0
b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5hbWUp
OwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTV29ya2xl
dEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRH
bG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIGNsaWVudERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZSwg
SlNXb3JrbGV0R2xvYmFsU2NvcGUpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOwor
ICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRh
Lm1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGUsIEpTV29ya2xldEdsb2JhbFNj
b3BlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNXb3JrbGV0R2xv
YmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7
CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xv
YmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtsZXRHbG9i
YWxTY29wZS5nZXQoKTsKIH0KIAogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZTo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29y
a2xldEdsb2JhbFNjb3BlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCwxMyArNTAsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50
bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogICAgIFdvcmtsZXRHbG9iYWxT
Y29wZSYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTYxLDcg
KzE2MSw3IEBAIGJvb2wgUnVudGltZUFycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIFJ1bnRpbWVBcnJheTo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIFJ1bnRp
bWVBcnJheTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJldHVybiAmc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+cnVudGltZUFycmF5U3Bh
Y2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9CkBAIC04OCw3ICs4OCw3IEBAIHByaXZh
dGU6CiAgICAgUnVudGltZUFycmF5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEJpbmRpbmdzOjpBcnJheSopOwogCi0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAgQmluZGlu
Z3NBcnJheSogbV9hcnJheTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X21ldGhvZC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Miw3IEBAIGJvb2wg
UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEoKICAgICByZXR1cm4gSW50ZXJuYWxG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLUlzb1N1YnNwYWNlKiBSdW50aW1lTWV0aG9kOjpzdWJzcGFjZUZvcklt
cGwoVk0mIHZtKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBSdW50aW1lTWV0aG9kOjpzdWJzcGFj
ZUZvckltcGwoVk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKS0+cnVudGltZU1ldGhvZFNwYWNlKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKFJ1bnRpbWVNZXRob2QpLCAiUnVudGltZU1ldGhvZCBz
dWJjbGFzc2VzIHRoYXQgYWRkIGZpZWxkcyBuZWVkIHRvIG92ZXJyaWRlIHN1YnNwYWNlRm9yPD4o
KSIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENlbGxUeXBlOjpkZXN0cm95ID09IEpTQzo6SlND
ZWxsOjpkZXN0cm95KTsKQEAgLTc0LDcgKzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOworICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOwogCiAgICAgQmluZGluZ3M6Ok1ldGhvZCogbV9tZXRo
b2Q7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEzLDcgKzMxMyw3IEBAIEV4Y2Vw
dGlvbiogdGhyb3dSdW50aW1lT2JqZWN0SW52YWxpZEFjY2UKICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUcnlpbmcgdG8gYWNjZXNzIG9iamVjdCBmcm9tIGRlc3Ryb3ll
ZCBwbHVnLWluLiIpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogUnVudGltZU9iamVjdDo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIFJ1
bnRpbWVPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICByZXR1cm4g
JnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPnJ1bnRpbWVPYmpl
Y3RTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoUnVudGltZU9iamVjdCksICJSdW50
aW1lT2JqZWN0IHN1YmNsYXNzZXMgdGhhdCBhZGQgZmllbGRzIG5lZWQgdG8gb3ZlcnJpZGUgc3Vi
c3BhY2VGb3I8PigpIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2VsbFR5cGU6OmRlc3Ryb3kg
PT0gUnVudGltZU9iamVjdDo6ZGVzdHJveSk7CkBAIC04Niw3ICs4Niw3IEBAIHByb3RlY3RlZDoK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mKTsKIAogICAgIFJlZlB0cjxJbnN0YW5jZT4g
bV9pbnN0YW5jZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1
bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1
bnRpbWUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQpAQCAtMTM4LDcgKzEzOCw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIHRvQm9vbGVhbihKU0dsb2JhbE9iamVjdCopIGNvbnN0
OyAvLyBGSVhNRTogQ3VycmVudGx5IHRoaXMgaXMgYnJva2VuIGJlY2F1c2Ugbm9uZSBvZiB0aGUg
c3VwZXJjbGFzc2VzIGFyZSBtYXJrZWQgdmlydHVhbC4gV2UgbmVlZCB0byBzb2x2ZSB0aGlzIGlu
IHRoZSBsb25nZXIgdGVybS4KIAotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKFZNJik7CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKFZNJik7CiAKICAgICBSZWZQdHI8T2JqY0luc3RhbmNlPiBfaW5zdGFuY2U7CiAgICAgU3Ry
aW5nIG1faXRlbTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGlt
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRp
bWUubW0JKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzMiwxMyArMzMyLDEzIEBAIGJvb2wg
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjp0b0Jvb2xlYW4oSlMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLUpTQzo6SXNvU3Vic3BhY2UqIE9iamNGYWxsYmFja09iamVjdEltcDo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIE9iamNGYWxsYmFj
a09iamVjdEltcDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxKU0M6Oklzb1N1YnNwYWNlUGVyVk0+IHBlclZNKFtdIChKU0M6OlZNJiB2
bSkgewotICAgICAgICByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlModm0uZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIE9iamNGYWxsYmFja09iamVjdEltcCk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEpTQzo6SXNvU3Vic3BhY2VQZXJWTT4gcGVyVk0oW10gKEpTQzo6
SGVhcCYgaGVhcCkgeworICAgICAgICByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlMoaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIE9iamNGYWxsYmFja09iamVjdEltcCk7
CiAgICAgfSk7Ci0gICAgcmV0dXJuICZwZXJWTS5nZXQoKS5mb3JWTSh2bSk7CisgICAgcmV0dXJu
ICZwZXJWTS5nZXQoKS5jbGllbnRJc29TdWJzcGFjZWZvclZNKHZtKTsKIH0KIAotfQotfQorfSAv
LyBuYW1lc3BhY2UgQmluZGluZ3MKK30gLy8gbmFtZXNwYWNlIEpTQwo=
</data>
<flag name="review"
          id="479495"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452500</attachid>
            <date>2022-02-18 02:00:38 -0800</date>
            <delta_ts>2022-02-18 08:25:34 -0800</delta_ts>
            <desc>[fast-cq] patch for landing.</desc>
            <filename>bug-233878.patch</filename>
            <type>text/plain</type>
            <size>845014</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkwMTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MSBA
QAorMjAyMi0wMi0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
U3BsaXQgSXNvU3Vic3BhY2UgaW50byBhIEdDQ2xpZW50IGFsbG9jYXRvciB1c2VkIGJ5IFZNIGFu
ZCBhIGJhY2tlbmQgbWFuYWdlZCBieSBIZWFwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzODc4CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg2MTA4
Mzk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAxLiBB
ZGQgYSB1c2VHbG9iYWxHQyBvcHRpb24uICBXZSdyZSBjdXJyZW50bHkgb25seSB1c2luZyB0aGlz
IHRvIGd1YXJkIHNvbWUgY29kZQorICAgICAgICAgICBmb3IgR2xvYmFsR0MuICBXZSdyZSBub3Qg
cmVhZHkgdG8gcnVuIHdpdGggR2xvYmFsR0MgZW5hYmxlZCB5ZXQuCisKKyAgICAgICAgMi4gQ3Jl
YXRlIGEgbmV3IEdDQ2xpZW50IG5hbWVzcGFjZSBpbiBKU0MuICBUaGUgSGVhcCBpcyBub3cgc3Bs
aXQgaW50byAyIHBhcnRzOgorICAgICAgICAgICBhLiBWTSAvIEdDQ2xpZW50IC8gY2xpZW50IHNp
ZGU6IEpTQzo6R0NDbGllbnQ6OkhlYXAKKyAgICAgICAgICAgYi4gR2xvYmFsR0MgLyBzZXJ2ZXIg
c2lkZTogSlNDOjpIZWFwCisKKyAgICAgICAgICAgVGhlIGV2ZW50dWFsIGdvYWwgaXMgdG8gaGF2
ZSBtYW55IEdDQ2xpZW50IEhlYXBzIGJhY2tlZCBieSBhIHNpbmdsZXRvbiBzZXJ2ZXIKKyAgICAg
ICAgICAgSGVhcC4gIEN1cnJlbnRseSwgd2Ugc3RpbGwgaGF2ZSBhIDEgdG8gMSBjb3JyZXNwb25k
ZW5jZSBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kCisgICAgICAgICAgIHNlcnZlciBzaWRlIGkuZS4g
Vk0gZW1iZWRzIGJvdGggb25lIGluc3RhbmNlIGVhY2ggb2YgR0NDbGllbnQ6OkhlYXAgYW5kIEhl
YXAuCisKKyAgICAgICAgMy4gU3BsaXQgSXNvU3Vic3BhY2UgaW50bzoKKyAgICAgICAgICAgYS4g
Vk0gLyBHQ0NsaWVudCAvIGNsaWVudCBzaWRlOiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZQor
ICAgICAgICAgICBiLiBHbG9iYWxHQyAvIHNlcnZlciBzaWRlOiBKU0M6Oklzb1N1YnNwYWNlCisK
KyAgICAgICAgICAgVGhlIGNsaWVudCBzaWRlIHdpbGwgbm93IG1hbmFnZSBhIExvY2FsQWxsb2Nh
dG9yIGZvciB0aGUgSXNvU3Vic3BhY2UuCisKKyAgICAgICAgICAgVGhlIGV2ZW50dWFsIGdvYWwg
aXMgdG8gaGF2ZSBtYW55IEdDQ2xpZW50OjpJc29TdWJzcGFjZSBhbGxvY2F0b3JzIGZlZCBmcm9t
CisgICAgICAgICAgIGEgc2VydmVyIElzb1N1YnNwYWNlLiAgQ3VycmVudGx5LCB3ZSBzdGlsbCBo
YXZlIGEgMSB0byAxIGNvcnJlc3BvbmRlbmNlCisgICAgICAgICAgIGJldHdlZW4gdGhlIGNsaWVu
dCBhbmQgc2VydmVyIHNpZGUuICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UgaW5zdGFuY2VzIHdpbGwg
YmUKKyAgICAgICAgICAgbWFuYWdlZCBieSBHQ0NsaWVudDo6SGVhcC4gIFNlcnZlciBzaWRlIElz
b1N1YnNwYWNlcyBjb250aW51ZSB0byBiZSBtYW5hZ2VkCisgICAgICAgICAgIGJ5IEhlYXAuCisK
KyAgICAgICAgMy4gSXNvU3Vic3BhY2VQZXJWTSBpcyBhbHNvIG5vdyBjbGllbnQtc2VydmVyIGF3
YXJlLgorCisgICAgICAgICAgIFByZXZpb3VzbHksIElzb1N1YnNwYWNlUGVyVk0gd2FzIHJlbHlp
bmcgb24gQXV0b3JlbW92aW5nSXNvU3Vic3BhY2UgdG8KKyAgICAgICAgICAgImF1dG9tYXRpY2Fs
bHkiIHVucmVnaXN0ZXIgSXNvU3Vic3BhY2VzIGZyb20gSXNvU3Vic3BhY2VQZXJWTSB2aWEgaXRz
CisgICAgICAgICAgIGRlc3RydWN0b3IuICBIb3dldmVyLCB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0
aGUgQXV0b3JlbW92aW5nSXNvU3Vic3BhY2UgaXMKKyAgICAgICAgICAgbmV2ZXIgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBWTSwgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3aWxsIHRyaWdnZXIgaXRz
CisgICAgICAgICAgIGRlc3RydWN0aW9uIHdoZW4gdGhlIFZNIHNodXRzIGRvd24uCisKKyAgICAg
ICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGlzc3VlIGJ5IGhhdmluZyBJc29TdWJzcGFjZVBl
clZNIHJlZ2lzdGVyIHdpdGggdGhlIFZNJ3MKKyAgICAgICAgICAgR0NDbGllbnQ6OkhlYXAgYW5k
IEhlYXAuICBPbiBkZXN0cnVjdGlvbiwgdGhvc2UgSGVhcHMgd2lsbCBub3cgYmUgYXdhcmUgb2YK
KyAgICAgICAgICAgdGhlIElzb1N1YnNwYWNlUGVyVk0gaW4gdXNlLCBhbmQgd2lsbCB0ZWxsIHRo
ZSBJc29TdWJzcGFjZVBlclZNIHRvIHJlbGVhc2UKKyAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQg
SXNvU3Vic3BhY2VzLgorCisgICAgICAgICAgIFRoZSBJc29TdWJzcGFjZVBlclZNOjpBdXRvcmVt
b3ZpbmdJc29TdWJzcGFjZSBjbGFzcyBpcyBub3cgcmVtb3ZlZCBzaW5jZSBpdAorICAgICAgICAg
ICBpcyBub3QgbmVlZGVkLgorCisgICAgICAgIDQuIFByZXZpb3VzbHksIGluIEhlYXAsIHdlIGhh
dmUgc29tZSBTcGFjZUFuZFNldCBtZW1iZXJzIHRoYXQgd2VyZSBuYW1lZCBzaW1wbHkgYXMKKyAg
ICAgICAgICAgIlNwYWNlIi4gIFJlbmFtZWQgdGhlc2UgdG8gYmUgIlNwYWNlQW5kU2V0IiBleHBs
aWNpdGx5IHRvIG1vcmUgYWNjdXJhdGVseQorICAgICAgICAgICByZWZsZWN0IHdoYXQgdGhleSBh
cmUuCisKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBBUEkv
SlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
OgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKiBBUEkvSlNDYWxs
YmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5h
bE9iamVjdD46OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmpl
Y3Q8SlNHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIEFQSS9KU0Nh
bGxiYWNrT2JqZWN0Lmg6CisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpzdWJzcGFjZUZvcik6CisgICAgICAg
ICogQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIEFQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkpOgorICAgICAgICAqIGJ5dGVjb2RlL0V2YWxDb2RlQmxvY2suaDoKKyAgICAgICAg
KiBieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9Nb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaDoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmg6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6On5IZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAgIChKU0M6OkhlYXA6OmRl
bGV0ZUFsbFVubGlua2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkdDQ2xpZW50OjpIZWFw
OjpIZWFwKToKKyAgICAgICAgKEpTQzo6R0NDbGllbnQ6OkhlYXA6On5IZWFwKToKKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bG9jayk6CisgICAgICAgIChKU0M6
OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVh
Y2hTY3JpcHRFeGVjdXRhYmxlU3BhY2UpOgorICAgICAgICAoSlNDOjpHQ0NsaWVudDo6SGVhcDo6
c2VydmVyKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdD
Q2xpZW50OjpIZWFwOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZS5jcHA6
CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjpJc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAqIGhlYXAvSXNv
U3Vic3BhY2UuaDoKKyAgICAgICAgKEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlOjpjZWxsU2l6
ZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3IpOiBEZWxldGVkLgor
ICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Oklzb1N1
YnNwYWNlOjphbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZVBl
clZNLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6SXNvU3Vic3BhY2VQZXJW
TSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlUGVyVk06Omlzb1N1YnNwYWNlZm9ySGVhcCk6
CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlUGVyVk06OmNsaWVudElzb1N1YnNwYWNlZm9yVk0p
OgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZVBlclZNOjpyZWxlYXNlSXNvU3Vic3BhY2UpOgor
ICAgICAgICAoSlNDOjpJc29TdWJzcGFjZVBlclZNOjpyZWxlYXNlQ2xpZW50SXNvU3Vic3BhY2Up
OgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6
Zm9yVk0pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2VQZXJWTS5oOgorICAg
ICAgICAqIGhlYXAvTG9jYWxBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0
b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAqIGhlYXAvTG9jYWxBbGxv
Y2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmRpcmVjdG9yeSBjb25zdCk6
CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL011dGF0b3JTdGF0
ZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oOgorICAgICAgICAq
IGluc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9BZ2dy
ZWdhdGVFcnJvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlJdGVyYXRvclBy
b3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90
eXBlLmg6CisgICAgICAgICogcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmg6CisgICAg
ICAgICogcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmg6CisgICAgICAg
ICogcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUv
QXN5bmNJdGVyYXRvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQXRvbWljc09iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvQmlnSW50T2JqZWN0Lmg6CisgICAgICAgICogcnVudGlt
ZS9CaWdJbnRQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5PYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6Qm9vbGVhbk9iamVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvQnJhbmRlZFN0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9Db25zb2xlT2JqZWN0Lmg6CisgICAgICAgICogcnVu
dGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKEpTQzo6Q3VzdG9tR2V0dGVyU2V0
dGVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9ET01BdHRyaWJ1dGVHZXR0ZXJT
ZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0RhdGVJbnN0YW5jZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5o
OgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICog
cnVudGltZS9FcnJvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRXZhbEV4ZWN1dGFi
bGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnN1YnNwYWNlRm9yKToKKyAgICAg
ICAgKiBydW50aW1lL0V4Y2VwdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvRmluYWxpemF0aW9u
UmVnaXN0cnlQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oOgorICAgICAgICAqIHJ1
bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0dl
bmVyYXRvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6Cisg
ICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpzdWJzcGFjZUZv
cik6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L0ludGxDb2xsYXRvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUu
aDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuaDoKKyAgICAgICAgKiBydW50
aW1lL0ludGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxM
aXN0Rm9ybWF0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bExvY2FsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bExvY2FsZVByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzLmg6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuaDoKKyAg
ICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaDoKKyAgICAgICAgKiBydW50
aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1l
L0ludGxTZWdtZW50SXRlcmF0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50SXRl
cmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXIuaDoKKyAg
ICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXJQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50
aW1lL0ludGxTZWdtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRzUHJvdG90
eXBlLmg6CisgICAgICAgICogcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzdWJzcGFjZUZvcik6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmg6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5QnVmZmVyUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXN5bmNHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQ2FsbGVlLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGVlOjpz
dWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6
CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmg6CisgICAgICAgICog
cnVudGltZS9KU0RhdGFWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90
eXBlLmg6CisgICAgICAgICogcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Lmg6CisgICAg
ICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJhdG9yLmg6CisgICAgICAgICog
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmg6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNv
cmQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaDoKKyAgICAgICAg
KiBydW50aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZS5oOgor
ICAgICAgICAoSlNDOjpKU1Byb21pc2U6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTUHJvbWlzZVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VQcm90b3R5cGU6
OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5oOgorICAgICAgICAoSlNDOjpKU1Byb3h5
OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmg6Cisg
ICAgICAgICogcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmg6CisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTb3Vy
Y2VDb2RlLmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpK
U1N0cmluZzo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRv
ci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTV2Vha09iamVjdFJlZi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNXaXRoU2NvcGUu
aDoKKyAgICAgICAgKiBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmg6CisgICAgICAgICog
cnVudGltZS9NYXBQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmplY3QuaDoK
KyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICog
cnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZl
RXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6Ok51bWJlck9iamVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3Bl
cnR5VGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgICog
cnVudGltZS9Qcm94eVJldm9rZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBP
YmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvUmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRz
VGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUpOgorICAgICAgICAoSlNDOjpTY3Jp
cHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6CisgICAgICAgICogcnVudGltZS9TZXRJdGVyYXRv
clByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU2V0UHJvdG90eXBlLmg6CisgICAgICAg
ICogcnVudGltZS9TaGFkb3dSZWFsbU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU2hhZG93
UmVhbG1Qcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
aDoKKyAgICAgICAgKiBydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmg6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
aW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6c3Vic3BhY2VGb3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6CisgICAgICAgICogcnVudGltZS9TeW1i
b2wuaDoKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvU3ltYm9sUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxDYWxlbmRhci5oOgorICAgICAgICAqIHJ1bnRpbWUv
VGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxJbnN0YW50Lmg6CisgICAgICAgICogcnVudGlt
ZS9UZW1wb3JhbEluc3RhbnRQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFs
Tm93Lmg6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1
bnRpbWUvVGVtcG9yYWxQbGFpblRpbWUuaDoKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsUGxh
aW5UaW1lUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmg6
CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbFRpbWVab25lUHJvdG90eXBlLmg6CisgICAgICAg
ICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVu
dGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Y29kZUJsb2NrU3BhY2UpOgorICAgICAgICAo
SlNDOjpWTTo6ZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6cHJv
Z3JhbUV4ZWN1dGFibGVTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjp1bmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZVNwYWNlKToKKyAgICAgICAgKEpTQzo6Vk06OmFycmF5U3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpWTTo6YmlnSW50U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpWTTo6Y2FsbGVlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6Y2xvbmVkQXJn
dW1lbnRzU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6Y3VzdG9tR2V0dGVyU2V0
dGVyU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6ZGF0ZUluc3RhbmNlU3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6ZG9tQXR0cmlidXRlR2V0dGVyU2V0dGVyU3Bh
Y2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6ZXhjZXB0aW9uU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpWTTo6ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmZ1bmN0aW9uU3BhY2UpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpWTTo6Z2V0dGVyU2V0dGVyU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpW
TTo6Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpWTTo6aW50ZXJuYWxGdW5jdGlvblNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06
OmpzUHJveHlTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjpuYXRpdmVFeGVjdXRh
YmxlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6bnVtYmVyT2JqZWN0U3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6cGxhaW5PYmplY3RTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlZNOjpwcm9taXNlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpWTTo6cHJvcGVydHlOYW1lRW51bWVyYXRvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Vk06OnByb3BlcnR5VGFibGVTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjpy
ZWdFeHBTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjpyZWdFeHBPYmplY3RTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjpyb3BlU3RyaW5nU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpWTTo6c2NvcGVkQXJndW1lbnRzU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpWTTo6c3BhcnNlQXJyYXlWYWx1ZU1hcFNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Vk06OnN0cmluZ1NwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OnN0
cmluZ09iamVjdFNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OnN0cnVjdHVyZUNo
YWluU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6c3RydWN0dXJlUmFyZURhdGFT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjpzdHJ1Y3R1cmVTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlZNOjpicmFuZGVkU3RydWN0dXJlU3BhY2UpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpWTTo6c3ltYm9sVGFibGVTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9XZWFrTWFwSW1wbC5oOgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDo6c3Vic3Bh
Y2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvV2Vh
a1NldFByb3RvdHlwZS5oOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oOgor
ICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseS5oOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUds
b2JhbC5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5Lmg6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaDoKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmg6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oOgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlHbG9i
YWxQcm90b3R5cGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90
b3R5cGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBl
Lmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaDoKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZS5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Lmg6CisKIDIwMjItMDItMTggIEpvc2VwaCBHcmllZ28gIDxqZ3JpZWdvQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0pTQ10gRW5hYmxlIFNoYWRvdyBSZWFsbXMgc3VwcG9ydCBieSBkZWZhdWx0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2
bS5hcGlHbG9iYWxPYmplY3RTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gdm0uYXBpVmFsdWVXcmFwcGVyU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbQogREVGSU5FX1ZJU0lUX0NISUxEUkVOX1dJVEhf
TU9ESUZJRVIoSlNfRVhQT1JUX1BSSVZBVEUsIEpTQVBJV3JhcHBlck9iamVjdCk7CiAKIHRlbXBs
YXRlIDw+Ci1Jc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnN1YnNw
YWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CiAgICAgc3dpdGNoICht
b2RlKSB7CiAgICAgY2FzZSBTdWJzcGFjZUFjY2Vzczo6T25NYWluVGhyZWFkOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmNhbGxiYWNrQ29uc3RydWN0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYg
SW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmNhbGxiYWNrRnVuY3Rpb25TcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyMCw3ICsxMjAsNyBAQCBTdHJ1Y3R1cmUq
IEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplCiB9CiAKIHRlbXBsYXRlIDw+Ci1Jc29TdWJz
cGFjZSogSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9kZSkKK0dDQ2xpZW50OjpJc29TdWJzcGFjZSogSlND
YWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1
YnNwYWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ6CkBAIC0xMzMsNyArMTMzLDcgQEAgSXNvU3Vic3Bh
Y2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbAogfQogCiB0ZW1wbGF0ZSA8PgotSXNvU3Vi
c3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwo
Vk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBtb2RlKQorR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNw
YWNlQWNjZXNzOjpPbk1haW5UaHJlYWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0sIG1vZGUpOwogICAgIH0KQEAgLTE5
OSw3ICsxOTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxP
YmplY3QqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYsIFN1YnNwYWNlQWNjZXNzKTsKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoVk0mLCBTdWJzcGFjZUFj
Y2Vzcyk7CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTExfQVRUUklCVVRF
UyBjdXN0b21Ub1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJu
YWxGdW5jdGlvbiBCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLm9iakNDYWxsYmFja0Z1bmN0aW9uU3BhY2U8bW9k
ZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElX
cmFwcGVyR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBlckdsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
OSw3ICs5MCw3IEBAIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIEpTQ2FsbGJhY2tPYmoKIH0K
IAogdGVtcGxhdGUgPD4KLUlzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ckdsb2JhbE9iamVjdD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1v
ZGUpCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
R2xvYmFsT2JqZWN0Pjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFN1YnNwYWNlQWNjZXNzOjpPbk1h
aW5UaHJlYWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFw
cGVyT2JqZWN0R0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNBUElXcmFwcGVyT2JqZWN0R0xpYi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4
IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEw
Myw3ICsxMDMsNyBAQCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBKU0NhbGxiYWNrT2JqCiB9
CiAKIHRlbXBsYXRlIDw+Ci1Jc29TdWJzcGFjZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBw
ZXJPYmplY3Q+OjpzdWJzcGFjZUZvckltcGwoVk0mIHZtLCBTdWJzcGFjZUFjY2VzcyBtb2RlKQor
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVj
dD46OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0sIFN1YnNwYWNlQWNjZXNzIG1vZGUpCiB7CiAgICAg
c3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBTdWJzcGFjZUFjY2Vzczo6T25NYWluVGhyZWFkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJh
Y2tGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5qc2NDYWxsYmFja0Z1bmN0
aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8
Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEwNzYsNyArMTA3
Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFZpc2l0b3ImIHYKICAgICBzdHJv
bmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIHN0cm9uZ2x5
VmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIAotICAgIFZNOjpTcGFj
ZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5hZGQodGhpcyk7CisgICAgSGVhcDo6U3BhY2VB
bmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkuYWRkKHRoaXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgpAQCAtMTY2NCw3ICsxNjY0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KAogICAgIH07CiAgICAgdXBkYXRlQWN0aXZpdHkoKTsKIAotICAg
IFZNOjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKS5yZW1vdmUodGhpcyk7CisgICAg
SGVhcDo6U3BhY2VBbmRTZXQ6OnNldEZvcigqc3Vic3BhY2UoKSkucmVtb3ZlKHRoaXMpOwogCiAg
ICAgLy8gSW4gQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkgd2UgbWF5IGhhdmUgZGVj
aWRlZCB0byBza2lwIHZpc2l0aW5nIHRoaXMKICAgICAvLyBjb2RlQmxvY2suIEJ5IHRoZSB0aW1l
IHdlIGdldCBoZXJlLCB3ZSdyZSBkb25lIHdpdGggdGhlIHZlcmlmaWVyIEdDLiBTbywgbGV0J3MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2su
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2
YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9v
LmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6CiAgICAgREVD
TEFSRV9JTkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiAmdm0uY29kZUJsb2NrU3BhY2UoKS5zcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5jb2Rl
QmxvY2tTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUo
Vk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gJnZtLmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSgpOwogICAgIH0KQEAg
LTkwLDQgKzkwLDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0Z1bmN0aW9uQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3
YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwLDkgKzQwLDkgQEAgcHVibGljOgog
ICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAg
ICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAm
dm0uY29kZUJsb2NrU3BhY2UoKTsKICAgICB9CiAKICAgICBzdGF0aWMgRnVuY3Rpb25Db2RlQmxv
Y2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2sm
IG90aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dy
YW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBD
YW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC00MCw5ICs0MCw5IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxvY2tTcGFj
ZSgpLnNwYWNlOworICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCk7CiAgICAgfQog
CiAgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQ
YXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFt
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5j
YT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwLDkgKzQwLDkgQEAgcHVibGljOgogICAgIERFQ0xB
UkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1
cm4gJnZtLmNvZGVCbG9ja1NwYWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAmdm0uY29kZUJs
b2NrU3BhY2UoKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRl
KFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRF
dmFsQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4
LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0udW5saW5rZWRFdmFsQ29kZUJsb2NrU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjIgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1MSw3ICsyNTEsOCBAQCBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxv
Y2tGb3JDb25zdHJ1Y3Quc2V0KHZtLCB0aGlzLCByZXN1bHQpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpLnNldC5hZGQodGhp
cyk7CisgICAgLy8gRklYTUUgR2xvYmFsR0M6IE5lZWQgc3luY3Job25pemF0aW9uIGhlcmUgZm9y
IGFjY2Vzc2luZyB0aGUgSGVhcCBzZXJ2ZXIuCisgICAgdm0uaGVhcC51bmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNldC5hZGQodGhpcyk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtMzA5LDggKzMxMCwxMCBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpmaW5hbGl6CiAgICAgICAgIH07CiAgICAgICAgIGNsZWFySWZEZWFkKG1fdW5saW5rZWRDb2Rl
QmxvY2tGb3JDYWxsKTsKICAgICAgICAgY2xlYXJJZkRlYWQobV91bmxpbmtlZENvZGVCbG9ja0Zv
ckNvbnN0cnVjdCk7Ci0gICAgICAgIGlmIChpc0NsZWFyZWQgJiYgIWlzU3RpbGxWYWxpZCkKLSAg
ICAgICAgICAgIHZtLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKS5zZXQucmVtb3Zl
KHRoaXMpOworICAgICAgICBpZiAoaXNDbGVhcmVkICYmICFpc1N0aWxsVmFsaWQpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FIEdsb2JhbEdDOiBOZWVkIHN5bmNyaG9uaXphdGlvbiBoZXJlIGZvciBh
Y2Nlc3NpbmcgdGhlIEhlYXAgc2VydmVyLgorICAgICAgICAgICAgdm0uaGVhcC51bmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0LnNldC5yZW1vdmUodGhpcyk7CisgICAgICAgIH0K
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDkgKzY2LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZVNwYWNlKCkuc3BhY2U7CisgICAgICAgIHJldHVybiAmdm0udW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlv
bk1ldGFkYXRhTm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQgdW5saW5rZWRGdW5jdGlv
bktpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUsIFJlZlB0cjxURFpFbnZpcm9ubWVudExpbms+IHBhcmVudFNjb3BlVERa
VmFyaWFibGVzLCBzdGQ6Om9wdGlvbmFsPFByaXZhdGVOYW1lRW52aXJvbm1lbnQ+IHBhcmVudFBy
aXZhdGVOYW1lRW52aXJvbm1lbnQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5
cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVy
LCBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCBwcml2YXRlQnJhbmRSZXF1aXJlbWVudCwgYm9vbCBp
c0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGZhbHNlKQpAQCAtMTMyLDcgKzEzMiw4
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmNs
ZWFyKCk7CiAgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsK
LSAgICAgICAgdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpLnNldC5yZW1vdmUo
dGhpcyk7CisgICAgICAgIC8vIEZJWE1FIEdsb2JhbEdDOiBOZWVkIHN5bmNyaG9uaXphdGlvbiBo
ZXJlIGZvciBhY2Nlc3NpbmcgdGhlIEhlYXAgc2VydmVyLgorICAgICAgICB2bS5oZWFwLnVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2VBbmRTZXQuc2V0LnJlbW92ZSh0aGlzKTsKICAgICB9
CiAKICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgTGV4aWNhbFNj
b3BlRmVhdHVyZXMgbGV4aWNhbFNjb3BlRmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJs
ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2
bS51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uZGVidWdnZXJTY29wZVNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIklzb0lubGluZWRIZWFwQ2VsbFR5
cGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSXNvU3Vic3BhY2VQZXJWTS5oIgogI2luY2x1ZGUgIkpJ
VFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgpAQCAtMjY0LDYgKzI2NSwxMiBAQCBwcml2
YXRlOgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAKKyNkZWZpbmUgSU5JVF9TRVJWRVJfSVNPX1NV
QlNQQUNFKG5hbWUsIGhlYXBDZWxsVHlwZSwgdHlwZSkgXAorICAgICwgbmFtZSBJU09fU1VCU1BB
Q0VfSU5JVCgqdGhpcywgaGVhcENlbGxUeXBlLCB0eXBlKQorCisjZGVmaW5lIElOSVRfU0VSVkVS
X1NUUlVDVFVSRV9JU09fU1VCU1BBQ0UobmFtZSwgaGVhcENlbGxUeXBlLCB0eXBlKSBcCisgICAg
LCBuYW1lKCJJc29sYXRlZCIgI25hbWUgIlNwYWNlIiwgKnRoaXMsIGhlYXBDZWxsVHlwZSwgc2l6
ZW9mKHR5cGUpLCB0eXBlOjpudW1iZXJPZkxvd2VyVGllckNlbGxzLCBtYWtlVW5pcXVlPFN0cnVj
dHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCJTdHJ1Y3R1cmUiKSkKKwogSGVhcDo6SGVhcChW
TSYgdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9oZWFwVHlwZShoZWFwVHlwZSkKICAg
ICAsIG1fcmFtU2l6ZShPcHRpb25zOjpmb3JjZVJBTVNpemUoKSA/IE9wdGlvbnM6OmZvcmNlUkFN
U2l6ZSgpIDogcmFtU2l6ZSgpKQpAQCAtMzU5LDQ0ICszNjYsMTQgQEAgSGVhcDo6SGVhcChWTSYg
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgY2VsbFNwYWNlKCJKU0NlbGwiLCAqdGhpcywg
Y2VsbEhlYXBDZWxsVHlwZSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweGFk
ZmI1YTc5CiAgICAgLCB2YXJpYWJsZVNpemVkQ2VsbFNwYWNlKCJWYXJpYWJsZSBTaXplZCBKU0Nl
bGwiLCAqdGhpcywgY2VsbEhlYXBDZWxsVHlwZSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkg
Ly8gSGFzaDoweGJjZDc2OWNjCiAgICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiSlNEZXN0
cnVjdGlibGVPYmplY3QiLCAqdGhpcywgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBm
YXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKSAvLyBIYXNoOjB4NGY1ZWQ3YTkKLSAgICAsIGFycmF5
U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTQXJyYXkp
Ci0gICAgLCBiaWdJbnRTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhlYXBDZWxs
VHlwZSwgSlNCaWdJbnQpCi0gICAgLCBjYWxsZWVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhp
cywgY2VsbEhlYXBDZWxsVHlwZSwgSlNDYWxsZWUpCi0gICAgLCBjbG9uZWRBcmd1bWVudHNTcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhlYXBDZWxsVHlwZSwgQ2xvbmVkQXJndW1l
bnRzKQotICAgICwgY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRo
aXMsIGNlbGxIZWFwQ2VsbFR5cGUsIEN1c3RvbUdldHRlclNldHRlcikKLSAgICAsIGRhdGVJbnN0
YW5jZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkYXRlSW5zdGFuY2VIZWFwQ2VsbFR5
cGUsIERhdGVJbnN0YW5jZSkKLSAgICAsIGRvbUF0dHJpYnV0ZUdldHRlclNldHRlclNwYWNlIElT
T19TVUJTUEFDRV9JTklUKCp0aGlzLCBjZWxsSGVhcENlbGxUeXBlLCBET01BdHRyaWJ1dGVHZXR0
ZXJTZXR0ZXIpCi0gICAgLCBleGNlcHRpb25TcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywg
ZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgRXhjZXB0aW9uKQotICAgICwgZXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBjZWxsSGVhcENl
bGxUeXBlLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKSAvLyBIYXNoOjB4N2I3MzBiMjAKLSAg
ICAsIGZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFwQ2VsbFR5
cGUsIEpTRnVuY3Rpb24pIC8vIEhhc2g6MHg4MDBmY2E3MgotICAgICwgZ2V0dGVyU2V0dGVyU3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFwQ2VsbFR5cGUsIEdldHRlclNldHRl
cikKLSAgICAsIGdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlIElTT19TVUJTUEFDRV9JTklU
KCp0aGlzLCBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRIZWFwQ2VsbFR5cGUsIEpTR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50KQotICAgICwgaW50ZXJuYWxGdW5jdGlvblNwYWNlIElTT19TVUJTUEFD
RV9JTklUKCp0aGlzLCBjZWxsSGVhcENlbGxUeXBlLCBJbnRlcm5hbEZ1bmN0aW9uKSAvLyBIYXNo
OjB4Zjg0NWM0NjQKLSAgICAsIGpzUHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywg
Y2VsbEhlYXBDZWxsVHlwZSwgSlNQcm94eSkKLSAgICAsIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgTmF0
aXZlRXhlY3V0YWJsZSkgLy8gSGFzaDoweDY3NTY3Zjk1Ci0gICAgLCBudW1iZXJPYmplY3RTcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhlYXBDZWxsVHlwZSwgTnVtYmVyT2JqZWN0
KQotICAgICwgcGxhaW5PYmplY3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhl
YXBDZWxsVHlwZSwgSlNOb25GaW5hbE9iamVjdCkgLy8gTWFpbmx5IHVzZWQgZm9yIHByb3RvdHlw
ZXMuCi0gICAgLCBwcm9taXNlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFw
Q2VsbFR5cGUsIEpTUHJvbWlzZSkKLSAgICAsIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhlYXBDZWxsVHlwZSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKQotICAgICwgcHJvcGVydHlUYWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0
aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBQcm9wZXJ0eVRhYmxlKSAvLyBIYXNo
OjB4YzZiYzlmMTIKLSAgICAsIHJlZ0V4cFNwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBSZWdFeHApCi0gICAgLCByZWdFeHBPYmplY3RT
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhlYXBDZWxsVHlwZSwgUmVnRXhwT2Jq
ZWN0KQotICAgICwgcm9wZVN0cmluZ1NwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBzdHJp
bmdIZWFwQ2VsbFR5cGUsIEpTUm9wZVN0cmluZykKLSAgICAsIHNjb3BlZEFyZ3VtZW50c1NwYWNl
IElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBjZWxsSGVhcENlbGxUeXBlLCBTY29wZWRBcmd1bWVu
dHMpCi0gICAgLCBzcGFyc2VBcnJheVZhbHVlTWFwU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRo
aXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFNwYXJzZUFycmF5VmFsdWVNYXApCi0g
ICAgLCBzdHJpbmdTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgc3RyaW5nSGVhcENlbGxU
eXBlLCBKU1N0cmluZykgLy8gSGFzaDoweDkwY2Y3NThmCi0gICAgLCBzdHJpbmdPYmplY3RTcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhlYXBDZWxsVHlwZSwgU3RyaW5nT2JqZWN0
KQotICAgICwgc3RydWN0dXJlQ2hhaW5TcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2Vs
bEhlYXBDZWxsVHlwZSwgU3RydWN0dXJlQ2hhaW4pCi0gICAgLCBzdHJ1Y3R1cmVSYXJlRGF0YVNw
YWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBl
LCBTdHJ1Y3R1cmVSYXJlRGF0YSkgLy8gSGFzaDoweGFjYTRlNjJkCi0gICAgLCBzdHJ1Y3R1cmVT
cGFjZSgiSXNvbGF0ZWRTdHJ1Y3R1cmVTcGFjZSIsICp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVh
cENlbGxUeXBlLCBzaXplb2YoU3RydWN0dXJlKSwgU3RydWN0dXJlOjpudW1iZXJPZkxvd2VyVGll
ckNlbGxzLCBtYWtlVW5pcXVlPFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCJTdHJ1
Y3R1cmUiKSkKLSAgICAsIGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZSgiSXNvbGF0ZWRCcmFuZGVkU3Ry
dWN0dXJlU3BhY2UiLCAqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgc2l6ZW9m
KEJyYW5kZWRTdHJ1Y3R1cmUpLCBCcmFuZGVkU3RydWN0dXJlOjpudW1iZXJPZkxvd2VyVGllckNl
bGxzLCBtYWtlVW5pcXVlPFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCJTdHJ1Y3R1
cmUiKSkKLSAgICAsIHN5bWJvbFRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRl
c3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFN5bWJvbFRhYmxlKSAvLyBIYXNoOjB4YzUyMTVh
ZmQKKyAgICBGT1JfRUFDSF9KU0NfQ09NTU9OX0lTT19TVUJTUEFDRShJTklUX1NFUlZFUl9JU09f
U1VCU1BBQ0UpCisgICAgRk9SX0VBQ0hfSlNDX1NUUlVDVFVSRV9JU09fU1VCU1BBQ0UoSU5JVF9T
RVJWRVJfU1RSVUNUVVJFX0lTT19TVUJTUEFDRSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2VzV2l0aENvbnN0cmFpbnRzKGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSkKICAg
ICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMoZXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZVNwYWNlKQotICAgICwgY29kZUJsb2NrU3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIENvZGVCbG9jaykgLy8gSGFz
aDoweDc3ZTY2ZWM5Ci0gICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgRnVuY3Rpb25FeGVjdXRh
YmxlKSAvLyBIYXNoOjB4NWQxNThmMwotICAgICwgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgUHJvZ3Jh
bUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNwotICAgICwgdW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhl
YXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpIC8vIEhhc2g6MHhmNmI4Mjhk
OQorICAgICwgY29kZUJsb2NrU3BhY2VBbmRTZXQgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRl
c3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIENvZGVCbG9jaykgLy8gSGFzaDoweDc3ZTY2ZWM5
CisgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0VfSU5JVCgq
dGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlKSAv
LyBIYXNoOjB4NWQxNThmMworICAgICwgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZUFuZFNldCBJU09f
U1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgUHJvZ3Jh
bUV4ZWN1dGFibGUpIC8vIEhhc2g6MHg1MjdjNzdlNworICAgICwgdW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGVTcGFjZUFuZFNldCBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpIC8vIEhhc2g6MHhm
NmI4MjhkOQogCiB7CiAgICAgbV93b3JsZFN0YXRlLnN0b3JlKDApOwpAQCAtNDMzLDYgKzQxMCw5
IEBAIEhlYXA6OkhlYXAoVk0mIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBtX3RocmVhZCA9
IGFkb3B0UmVmKG5ldyBIZWFwVGhyZWFkKGxvY2tlciwgKnRoaXMpKTsKIH0KIAorI3VuZGVmIElO
SVRfU0VSVkVSX0lTT19TVUJTUEFDRQorI3VuZGVmIElOSVRfU0VSVkVSX1NUUlVDVFVSRV9JU09f
U1VCU1BBQ0UKKwogSGVhcDo6fkhlYXAoKQogewogICAgIC8vIFNjcmliYmxlIG1fd29ybGRTdGF0
ZSB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGhlYXAgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95
ZWQgaWYgd2UgY3Jhc2ggaW4gY2hlY2tDb25uCkBAIC00NDcsNiArNDI3LDkgQEAgSGVhcDo6fkhl
YXAoKQogICAgIAogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA6IG1fbG9naWNhbGx5RW1wdHlX
ZWFrQmxvY2tzKQogICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koKnRoaXMsIGJsb2NrKTsKKwor
ICAgIGZvciAoYXV0byogcGVyVk1Jc29TdWJzcGFjZSA6IHBlclZNSXNvU3Vic3BhY2VzKQorICAg
ICAgICBwZXJWTUlzb1N1YnNwYWNlLT5yZWxlYXNlSXNvU3Vic3BhY2UoKnRoaXMpOwogfQogCiBi
b29sIEhlYXA6OmlzUGFnZWRPdXQoKQpAQCAtNjkxLDcgKzY3NCw3IEBAIHZvaWQgSGVhcDo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemUKIHsKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHZtLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwot
ICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RnVuY3Rpb25FeGVjdXRh
YmxlPihmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zcGFjZSk7CisgICAgZmluYWxpemVNYXJrZWRV
bmNvbmRpdGlvbmFsRmluYWxpemVyczxGdW5jdGlvbkV4ZWN1dGFibGU+KGZ1bmN0aW9uRXhlY3V0
YWJsZVNwYWNlQW5kU2V0LnNwYWNlKTsKICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzPFN5bWJvbFRhYmxlPihzeW1ib2xUYWJsZVNwYWNlKTsKICAgICBmaW5hbGl6ZU1h
cmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+KGV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMpOyAvLyBXZSBydW4gdGhpcyBi
ZWZvcmUgQ29kZUJsb2NrJ3MgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXIgc2luY2UgQ29kZUJsb2Nr
IGxvb2tzIGF0IHRoZSBvd25lciBleGVjdXRhYmxlJ3MgaW5zdGFsbGVkIENvZGVCbG9jayBpbiBp
dHMgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkuCiAgICAgZm9yRWFjaENvZGVCbG9ja1NwYWNlKApA
QCAtNjk5LDcgKzY4Miw3IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxp
emUKICAgICAgICAgICAgIHRoaXMtPmZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8Q29kZUJsb2NrPihzcGFjZS5zZXQpOwogICAgICAgICB9KTsKICAgICBmaW5hbGl6ZU1hcmtl
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFN0cnVjdHVyZVJhcmVEYXRhPihzdHJ1Y3R1cmVSYXJl
RGF0YVNwYWNlKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
LnNldCk7CisgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4odW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNl
dC5zZXQpOwogICAgIGlmIChtX3dlYWtTZXRTcGFjZSkKICAgICAgICAgZmluYWxpemVNYXJrZWRV
bmNvbmRpdGlvbmFsRmluYWxpemVyczxKU1dlYWtTZXQ+KCptX3dlYWtTZXRTcGFjZSk7CiAgICAg
aWYgKG1fd2Vha01hcFNwYWNlKQpAQCAtMTA1Nyw3ICsxMDQwLDcgQEAgdm9pZCBIZWFwOjpkZWxl
dGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoRAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NvbGxlY3Rp
b25TY29wZSk7CiAKICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaGVhcEl0ZXJhdGlvblNjb3BlKCp0
aGlzKTsKLSAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNldC5mb3JFYWNoTGl2
ZUNlbGwoCisgICAgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZUFuZFNldC5zZXQuZm9y
RWFjaExpdmVDZWxsKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2lu
ZCkgewogICAgICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBzdGF0aWNfY2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJDb2RlKHZtKTsKQEAgLTMxNzIsNyArMzE1NSw3IEBAIHZv
aWQgSGVhcDo6dmVyaWZ5R0MoKQogICAgIG1fdmVyaWZpZXJTbG90VmlzaXRvciA9IG51bGxwdHI7
CiB9CiAKLSNkZWZpbmUgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5h
bWUsIGhlYXBDZWxsVHlwZSwgdHlwZSkgXAorI2RlZmluZSBERUZJTkVfRFlOQU1JQ19JU09fU1VC
U1BBQ0VfTUVNQkVSX1NMT1cobmFtZSwgaGVhcENlbGxUeXBlLCB0eXBlKSBcCiAgICAgSXNvU3Vi
c3BhY2UqIEhlYXA6Om5hbWUjI1Nsb3coKSBcCiAgICAgeyBcCiAgICAgICAgIEFTU0VSVCghbV8j
I25hbWUpOyBcCkBAIC0zMTgyLDExMyArMzE2NSwxMSBAQCB2b2lkIEhlYXA6OnZlcmlmeUdDKCkK
ICAgICAgICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCiAgICAgfQogCitGT1JfRUFDSF9KU0Nf
RFlOQU1JQ19JU09fU1VCU1BBQ0UoREVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUl9T
TE9XKQogCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpR2xvYmFs
T2JqZWN0U3BhY2UsIGFwaUdsb2JhbE9iamVjdEhlYXBDZWxsVHlwZSwgSlNBUElHbG9iYWxPYmpl
Y3QpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpVmFsdWVXcmFw
cGVyU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTQVBJVmFsdWVXcmFwcGVyKQotRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGFycmF5QnVmZmVyU3BhY2UsIGNlbGxIZWFw
Q2VsbFR5cGUsIEpTQXJyYXlCdWZmZXIpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coYXJyYXlJdGVyYXRvclNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU0FycmF5SXRl
cmF0b3IpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXN5bmNHZW5l
cmF0b3JTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNBc3luY0dlbmVyYXRvcikKLURZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhiaWdJbnQ2NEFycmF5U3BhY2UsIGNlbGxI
ZWFwQ2VsbFR5cGUsIEpTQmlnSW50NjRBcnJheSkKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhiaWdJbnRPYmplY3RTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgQmlnSW50
T2JqZWN0KQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGJpZ1VpbnQ2
NEFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTQmlnVWludDY0QXJyYXkpCi1EWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYm9vbGVhbk9iamVjdFNwYWNlLCBjZWxs
SGVhcENlbGxUeXBlLCBCb29sZWFuT2JqZWN0KQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGJvdW5kRnVuY3Rpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNCb3Vu
ZEZ1bmN0aW9uKSAvLyBIYXNoOjB4ZDc5MTZkNDEKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhjYWxsYmFja0NvbnN0cnVjdG9yU3BhY2UsIGNhbGxiYWNrQ29uc3RydWN0
b3JIZWFwQ2VsbFR5cGUsIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcikKLURZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja0dsb2JhbE9iamVjdFNwYWNlLCBjYWxsYmFj
a0dsb2JhbE9iamVjdEhlYXBDZWxsVHlwZSwgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVj
dD4pCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coY2FsbGJhY2tGdW5j
dGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU0NhbGxiYWNrRnVuY3Rpb24pIC8vIEhhc2g6
MHhlNzY0OGViYwotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxi
YWNrT2JqZWN0U3BhY2UsIGNhbGxiYWNrT2JqZWN0SGVhcENlbGxUeXBlLCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTTm9uRmluYWxPYmplY3Q+KQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGN1c3RvbUdldHRlckZ1bmN0aW9uU3BhY2UsIGN1c3RvbUdldHRlckZ1bmN0aW9uSGVh
cENlbGxUeXBlLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uKQotRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKGN1c3RvbVNldHRlckZ1bmN0aW9uU3BhY2UsIGN1c3RvbVNldHRl
ckZ1bmN0aW9uSGVhcENlbGxUeXBlLCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKQotRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGRhdGFWaWV3U3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUsIEpTRGF0YVZpZXcpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1coZGVidWdnZXJTY29wZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBEZWJ1Z2dlclNjb3BlKQot
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGVycm9ySW5zdGFuY2VTcGFj
ZSwgZXJyb3JJbnN0YW5jZUhlYXBDZWxsVHlwZSwgRXJyb3JJbnN0YW5jZSkgLy8gSGFzaDoweDNm
NDBkNGEKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhmbG9hdDMyQXJy
YXlTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNGbG9hdDMyQXJyYXkpCi1EWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZmxvYXQ2NEFycmF5U3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUsIEpTRmxvYXQ2NEFycmF5KQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGZ1bmN0aW9uUmFyZURhdGFTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZSwgRnVuY3Rpb25SYXJlRGF0YSkKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhnZW5lcmF0b3JTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNHZW5lcmF0b3IpCi1EWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coZ2xvYmFsT2JqZWN0U3BhY2UsIGds
b2JhbE9iamVjdEhlYXBDZWxsVHlwZSwgSlNHbG9iYWxPYmplY3QpCi1EWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW5qZWN0ZWRTY3JpcHRIb3N0U3BhY2UsIGluamVjdGVk
U2NyaXB0SG9zdFNwYWNlSGVhcENlbGxUeXBlLCBJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRI
b3N0KQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludDhBcnJheVNw
YWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU0ludDhBcnJheSkKLURZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhpbnQxNkFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpT
SW50MTZBcnJheSkKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnQz
MkFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTSW50MzJBcnJheSkKLURZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UsIGph
dmFTY3JpcHRDYWxsRnJhbWVIZWFwQ2VsbFR5cGUsIEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzTW9kdWxl
UmVjb3JkU3BhY2UsIGpzTW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlLCBKU01vZHVsZVJlY29yZCkK
LURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhtYXBCdWNrZXRTcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgSlNNYXA6OkJ1Y2tldFR5cGUpCi1EWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1cobWFwSXRlcmF0b3JTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwg
SlNNYXBJdGVyYXRvcikKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyht
YXBTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNNYXApCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2UsIG1vZHVsZU5hbWVz
cGFjZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpCi1EWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSwg
bmF0aXZlU3RkRnVuY3Rpb25IZWFwQ2VsbFR5cGUsIEpTTmF0aXZlU3RkRnVuY3Rpb24pIC8vIEhh
c2g6MHg3MGVkNjFlNAotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHBy
b3h5T2JqZWN0U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFByb3h5T2JqZWN0KQotRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHByb3h5UmV2b2tlU3BhY2UsIGNlbGxIZWFw
Q2VsbFR5cGUsIFByb3h5UmV2b2tlKSAvLyBIYXNoOjB4YjUwNmE5MzkKLURZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhyZW1vdGVGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENl
bGxUeXBlLCBKU1JlbW90ZUZ1bmN0aW9uKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFw
Q2VsbFR5cGUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlLCBkZXN0cnVjdGlibGVD
ZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZldGNoUGFyYW1ldGVycykKLURZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaGVyU3BhY2UsIGRlc3RydWN0aWJs
ZUNlbGxIZWFwQ2VsbFR5cGUsIEpTU2NyaXB0RmV0Y2hlcikKLURZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhzZXRCdWNrZXRTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNT
ZXQ6OkJ1Y2tldFR5cGUpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
c2V0SXRlcmF0b3JTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNTZXRJdGVyYXRvcikKLURZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzZXRTcGFjZSwgY2VsbEhlYXBDZWxs
VHlwZSwgSlNTZXQpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2hh
ZG93UmVhbG1TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgU2hhZG93UmVhbG1PYmplY3QpCi1EWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3RyaWN0RXZhbEFjdGl2YXRpb25T
cGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgU3RyaWN0RXZhbEFjdGl2YXRpb24pCi1EWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc3RyaW5nSXRlcmF0b3JTcGFjZSwgY2VsbEhl
YXBDZWxsVHlwZSwgSlNTdHJpbmdJdGVyYXRvcikKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhzb3VyY2VDb2RlU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5
cGUsIEpTU291cmNlQ29kZSkKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhzeW1ib2xTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3ltYm9sKQotRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHN5bWJvbE9iamVjdFNwYWNlLCBj
ZWxsSGVhcENlbGxUeXBlLCBTeW1ib2xPYmplY3QpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1codGVtcGxhdGVPYmplY3REZXNjcmlwdG9yU3BhY2UsIGRlc3RydWN0aWJs
ZUNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKQotRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsQ2FsZW5kYXJTcGFjZSwgY2Vs
bEhlYXBDZWxsVHlwZSwgVGVtcG9yYWxDYWxlbmRhcikKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbER1cmF0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUs
IFRlbXBvcmFsRHVyYXRpb24pCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1codGVtcG9yYWxJbnN0YW50U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFRlbXBvcmFsSW5zdGFu
dCkKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbFBsYWlu
VGltZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBUZW1wb3JhbFBsYWluVGltZSkKLURZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbFRpbWVab25lU3BhY2UsIGNl
bGxIZWFwQ2VsbFR5cGUsIFRlbXBvcmFsVGltZVpvbmUpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1codWludDhBcnJheVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU1Vp
bnQ4QXJyYXkpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codWludDhD
bGFtcGVkQXJyYXlTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNVaW50OENsYW1wZWRBcnJheSkK
LURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1aW50MTZBcnJheVNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLCBKU1VpbnQxNkFycmF5KQotRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKHVpbnQzMkFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpT
VWludDMyQXJyYXkpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codW5s
aW5rZWRFdmFsQ29kZUJsb2NrU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFVu
bGlua2VkRXZhbENvZGVCbG9jaykKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFw
Q2VsbFR5cGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spCi1EWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1codW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3BhY2Us
IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaykKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh1bmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2tTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKHdlYWtNYXBTcGFjZSwgd2Vha01hcEhlYXBDZWxsVHlwZSwgSlNXZWFrTWFwKSAvLyBIYXNo
OjB4NjYyYjEyYTMKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWFr
U2V0U3BhY2UsIHdlYWtTZXRIZWFwQ2VsbFR5cGUsIEpTV2Vha1NldCkgLy8gSGFzaDoweDRjNzgx
YjMwCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2Vha09iamVjdFJl
ZlNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU1dlYWtPYmplY3RSZWYpIC8vIEhhc2g6MHg4ZWM2
OGYxZgotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdpdGhTY29wZVNw
YWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU1dpdGhTY29wZSkKLURZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhmaW5hbGl6YXRpb25SZWdpc3RyeVNwYWNlLCBmaW5hbGl6YXRp
b25SZWdpc3RyeUNlbGxUeXBlLCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KQotI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBp
V3JhcHBlck9iamVjdFNwYWNlLCBhcGlXcmFwcGVyT2JqZWN0SGVhcENlbGxUeXBlLCBKU0NhbGxi
YWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4pCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cob2JqQ0NhbGxiYWNrRnVuY3Rpb25TcGFjZSwgb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25IZWFwQ2VsbFR5cGUsIE9iakNDYWxsYmFja0Z1bmN0aW9uKSAvLyBIYXNoOjB4MTBmNjEw
YjgKLSNlbmRpZgotI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECi1EWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coYXBpV3JhcHBlck9iamVjdFNwYWNlLCBhcGlXcmFwcGVy
T2JqZWN0SGVhcENlbGxUeXBlLCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4p
Ci1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coanNjQ2FsbGJhY2tGdW5j
dGlvblNwYWNlLCBqc2NDYWxsYmFja0Z1bmN0aW9uSGVhcENlbGxUeXBlLCBKU0NDYWxsYmFja0Z1
bmN0aW9uKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNr
QVBJV3JhcHBlckdsb2JhbE9iamVjdFNwYWNlLCBjYWxsYmFja0FQSVdyYXBwZXJHbG9iYWxPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0
PikKLSNlbmRpZgotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxD
b2xsYXRvclNwYWNlLCBpbnRsQ29sbGF0b3JIZWFwQ2VsbFR5cGUsIEludGxDb2xsYXRvcikKLURZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsRGF0ZVRpbWVGb3JtYXRT
cGFjZSwgaW50bERhdGVUaW1lRm9ybWF0SGVhcENlbGxUeXBlLCBJbnRsRGF0ZVRpbWVGb3JtYXQp
Ci1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bERpc3BsYXlOYW1l
c1NwYWNlLCBpbnRsRGlzcGxheU5hbWVzSGVhcENlbGxUeXBlLCBJbnRsRGlzcGxheU5hbWVzKQot
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxMaXN0Rm9ybWF0U3Bh
Y2UsIGludGxMaXN0Rm9ybWF0SGVhcENlbGxUeXBlLCBJbnRsTGlzdEZvcm1hdCkKLURZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTG9jYWxlU3BhY2UsIGludGxMb2Nh
bGVIZWFwQ2VsbFR5cGUsIEludGxMb2NhbGUpCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSX1NMT1coaW50bE51bWJlckZvcm1hdFNwYWNlLCBpbnRsTnVtYmVyRm9ybWF0SGVhcENl
bGxUeXBlLCBJbnRsTnVtYmVyRm9ybWF0KQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGludGxQbHVyYWxSdWxlc1NwYWNlLCBpbnRsUGx1cmFsUnVsZXNIZWFwQ2VsbFR5
cGUsIEludGxQbHVyYWxSdWxlcykKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UsIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRI
ZWFwQ2VsbFR5cGUsIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQpCi1EWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlLCBpbnRsU2VnbWVu
dEl0ZXJhdG9ySGVhcENlbGxUeXBlLCBJbnRsU2VnbWVudEl0ZXJhdG9yKQotRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50ZXJTcGFjZSwgaW50bFNlZ21l
bnRlckhlYXBDZWxsVHlwZSwgSW50bFNlZ21lbnRlcikKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudHNTcGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxU
eXBlLCBJbnRsU2VnbWVudHMpCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhl
YXBDZWxsVHlwZSwgSlNUb1dhc21JQ0NhbGxlZSkKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUV4Y2VwdGlvblNwYWNlLCB3ZWJBc3NlbWJseUV4Y2Vw
dGlvbkhlYXBDZWxsVHlwZSwgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbikKLURZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UsIHdlYkFz
c2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUsIFdlYkFzc2VtYmx5RnVuY3Rpb24pIC8vIEhhc2g6
MHg4YjdjMzJkYgotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFz
c2VtYmx5R2xvYmFsU3BhY2UsIHdlYkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlLCBKU1dlYkFz
c2VtYmx5R2xvYmFsKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdl
YkFzc2VtYmx5SW5zdGFuY2VTcGFjZSwgd2ViQXNzZW1ibHlJbnN0YW5jZUhlYXBDZWxsVHlwZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHdlYkFzc2VtYmx5TWVtb3J5U3BhY2UsIHdlYkFzc2VtYmx5TWVtb3J5SGVhcENlbGxU
eXBlLCBKU1dlYkFzc2VtYmx5TWVtb3J5KQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxlSGVhcENl
bGxUeXBlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKQotRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UsIHdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkSGVhcENlbGxUeXBlLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCkKLURZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhYmxlU3BhY2UsIHdl
YkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGUsIEpTV2ViQXNzZW1ibHlUYWJsZSkKLURZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhZ1NwYWNlLCB3ZWJB
c3NlbWJseVRhZ0hlYXBDZWxsVHlwZSwgSlNXZWJBc3NlbWJseVRhZykKLURZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikgLy8gSGFzaDow
eGQ0YTVmZjAxCi0jZW5kaWYKLQotI3VuZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVworI3VuZGVmIERFRklORV9EWU5BTUlDX0lTT19TVUJTUEFDRV9NRU1CRVJfU0xP
VwogCi0jZGVmaW5lIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSX1NMT1cobmFt
ZSwgaGVhcENlbGxUeXBlLCB0eXBlKSBcCisjZGVmaW5lIERFRklORV9EWU5BTUlDX1NQQUNFX0FO
RF9TRVRfTUVNQkVSX1NMT1cobmFtZSwgaGVhcENlbGxUeXBlLCB0eXBlKSBcCiAgICAgSXNvU3Vi
c3BhY2UqIEhlYXA6Om5hbWUjI1Nsb3coKSBcCiAgICAgeyBcCiAgICAgICAgIEFTU0VSVCghbV8j
I25hbWUpOyBcCkBAIC0zMjk4LDkgKzMxNzksNjIgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKAogICAgICAgICByZXR1cm4gJm1fIyNuYW1lLT5zcGFjZTsgXAogICAg
IH0KIAotRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVJfU0xPVyhldmFsRXhlY3V0
YWJsZVNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBFdmFsRXhlY3V0YWJsZSkg
Ly8gSGFzaDoweDk1OGUzZTlkCi1EWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUl9T
TE9XKG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2Vs
bFR5cGUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKSAvLyBIYXNoOjB4NjUwNmZhM2MKK0RFRklO
RV9EWU5BTUlDX1NQQUNFX0FORF9TRVRfTUVNQkVSX1NMT1coZXZhbEV4ZWN1dGFibGVTcGFjZSwg
ZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgRXZhbEV4ZWN1dGFibGUpIC8vIEhhc2g6MHg5
NThlM2U5ZAorREVGSU5FX0RZTkFNSUNfU1BBQ0VfQU5EX1NFVF9NRU1CRVJfU0xPVyhtb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZVNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSkgLy8gSGFzaDoweDY1MDZmYTNjCisKKyN1bmRlZiBERUZJTkVf
RFlOQU1JQ19TUEFDRV9BTkRfU0VUX01FTUJFUl9TTE9XCisKKworbmFtZXNwYWNlIEdDQ2xpZW50
IHsKKworI2RlZmluZSBJTklUX0NMSUVOVF9JU09fU1VCU1BBQ0VfRlJPTV9TUEFDRV9BTkRfU0VU
KHN1YnNwYWNlKSBzdWJzcGFjZShoZWFwLnN1YnNwYWNlIyNBbmRTZXQuc3BhY2UpCisKKyNkZWZp
bmUgSU5JVF9DTElFTlRfSVNPX1NVQlNQQUNFKG5hbWUsIGhlYXBDZWxsVHlwZSwgdHlwZSkgXAor
ICAgICwgbmFtZShoZWFwLm5hbWUpCisKK0hlYXA6OkhlYXAoSlNDOjpIZWFwJiBoZWFwKQorICAg
IDogbV9zZXJ2ZXIoaGVhcCkKKyAgICBGT1JfRUFDSF9KU0NfSVNPX1NVQlNQQUNFKElOSVRfQ0xJ
RU5UX0lTT19TVUJTUEFDRSkKKyAgICAsIElOSVRfQ0xJRU5UX0lTT19TVUJTUEFDRV9GUk9NX1NQ
QUNFX0FORF9TRVQoY29kZUJsb2NrU3BhY2UpCisgICAgLCBJTklUX0NMSUVOVF9JU09fU1VCU1BB
Q0VfRlJPTV9TUEFDRV9BTkRfU0VUKGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQorICAgICwgSU5J
VF9DTElFTlRfSVNPX1NVQlNQQUNFX0ZST01fU1BBQ0VfQU5EX1NFVChwcm9ncmFtRXhlY3V0YWJs
ZVNwYWNlKQorICAgICwgSU5JVF9DTElFTlRfSVNPX1NVQlNQQUNFX0ZST01fU1BBQ0VfQU5EX1NF
VCh1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKQoreworfQorCitIZWFwOjp+SGVhcCgp
Cit7CisgICAgZm9yIChhdXRvKiBwZXJWTUlzb1N1YnNwYWNlIDogcGVyVk1Jc29TdWJzcGFjZXMp
CisgICAgICAgIHBlclZNSXNvU3Vic3BhY2UtPnJlbGVhc2VDbGllbnRJc29TdWJzcGFjZSh2bSgp
KTsKK30KKworI3VuZGVmIElOSVRfQ0xJRU5UX0lTT19TVUJTUEFDRQorI3VuZGVmIENMSUVOVF9J
U09fU1VCU1BBQ0VfSU5JVF9GUk9NX1NQQUNFX0FORF9TRVQKKworCisjZGVmaW5lIERFRklORV9E
WU5BTUlDX0lTT19TVUJTUEFDRV9NRU1CRVJfU0xPV19JTVBMKG5hbWUsIGhlYXBDZWxsVHlwZSwg
dHlwZSkgXAorICAgIElzb1N1YnNwYWNlKiBIZWFwOjpuYW1lIyNTbG93KCkgXAorICAgIHsgXAor
ICAgICAgICBBU1NFUlQoIW1fIyNuYW1lKTsgXAorICAgICAgICBMb2NrZXIgbG9ja2VyIHsgc2Vy
dmVyKCkubV9sb2NrIH07IFwKKyAgICAgICAgSlNDOjpJc29TdWJzcGFjZSYgc2VydmVyU3BhY2Ug
PSAqc2VydmVyKCkubmFtZTxTdWJzcGFjZUFjY2Vzczo6T25NYWluVGhyZWFkPigpOyBcCisgICAg
ICAgIGF1dG8gc3BhY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPihzZXJ2ZXJTcGFjZSk7IFwK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgXAorICAgICAgICBtXyMjbmFtZSA9IFdU
Rk1vdmUoc3BhY2UpOyBcCisgICAgICAgIHJldHVybiBtXyMjbmFtZS5nZXQoKTsgXAorICAgIH0K
KworI2RlZmluZSBERUZJTkVfRFlOQU1JQ19JU09fU1VCU1BBQ0VfTUVNQkVSX1NMT1cobmFtZSkg
XAorICAgIERFRklORV9EWU5BTUlDX0lTT19TVUJTUEFDRV9NRU1CRVJfU0xPV19JTVBMKG5hbWUs
IHVudXNlZCwgdW51c2VkMikgXAorCitGT1JfRUFDSF9KU0NfRFlOQU1JQ19JU09fU1VCU1BBQ0Uo
REVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUl9TTE9XX0lNUEwpCisKK0RFRklORV9E
WU5BTUlDX0lTT19TVUJTUEFDRV9NRU1CRVJfU0xPVyhldmFsRXhlY3V0YWJsZVNwYWNlKQorREVG
SU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUl9TTE9XKG1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlU3BhY2UpCisKKyN1bmRlZiBERUZJTkVfRFlOQU1JQ19JU09fU1VCU1BBQ0VfTUVNQkVSX1NM
T1dfSU1QTAorI3VuZGVmIERFRklORV9EWU5BTUlDX0lTT19TVUJTUEFDRV9NRU1CRVJfU0xPVwog
Ci0jdW5kZWYgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVJfU0xPVworfSAvLyBu
YW1lc3BhY2UgR0NDbGllbnQKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgY2xhc3MgSGVh
cDsKIGNsYXNzIEhlYXBQcm9maWxlcjsKIGNsYXNzIEhlYXBWZXJpZmllcjsKIGNsYXNzIEluY3Jl
bWVudGFsU3dlZXBlcjsKK2NsYXNzIElzb1N1YnNwYWNlUGVyVk07CiBjbGFzcyBKSVRTdHViUm91
dGluZTsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogY2xhc3MgSlNDZWxsOwpAQCAtMTA2LDYg
KzEwNywxNzIgQEAgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIH0KIAor
bmFtZXNwYWNlIEdDQ2xpZW50IHsKK2NsYXNzIEhlYXA7Cit9CisKKyNkZWZpbmUgRk9SX0VBQ0hf
SlNDX0NPTU1PTl9JU09fU1VCU1BBQ0UodikgXAorICAgIHYoYXJyYXlTcGFjZSwgY2VsbEhlYXBD
ZWxsVHlwZSwgSlNBcnJheSkgXAorICAgIHYoYmlnSW50U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUs
IEpTQmlnSW50KSBcCisgICAgdihjYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNDYWxs
ZWUpIFwKKyAgICB2KGNsb25lZEFyZ3VtZW50c1NwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBDbG9u
ZWRBcmd1bWVudHMpIFwKKyAgICB2KGN1c3RvbUdldHRlclNldHRlclNwYWNlLCBjZWxsSGVhcENl
bGxUeXBlLCBDdXN0b21HZXR0ZXJTZXR0ZXIpIFwKKyAgICB2KGRhdGVJbnN0YW5jZVNwYWNlLCBk
YXRlSW5zdGFuY2VIZWFwQ2VsbFR5cGUsIERhdGVJbnN0YW5jZSkgXAorICAgIHYoZG9tQXR0cmli
dXRlR2V0dGVyU2V0dGVyU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIERPTUF0dHJpYnV0ZUdldHRl
clNldHRlcikgXAorICAgIHYoZXhjZXB0aW9uU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2Vs
bFR5cGUsIEV4Y2VwdGlvbikgXAorICAgIHYoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKSBcCisgICAgdihm
dW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU0Z1bmN0aW9uKSBcCisgICAgdihnZXR0
ZXJTZXR0ZXJTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgR2V0dGVyU2V0dGVyKSBcCisgICAgdihn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZSwgZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50SGVh
cENlbGxUeXBlLCBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCkgXAorICAgIHYoaW50ZXJuYWxG
dW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBJbnRlcm5hbEZ1bmN0aW9uKSBcCisgICAg
dihqc1Byb3h5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTUHJveHkpIFwKKyAgICB2KG5hdGl2
ZUV4ZWN1dGFibGVTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgTmF0aXZlRXhl
Y3V0YWJsZSkgXAorICAgIHYobnVtYmVyT2JqZWN0U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIE51
bWJlck9iamVjdCkgXAorICAgIHYocGxhaW5PYmplY3RTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwg
SlNOb25GaW5hbE9iamVjdCkgXAorICAgIHYocHJvbWlzZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBl
LCBKU1Byb21pc2UpIFwKKyAgICB2KHByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSwgY2VsbEhl
YXBDZWxsVHlwZSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKSBcCisgICAgdihwcm9wZXJ0eVRh
YmxlU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFByb3BlcnR5VGFibGUpIFwK
KyAgICB2KHJlZ0V4cFNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBSZWdFeHAp
IFwKKyAgICB2KHJlZ0V4cE9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBSZWdFeHBPYmpl
Y3QpIFwKKyAgICB2KHJvcGVTdHJpbmdTcGFjZSwgc3RyaW5nSGVhcENlbGxUeXBlLCBKU1JvcGVT
dHJpbmcpIFwKKyAgICB2KHNjb3BlZEFyZ3VtZW50c1NwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBT
Y29wZWRBcmd1bWVudHMpIFwKKyAgICB2KHNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZSwgZGVzdHJ1
Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3BhcnNlQXJyYXlWYWx1ZU1hcCkgXAorICAgIHYoc3Ry
aW5nU3BhY2UsIHN0cmluZ0hlYXBDZWxsVHlwZSwgSlNTdHJpbmcpIFwKKyAgICB2KHN0cmluZ09i
amVjdFNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBTdHJpbmdPYmplY3QpIFwKKyAgICB2KHN0cnVj
dHVyZUNoYWluU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFN0cnVjdHVyZUNoYWluKSBcCisgICAg
dihzdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBT
dHJ1Y3R1cmVSYXJlRGF0YSkgXAorICAgIHYoc3ltYm9sVGFibGVTcGFjZSwgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZSwgU3ltYm9sVGFibGUpCisgICAgCisjZGVmaW5lIEZPUl9FQUNIX0pT
Q19TVFJVQ1RVUkVfSVNPX1NVQlNQQUNFKHYpIFwKKyAgICB2KHN0cnVjdHVyZVNwYWNlLCBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTdHJ1Y3R1cmUpIFwKKyAgICB2KGJyYW5kZWRTdHJ1
Y3R1cmVTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgQnJhbmRlZFN0cnVjdHVy
ZSkgXAorCisjZGVmaW5lIEZPUl9FQUNIX0pTQ19JU09fU1VCU1BBQ0UodikgXAorICAgIEZPUl9F
QUNIX0pTQ19DT01NT05fSVNPX1NVQlNQQUNFKHYpIFwKKyAgICBGT1JfRUFDSF9KU0NfU1RSVUNU
VVJFX0lTT19TVUJTUEFDRSh2KQorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyNkZWZpbmUg
Rk9SX0VBQ0hfSlNDX09CSkNfQVBJX0RZTkFNSUNfSVNPX1NVQlNQQUNFKHYpIFwKKyAgICB2KGFw
aVdyYXBwZXJPYmplY3RTcGFjZSwgYXBpV3JhcHBlck9iamVjdEhlYXBDZWxsVHlwZSwgSlNDYWxs
YmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KSBcCisgICAgdihvYmpDQ2FsbGJhY2tGdW5j
dGlvblNwYWNlLCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkhlYXBDZWxsVHlwZSwgT2JqQ0NhbGxiYWNr
RnVuY3Rpb24pCisjZWxzZQorI2RlZmluZSBGT1JfRUFDSF9KU0NfT0JKQ19BUElfRFlOQU1JQ19J
U09fU1VCU1BBQ0UodikKKyNlbmRpZgorCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyNk
ZWZpbmUgRk9SX0VBQ0hfSlNDX0dMSUJfQVBJX0RZTkFNSUNfSVNPX1NVQlNQQUNFKHYpIFwKKyAg
ICB2KGFwaVdyYXBwZXJPYmplY3RTcGFjZSwgYXBpV3JhcHBlck9iamVjdEhlYXBDZWxsVHlwZSwg
SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+KSBcCisgICAgdihqc2NDYWxsYmFj
a0Z1bmN0aW9uU3BhY2UsIGpzY0NhbGxiYWNrRnVuY3Rpb25IZWFwQ2VsbFR5cGUsIEpTQ0NhbGxi
YWNrRnVuY3Rpb24pIFwKKyAgICB2KGNhbGxiYWNrQVBJV3JhcHBlckdsb2JhbE9iamVjdFNwYWNl
LCBjYWxsYmFja0FQSVdyYXBwZXJHbG9iYWxPYmplY3RIZWFwQ2VsbFR5cGUsIEpTQ2FsbGJhY2tP
YmplY3Q8SlNBUElXcmFwcGVyR2xvYmFsT2JqZWN0PikKKyNlbHNlCisjZGVmaW5lIEZPUl9FQUNI
X0pTQ19HTElCX0FQSV9EWU5BTUlDX0lTT19TVUJTUEFDRSh2KQorI2VuZGlmCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisjZGVmaW5lIEZPUl9FQUNIX0pTQ19XRUJBU1NFTUJMWV9EWU5BTUlD
X0lTT19TVUJTUEFDRSh2KSBcCisgICAgdihqc1RvV2FzbUlDQ2FsbGVlU3BhY2UsIGNlbGxIZWFw
Q2VsbFR5cGUsIEpTVG9XYXNtSUNDYWxsZWUpIFwKKyAgICB2KHdlYkFzc2VtYmx5RXhjZXB0aW9u
U3BhY2UsIHdlYkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlLCBKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uKSBcCisgICAgdih3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UsIHdlYkFzc2VtYmx5RnVu
Y3Rpb25IZWFwQ2VsbFR5cGUsIFdlYkFzc2VtYmx5RnVuY3Rpb24pIFwKKyAgICB2KHdlYkFzc2Vt
Ymx5R2xvYmFsU3BhY2UsIHdlYkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlLCBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKSBcCisgICAgdih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UsIHdlYkFzc2VtYmx5
SW5zdGFuY2VIZWFwQ2VsbFR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkgXAorICAgIHYod2Vi
QXNzZW1ibHlNZW1vcnlTcGFjZSwgd2ViQXNzZW1ibHlNZW1vcnlIZWFwQ2VsbFR5cGUsIEpTV2Vi
QXNzZW1ibHlNZW1vcnkpIFwKKyAgICB2KHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UsIHdlYkFzc2Vt
Ymx5TW9kdWxlSGVhcENlbGxUeXBlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKSBcCisgICAgdih3ZWJB
c3NlbWJseU1vZHVsZVJlY29yZFNwYWNlLCB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZEhlYXBDZWxs
VHlwZSwgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpIFwKKyAgICB2KHdlYkFzc2VtYmx5VGFibGVT
cGFjZSwgd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlwZSwgSlNXZWJBc3NlbWJseVRhYmxlKSBc
CisgICAgdih3ZWJBc3NlbWJseVRhZ1NwYWNlLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZSwg
SlNXZWJBc3NlbWJseVRhZykgXAorICAgIHYod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFj
ZSwgY2VsbEhlYXBDZWxsVHlwZSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pCisjZWxzZQor
I2RlZmluZSBGT1JfRUFDSF9KU0NfV0VCQVNTRU1CTFlfRFlOQU1JQ19JU09fU1VCU1BBQ0UodikK
KyNlbmRpZgorCisjZGVmaW5lIEZPUl9FQUNIX0pTQ19EWU5BTUlDX0lTT19TVUJTUEFDRSh2KSBc
CisgICAgRk9SX0VBQ0hfSlNDX09CSkNfQVBJX0RZTkFNSUNfSVNPX1NVQlNQQUNFKHYpIFwKKyAg
ICBGT1JfRUFDSF9KU0NfR0xJQl9BUElfRFlOQU1JQ19JU09fU1VCU1BBQ0UodikgXAorICAgIFwK
KyAgICB2KGFwaUdsb2JhbE9iamVjdFNwYWNlLCBhcGlHbG9iYWxPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTQVBJR2xvYmFsT2JqZWN0KSBcCisgICAgdihhcGlWYWx1ZVdyYXBwZXJTcGFjZSwgY2VsbEhl
YXBDZWxsVHlwZSwgSlNBUElWYWx1ZVdyYXBwZXIpIFwKKyAgICB2KGFycmF5QnVmZmVyU3BhY2Us
IGNlbGxIZWFwQ2VsbFR5cGUsIEpTQXJyYXlCdWZmZXIpIFwKKyAgICB2KGFycmF5SXRlcmF0b3JT
cGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNBcnJheUl0ZXJhdG9yKSBcCisgICAgdihhc3luY0dl
bmVyYXRvclNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU0FzeW5jR2VuZXJhdG9yKSBcCisgICAg
dihiaWdJbnQ2NEFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTQmlnSW50NjRBcnJheSkg
XAorICAgIHYoYmlnSW50T2JqZWN0U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEJpZ0ludE9iamVj
dCkgXAorICAgIHYoYmlnVWludDY0QXJyYXlTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNCaWdV
aW50NjRBcnJheSkgXAorICAgIHYoYm9vbGVhbk9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxUeXBl
LCBCb29sZWFuT2JqZWN0KSBcCisgICAgdihib3VuZEZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUsIEpTQm91bmRGdW5jdGlvbikgXAorICAgIHYoY2FsbGJhY2tDb25zdHJ1Y3RvclNwYWNl
LCBjYWxsYmFja0NvbnN0cnVjdG9ySGVhcENlbGxUeXBlLCBKU0NhbGxiYWNrQ29uc3RydWN0b3Ip
IFwKKyAgICB2KGNhbGxiYWNrR2xvYmFsT2JqZWN0U3BhY2UsIGNhbGxiYWNrR2xvYmFsT2JqZWN0
SGVhcENlbGxUeXBlLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PikgXAorICAgIHYo
Y2FsbGJhY2tGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU0NhbGxiYWNrRnVuY3Rp
b24pIFwKKyAgICB2KGNhbGxiYWNrT2JqZWN0U3BhY2UsIGNhbGxiYWNrT2JqZWN0SGVhcENlbGxU
eXBlLCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+KSBcCisgICAgdihjdXN0b21H
ZXR0ZXJGdW5jdGlvblNwYWNlLCBjdXN0b21HZXR0ZXJGdW5jdGlvbkhlYXBDZWxsVHlwZSwgSlND
dXN0b21HZXR0ZXJGdW5jdGlvbikgXAorICAgIHYoY3VzdG9tU2V0dGVyRnVuY3Rpb25TcGFjZSwg
Y3VzdG9tU2V0dGVyRnVuY3Rpb25IZWFwQ2VsbFR5cGUsIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24p
IFwKKyAgICB2KGRhdGFWaWV3U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTRGF0YVZpZXcpIFwK
KyAgICB2KGRlYnVnZ2VyU2NvcGVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgRGVidWdnZXJTY29w
ZSkgXAorICAgIHYoZXJyb3JJbnN0YW5jZVNwYWNlLCBlcnJvckluc3RhbmNlSGVhcENlbGxUeXBl
LCBFcnJvckluc3RhbmNlKSBcCisgICAgdihmaW5hbGl6YXRpb25SZWdpc3RyeVNwYWNlLCBmaW5h
bGl6YXRpb25SZWdpc3RyeUNlbGxUeXBlLCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5KSBcCisgICAg
dihmbG9hdDMyQXJyYXlTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNGbG9hdDMyQXJyYXkpIFwK
KyAgICB2KGZsb2F0NjRBcnJheVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU0Zsb2F0NjRBcnJh
eSkgXAorICAgIHYoZnVuY3Rpb25SYXJlRGF0YVNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENl
bGxUeXBlLCBGdW5jdGlvblJhcmVEYXRhKSBcCisgICAgdihnZW5lcmF0b3JTcGFjZSwgY2VsbEhl
YXBDZWxsVHlwZSwgSlNHZW5lcmF0b3IpIFwKKyAgICB2KGdsb2JhbE9iamVjdFNwYWNlLCBnbG9i
YWxPYmplY3RIZWFwQ2VsbFR5cGUsIEpTR2xvYmFsT2JqZWN0KSBcCisgICAgdihpbmplY3RlZFNj
cmlwdEhvc3RTcGFjZSwgaW5qZWN0ZWRTY3JpcHRIb3N0U3BhY2VIZWFwQ2VsbFR5cGUsIEluc3Bl
Y3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3QpIFwKKyAgICB2KGludDhBcnJheVNwYWNlLCBjZWxs
SGVhcENlbGxUeXBlLCBKU0ludDhBcnJheSkgXAorICAgIHYoaW50MTZBcnJheVNwYWNlLCBjZWxs
SGVhcENlbGxUeXBlLCBKU0ludDE2QXJyYXkpIFwKKyAgICB2KGludDMyQXJyYXlTcGFjZSwgY2Vs
bEhlYXBDZWxsVHlwZSwgSlNJbnQzMkFycmF5KSBcCisgICAgdihpbnRsQ29sbGF0b3JTcGFjZSwg
aW50bENvbGxhdG9ySGVhcENlbGxUeXBlLCBJbnRsQ29sbGF0b3IpIFwKKyAgICB2KGludGxEYXRl
VGltZUZvcm1hdFNwYWNlLCBpbnRsRGF0ZVRpbWVGb3JtYXRIZWFwQ2VsbFR5cGUsIEludGxEYXRl
VGltZUZvcm1hdCkgXAorICAgIHYoaW50bERpc3BsYXlOYW1lc1NwYWNlLCBpbnRsRGlzcGxheU5h
bWVzSGVhcENlbGxUeXBlLCBJbnRsRGlzcGxheU5hbWVzKSBcCisgICAgdihpbnRsTGlzdEZvcm1h
dFNwYWNlLCBpbnRsTGlzdEZvcm1hdEhlYXBDZWxsVHlwZSwgSW50bExpc3RGb3JtYXQpIFwKKyAg
ICB2KGludGxMb2NhbGVTcGFjZSwgaW50bExvY2FsZUhlYXBDZWxsVHlwZSwgSW50bExvY2FsZSkg
XAorICAgIHYoaW50bE51bWJlckZvcm1hdFNwYWNlLCBpbnRsTnVtYmVyRm9ybWF0SGVhcENlbGxU
eXBlLCBJbnRsTnVtYmVyRm9ybWF0KSBcCisgICAgdihpbnRsUGx1cmFsUnVsZXNTcGFjZSwgaW50
bFBsdXJhbFJ1bGVzSGVhcENlbGxUeXBlLCBJbnRsUGx1cmFsUnVsZXMpIFwKKyAgICB2KGludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZSwgaW50bFJlbGF0aXZlVGltZUZvcm1hdEhlYXBDZWxsVHlw
ZSwgSW50bFJlbGF0aXZlVGltZUZvcm1hdCkgXAorICAgIHYoaW50bFNlZ21lbnRJdGVyYXRvclNw
YWNlLCBpbnRsU2VnbWVudEl0ZXJhdG9ySGVhcENlbGxUeXBlLCBJbnRsU2VnbWVudEl0ZXJhdG9y
KSBcCisgICAgdihpbnRsU2VnbWVudGVyU3BhY2UsIGludGxTZWdtZW50ZXJIZWFwQ2VsbFR5cGUs
IEludGxTZWdtZW50ZXIpIFwKKyAgICB2KGludGxTZWdtZW50c1NwYWNlLCBpbnRsU2VnbWVudHNI
ZWFwQ2VsbFR5cGUsIEludGxTZWdtZW50cykgXAorICAgIHYoamF2YVNjcmlwdENhbGxGcmFtZVNw
YWNlLCBqYXZhU2NyaXB0Q2FsbEZyYW1lSGVhcENlbGxUeXBlLCBJbnNwZWN0b3I6OkpTSmF2YVNj
cmlwdENhbGxGcmFtZSkgXAorICAgIHYoanNNb2R1bGVSZWNvcmRTcGFjZSwganNNb2R1bGVSZWNv
cmRIZWFwQ2VsbFR5cGUsIEpTTW9kdWxlUmVjb3JkKSBcCisgICAgdihtYXBCdWNrZXRTcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgSlNNYXA6OkJ1Y2tldFR5cGUpIFwKKyAgICB2KG1hcEl0ZXJhdG9y
U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTTWFwSXRlcmF0b3IpIFwKKyAgICB2KG1hcFNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLCBKU01hcCkgXAorICAgIHYobW9kdWxlTmFtZXNwYWNlT2JqZWN0
U3BhY2UsIG1vZHVsZU5hbWVzcGFjZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QpIFwKKyAgICB2KG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1bmN0
aW9uSGVhcENlbGxUeXBlLCBKU05hdGl2ZVN0ZEZ1bmN0aW9uKSBcCisgICAgdihwcm94eU9iamVj
dFNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eU9iamVjdCkgXAorICAgIHYocHJveHlSZXZv
a2VTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgUHJveHlSZXZva2UpIFwKKyAgICB2KHJlbW90ZUZ1
bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTUmVtb3RlRnVuY3Rpb24pIFwKKyAgICB2
KHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUs
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKSBcCisgICAgdihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFj
ZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMp
IFwKKyAgICB2KHNjcmlwdEZldGNoZXJTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZSwgSlNTY3JpcHRGZXRjaGVyKSBcCisgICAgdihzZXRCdWNrZXRTcGFjZSwgY2VsbEhlYXBDZWxs
VHlwZSwgSlNTZXQ6OkJ1Y2tldFR5cGUpIFwKKyAgICB2KHNldEl0ZXJhdG9yU3BhY2UsIGNlbGxI
ZWFwQ2VsbFR5cGUsIEpTU2V0SXRlcmF0b3IpIFwKKyAgICB2KHNldFNwYWNlLCBjZWxsSGVhcENl
bGxUeXBlLCBKU1NldCkgXAorICAgIHYoc2hhZG93UmVhbG1TcGFjZSwgY2VsbEhlYXBDZWxsVHlw
ZSwgU2hhZG93UmVhbG1PYmplY3QpIFwKKyAgICB2KHN0cmljdEV2YWxBY3RpdmF0aW9uU3BhY2Us
IGNlbGxIZWFwQ2VsbFR5cGUsIFN0cmljdEV2YWxBY3RpdmF0aW9uKSBcCisgICAgdihzdHJpbmdJ
dGVyYXRvclNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU1N0cmluZ0l0ZXJhdG9yKSBcCisgICAg
dihzb3VyY2VDb2RlU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEpTU291cmNl
Q29kZSkgXAorICAgIHYoc3ltYm9sU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUs
IFN5bWJvbCkgXAorICAgIHYoc3ltYm9sT2JqZWN0U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFN5
bWJvbE9iamVjdCkgXAorICAgIHYodGVtcGxhdGVPYmplY3REZXNjcmlwdG9yU3BhY2UsIGRlc3Ry
dWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKSBcCisg
ICAgdih0ZW1wb3JhbENhbGVuZGFyU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFRlbXBvcmFsQ2Fs
ZW5kYXIpIFwKKyAgICB2KHRlbXBvcmFsRHVyYXRpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwg
VGVtcG9yYWxEdXJhdGlvbikgXAorICAgIHYodGVtcG9yYWxJbnN0YW50U3BhY2UsIGNlbGxIZWFw
Q2VsbFR5cGUsIFRlbXBvcmFsSW5zdGFudCkgXAorICAgIHYodGVtcG9yYWxQbGFpblRpbWVTcGFj
ZSwgY2VsbEhlYXBDZWxsVHlwZSwgVGVtcG9yYWxQbGFpblRpbWUpIFwKKyAgICB2KHRlbXBvcmFs
VGltZVpvbmVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgVGVtcG9yYWxUaW1lWm9uZSkgXAorICAg
IHYodWludDhBcnJheVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU1VpbnQ4QXJyYXkpIFwKKyAg
ICB2KHVpbnQ4Q2xhbXBlZEFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTVWludDhDbGFt
cGVkQXJyYXkpIFwKKyAgICB2KHVpbnQxNkFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpT
VWludDE2QXJyYXkpIFwKKyAgICB2KHVpbnQzMkFycmF5U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUs
IEpTVWludDMyQXJyYXkpIFwKKyAgICB2KHVubGlua2VkRXZhbENvZGVCbG9ja1NwYWNlLCBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2spIFwKKyAgICB2
KHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxs
VHlwZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykgXAorICAgIHYodW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaykgXAorICAgIHYodW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jaykgXAorICAgIHYod2Vha09iamVjdFJlZlNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBK
U1dlYWtPYmplY3RSZWYpIFwKKyAgICB2KHdlYWtNYXBTcGFjZSwgd2Vha01hcEhlYXBDZWxsVHlw
ZSwgSlNXZWFrTWFwKSBcCisgICAgdih3ZWFrU2V0U3BhY2UsIHdlYWtTZXRIZWFwQ2VsbFR5cGUs
IEpTV2Vha1NldCkgXAorICAgIHYod2l0aFNjb3BlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpT
V2l0aFNjb3BlKSBcCisgICAgXAorICAgIEZPUl9FQUNIX0pTQ19XRUJBU1NFTUJMWV9EWU5BTUlD
X0lTT19TVUJTUEFDRSh2KQorCisKIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJv
dGVjdENvdW50U2V0OwogdHlwZWRlZiBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4gVHlwZUNv
dW50U2V0OwogCkBAIC00MDYsNiArNTczLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
SGFuZGxlU2V0OwogICAgIGZyaWVuZCBjbGFzcyBIZWFwVXRpbDsKICAgICBmcmllbmQgY2xhc3Mg
SGVhcFZlcmlmaWVyOworICAgIGZyaWVuZCBjbGFzcyBJc29TdWJzcGFjZVBlclZNOwogICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsK
QEAgLTQyNSw2ICs1OTMsOCBAQCBwcml2YXRlOgogICAgIGNsYXNzIEhlYXBUaHJlYWQ7CiAgICAg
ZnJpZW5kIGNsYXNzIEhlYXBUaHJlYWQ7CiAKKyAgICBmcmllbmQgY2xhc3MgR0NDbGllbnQ6Okhl
YXA7CisKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtaW5FeHRyYU1lbW9yeSA9IDI1NjsK
ICAgICAKICAgICBjbGFzcyBDRmluYWxpemVyT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRs
ZU93bmVyIHsKQEAgLTQzNSw2ICs2MDUsOCBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGZpbmFs
aXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgfTsKIAorICAg
IExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZShzaXplX3QpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5U2xvd0Nhc2Uo
c2l6ZV90KTsKICAgICAKQEAgLTU3NSw2ICs3NDcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgdmVyaWZ5R0MoKTsKIAorICAgIExvY2sgbV9sb2NrOwogICAgIGNvbnN0IEhlYXBUeXBlIG1f
aGVhcFR5cGU7CiAgICAgTXV0YXRvclN0YXRlIG1fbXV0YXRvclN0YXRlIHsgTXV0YXRvclN0YXRl
OjpSdW5uaW5nIH07CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTgzNSw0MCArMTAw
OCwxMyBAQCBwdWJsaWM6CiAgICAgQ29tcGxldGVTdWJzcGFjZSB2YXJpYWJsZVNpemVkQ2VsbFNw
YWNlOyAvLyBGSVhNRTogVGhpcyBzcGFjZSBpcyBwcm9ibGVtYXRpYyBiZWNhdXNlIHdlIGhhdmUg
dGhpbmdzIGluIGhlcmUgbGlrZSBEaXJlY3RBcmd1bWVudHMgYW5kIFNjb3BlZEFyZ3VtZW50czsg
dGhvc2Ugc2hvdWxkIGJlIHNwbGl0IGludG8gSlNWYWx1ZU9PQiBjZWxscyBhbmQgSlNWYWx1ZVN0
cmljdCBhdXhpbGlhcmllcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4Mjg1OAogICAgIENvbXBsZXRlU3Vic3BhY2UgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAK
LSAgICBJc29TdWJzcGFjZSBhcnJheVNwYWNlOwotICAgIElzb1N1YnNwYWNlIGJpZ0ludFNwYWNl
OwotICAgIElzb1N1YnNwYWNlIGNhbGxlZVNwYWNlOwotICAgIElzb1N1YnNwYWNlIGNsb25lZEFy
Z3VtZW50c1NwYWNlOwotICAgIElzb1N1YnNwYWNlIGN1c3RvbUdldHRlclNldHRlclNwYWNlOwot
ICAgIElzb1N1YnNwYWNlIGRhdGVJbnN0YW5jZVNwYWNlOwotICAgIElzb1N1YnNwYWNlIGRvbUF0
dHJpYnV0ZUdldHRlclNldHRlclNwYWNlOwotICAgIElzb1N1YnNwYWNlIGV4Y2VwdGlvblNwYWNl
OwotICAgIElzb1N1YnNwYWNlIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZTsKLSAgICBJ
c29TdWJzcGFjZSBmdW5jdGlvblNwYWNlOwotICAgIElzb1N1YnNwYWNlIGdldHRlclNldHRlclNw
YWNlOwotICAgIElzb1N1YnNwYWNlIGdsb2JhbExleGljYWxFbnZpcm9ubWVudFNwYWNlOwotICAg
IElzb1N1YnNwYWNlIGludGVybmFsRnVuY3Rpb25TcGFjZTsKLSAgICBJc29TdWJzcGFjZSBqc1By
b3h5U3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgbmF0aXZlRXhlY3V0YWJsZVNwYWNlOwotICAgIElz
b1N1YnNwYWNlIG51bWJlck9iamVjdFNwYWNlOwotICAgIElzb1N1YnNwYWNlIHBsYWluT2JqZWN0
U3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgcHJvbWlzZVNwYWNlOwotICAgIElzb1N1YnNwYWNlIHBy
b3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZTsKLSAgICBJc29TdWJzcGFjZSBwcm9wZXJ0eVRhYmxl
U3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgcmVnRXhwU3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgcmVn
RXhwT2JqZWN0U3BhY2U7Ci0gICAgSXNvU3Vic3BhY2Ugcm9wZVN0cmluZ1NwYWNlOwotICAgIElz
b1N1YnNwYWNlIHNjb3BlZEFyZ3VtZW50c1NwYWNlOwotICAgIElzb1N1YnNwYWNlIHNwYXJzZUFy
cmF5VmFsdWVNYXBTcGFjZTsKLSAgICBJc29TdWJzcGFjZSBzdHJpbmdTcGFjZTsKLSAgICBJc29T
dWJzcGFjZSBzdHJpbmdPYmplY3RTcGFjZTsKLSAgICBJc29TdWJzcGFjZSBzdHJ1Y3R1cmVDaGFp
blNwYWNlOwotICAgIElzb1N1YnNwYWNlIHN0cnVjdHVyZVJhcmVEYXRhU3BhY2U7Ci0gICAgSXNv
U3Vic3BhY2Ugc3RydWN0dXJlU3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgYnJhbmRlZFN0cnVjdHVy
ZVNwYWNlOwotICAgIElzb1N1YnNwYWNlIHN5bWJvbFRhYmxlU3BhY2U7CisjZGVmaW5lIERFQ0xB
UkVfSVNPX1NVQlNQQUNFKG5hbWUsIGhlYXBDZWxsVHlwZSwgdHlwZSkgXAorICAgIElzb1N1YnNw
YWNlIG5hbWU7CisKKyAgICBGT1JfRUFDSF9KU0NfSVNPX1NVQlNQQUNFKERFQ0xBUkVfSVNPX1NV
QlNQQUNFKQorI3VuZGVmIERFQ0xBUkVfSVNPX1NVQlNQQUNFCiAKLSNkZWZpbmUgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihuYW1lKSBcCisjZGVmaW5lIERFRklORV9EWU5BTUlD
X0lTT19TVUJTUEFDRV9NRU1CRVIobmFtZSwgaGVhcENlbGxUeXBlLCB0eXBlKSBcCiAgICAgdGVt
cGxhdGU8U3Vic3BhY2VBY2Nlc3MgbW9kZT4gXAogICAgIElzb1N1YnNwYWNlKiBuYW1lKCkgXAog
ICAgIHsgXApAQCAtODc5LDExMSArMTAyNSw4IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBJc29TdWJzcGFjZSogbmFtZSMjU2xvdygpOyBcCiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPiBtXyMjbmFtZTsKIAotCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFwaVdyYXBwZXJPYmplY3RTcGFjZSkK
LSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG9iakNDYWxsYmFja0Z1bmN0
aW9uU3BhY2UpCi0jZW5kaWYKLSNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAotICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXBpV3JhcHBlck9iamVjdFNwYWNlKQotICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNjQ2FsbGJhY2tGdW5jdGlvblNw
YWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY2FsbGJhY2tBUElX
cmFwcGVyR2xvYmFsT2JqZWN0U3BhY2UpCi0jZW5kaWYKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGFwaUdsb2JhbE9iamVjdFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIoYXBpVmFsdWVXcmFwcGVyU3BhY2UpCi0gICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcnJheUJ1ZmZlclNwYWNlKQotICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXJyYXlJdGVyYXRvclNwYWNlKQotICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXN5bmNHZW5lcmF0b3JTcGFjZSkKLSAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGJpZ0ludDY0QXJyYXlTcGFjZSkKLSAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGJpZ0ludE9iamVjdFNwYWNlKQot
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnVWludDY0QXJyYXlTcGFj
ZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGJvb2xlYW5PYmplY3RT
cGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGJvdW5kRnVuY3Rp
b25TcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGNhbGxiYWNr
Q29uc3RydWN0b3JTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KGNhbGxiYWNrR2xvYmFsT2JqZWN0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihjYWxsYmFja0Z1bmN0aW9uU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihjYWxsYmFja09iamVjdFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIoY3VzdG9tR2V0dGVyRnVuY3Rpb25TcGFjZSkKLSAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGN1c3RvbVNldHRlckZ1bmN0aW9uU3BhY2Up
Ci0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihkYXRhVmlld1NwYWNlKQot
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZGVidWdnZXJTY29wZVNwYWNl
KQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZXJyb3JJbnN0YW5jZVNw
YWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZmxvYXQzMkFycmF5
U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihmbG9hdDY0QXJy
YXlTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGZ1bmN0aW9u
UmFyZURhdGFTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGdl
bmVyYXRvclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZ2xv
YmFsT2JqZWN0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihp
bmplY3RlZFNjcmlwdEhvc3RTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGludDhBcnJheVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50MTZBcnJheVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50MzJBcnJheVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoamF2YVNjcmlwdENhbGxGcmFtZVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoanNNb2R1bGVSZWNvcmRTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKG1hcEJ1Y2tldFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIobWFwSXRlcmF0b3JTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKG1hcFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIobW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQotICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkKLSAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2UpCi0gICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNwYWNlKQotICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1lbnRzVGFibGVT
cGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNo
UGFyYW1ldGVyc1NwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
c2NyaXB0RmV0Y2hlclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc2V0QnVja2V0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihzZXRJdGVyYXRvclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc2V0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzaGFk
b3dSZWFsbVNwYWNlKTsKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHN0
cmljdEV2YWxBY3RpdmF0aW9uU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihzdHJpbmdJdGVyYXRvclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoc291cmNlQ29kZVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoc3ltYm9sU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihzeW1ib2xPYmplY3RTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvclNwYWNlKQotICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxDYWxlbmRhclNwYWNlKQotICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxEdXJhdGlvblNwYWNlKQotICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxJbnN0YW50U3BhY2Up
Ci0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbFBsYWluVGlt
ZVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxU
aW1lWm9uZVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodWlu
dDhBcnJheVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodWlu
dDhDbGFtcGVkQXJyYXlTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHVpbnQxNkFycmF5U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUih1aW50MzJBcnJheVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIodW5saW5rZWRFdmFsQ29kZUJsb2NrU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUih1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3BhY2UpCi0gICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2tTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9ja1NwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoZmluYWxpemF0aW9uUmVnaXN0cnlTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHdlYWtPYmplY3RSZWZTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYWtTZXRTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHdlYWtNYXBTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdpdGhTY29wZVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoaW50bENvbGxhdG9yU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnRsRGF0ZVRpbWVGb3JtYXRTcGFjZSkKLSAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxEaXNwbGF5TmFtZXNTcGFjZSkKLSAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxMaXN0Rm9ybWF0U3BhY2UpCi0gICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsTG9jYWxlU3BhY2UpCi0gICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsTnVtYmVyRm9ybWF0U3BhY2Up
Ci0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsUGx1cmFsUnVsZXNT
cGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxSZWxhdGl2
ZVRpbWVGb3JtYXRTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKGludGxTZWdtZW50ZXJTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGludGxTZWdtZW50c1NwYWNlKQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzVG9XYXNtSUNDYWxsZWVT
cGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5
RXhjZXB0aW9uU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3
ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUih3ZWJBc3NlbWJseUdsb2JhbFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlJbnN0YW5jZVNwYWNlKQotICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNZW1vcnlTcGFjZSkKLSAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UpCi0g
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNz
ZW1ibHlUYWJsZVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
d2ViQXNzZW1ibHlUYWdTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UpCi0jZW5kaWYKLQotI3VuZGVmIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIKKyAgICBGT1JfRUFDSF9KU0NfRFlOQU1J
Q19JU09fU1VCU1BBQ0UoREVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUikKKyN1bmRl
ZiBERUZJTkVfRFlOQU1JQ19JU09fU1VCU1BBQ0VfTUVNQkVSCiAgICAgCiAgICAgSXNvQ2VsbFNl
dCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhDb25zdHJhaW50czsKICAgICBJc29DZWxs
U2V0IGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnM7CkBAIC0xMDIyLDM0
ICsxMDY1LDk0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoU3Bh
Y2VBbmRTZXQsIHNldCkpOwogICAgICAgICB9CiAgICAgfTsKLSAgICAKLSAgICBTcGFjZUFuZFNl
dCBjb2RlQmxvY2tTcGFjZTsKKworICAgIFNwYWNlQW5kU2V0IGNvZGVCbG9ja1NwYWNlQW5kU2V0
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hDb2RlQmxv
Y2tTcGFjZShjb25zdCBGdW5jJiBmdW5jKQogICAgIHsKLSAgICAgICAgZnVuYyhjb2RlQmxvY2tT
cGFjZSk7CisgICAgICAgIGZ1bmMoY29kZUJsb2NrU3BhY2VBbmRTZXQpOwogICAgIH0KIAogICAg
IERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2Up
CiAgICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVIobW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGVTcGFjZSkKLSAgICBTcGFjZUFuZFNldCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsK
LSAgICBTcGFjZUFuZFNldCBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlOworICAgIFNwYWNlQW5kU2V0
IGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0OworICAgIFNwYWNlQW5kU2V0IHByb2dyYW1F
eGVjdXRhYmxlU3BhY2VBbmRTZXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHZvaWQgZm9yRWFjaFNjcmlwdEV4ZWN1dGFibGVTcGFjZShjb25zdCBGdW5jJiBmdW5jKQogICAg
IHsKICAgICAgICAgaWYgKG1fZXZhbEV4ZWN1dGFibGVTcGFjZSkKICAgICAgICAgICAgIGZ1bmMo
Km1fZXZhbEV4ZWN1dGFibGVTcGFjZSk7Ci0gICAgICAgIGZ1bmMoZnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2UpOworICAgICAgICBmdW5jKGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlQW5kU2V0KTsKICAg
ICAgICAgaWYgKG1fbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKICAgICAgICAgICAgIGZ1
bmMoKm1fbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSk7Ci0gICAgICAgIGZ1bmMocHJvZ3Jh
bUV4ZWN1dGFibGVTcGFjZSk7CisgICAgICAgIGZ1bmMocHJvZ3JhbUV4ZWN1dGFibGVTcGFjZUFu
ZFNldCk7CiAgICAgfQogCi0gICAgU3BhY2VBbmRTZXQgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGVTcGFjZTsKKyAgICBTcGFjZUFuZFNldCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
QW5kU2V0OwogCisgICAgVmVjdG9yPElzb1N1YnNwYWNlUGVyVk0qPiBwZXJWTUlzb1N1YnNwYWNl
czsKICN1bmRlZiBEWU5BTUlDX1NQQUNFX0FORF9TRVRfREVGSU5FX01FTUJFUgogfTsKIAorbmFt
ZXNwYWNlIEdDQ2xpZW50IHsKKworY2xhc3MgSGVhcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSGVhcCk7CitwdWJsaWM6CisgICAgSGVhcChKU0M6OkhlYXAmKTsKKyAgICB+SGVhcCgpOwor
CisgICAgVk0mIHZtKCkgY29uc3Q7CisgICAgSlNDOjpIZWFwJiBzZXJ2ZXIoKSB7IHJldHVybiBt
X3NlcnZlcjsgfQorCisgICAgLy8gRklYTUUgR2xvYmFsR0M6IG5lZWQgYSBHQ0NsaWVudDo6SGVh
cDo6bGFzdENoYW5jZVRvRmluYWxpemUoKSBhbmQgaW4gdGhlcmUsCisgICAgLy8gcmVsaW5xdWlz
aCBtZW1vcnkgZnJvbSB0aGUgSXNvU3Vic3BhY2UgTG9jYWxBbGxvY2F0b3JzIGJhY2sgdG8gdGhl
IHNlcnZlci4KKyAgICAvLyBDdXJyZW50bHksIHRoaXMgaXMgYmVpbmcgaGFuZGxlZCBieSBCbG9j
a0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmdGb3JHb29kKCkuCisKK3ByaXZhdGU6CisgICAgSlND
OjpIZWFwJiBtX3NlcnZlcjsKKworI2RlZmluZSBERUNMQVJFX0lTT19TVUJTUEFDRShuYW1lLCBo
ZWFwQ2VsbFR5cGUsIHR5cGUpIFwKKyAgICBJc29TdWJzcGFjZSBuYW1lOworCisgICAgRk9SX0VB
Q0hfSlNDX0lTT19TVUJTUEFDRShERUNMQVJFX0lTT19TVUJTUEFDRSkKKyN1bmRlZiBERUNMQVJF
X0lTT19TVUJTUEFDRQorCisjZGVmaW5lIERFRklORV9EWU5BTUlDX0lTT19TVUJTUEFDRV9NRU1C
RVJfSU1QTChuYW1lLCBoZWFwQ2VsbFR5cGUsIHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTxTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBcCisgICAgSXNvU3Vic3BhY2UqIG5hbWUoKSBcCisgICAgeyBcCisgICAg
ICAgIGlmIChtXyMjbmFtZSB8fCBtb2RlID09IFN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkp
IFwKKyAgICAgICAgICAgIHJldHVybiBtXyMjbmFtZS5nZXQoKTsgXAorICAgICAgICByZXR1cm4g
bmFtZSMjU2xvdygpOyBcCisgICAgfSBcCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3Bh
Y2UqIG5hbWUjI1Nsb3coKTsgXAorICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4gbV8j
I25hbWU7CisKKyNkZWZpbmUgREVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUihuYW1l
KSBcCisgICAgREVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUl9JTVBMKG5hbWUsIHVu
dXNlZCwgdW51c2VkMikKKworICAgIEZPUl9FQUNIX0pTQ19EWU5BTUlDX0lTT19TVUJTUEFDRShE
RUZJTkVfRFlOQU1JQ19JU09fU1VCU1BBQ0VfTUVNQkVSX0lNUEwpCisKKyAgICBERUZJTkVfRFlO
QU1JQ19JU09fU1VCU1BBQ0VfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3BhY2UpCisgICAgREVGSU5F
X0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUihtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNl
KQorCisjdW5kZWYgREVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUl9JTVBMCisjdW5k
ZWYgREVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX01FTUJFUgorCisgICAgSXNvU3Vic3BhY2Ug
Y29kZUJsb2NrU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7
CisgICAgSXNvU3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFj
ZSB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworCisgICAgVmVjdG9yPElzb1N1YnNw
YWNlUGVyVk0qPiBwZXJWTUlzb1N1YnNwYWNlczsKKworICAgIGZyaWVuZCBjbGFzcyBKU0M6OlZN
OworICAgIGZyaWVuZCBjbGFzcyBKU0M6Oklzb1N1YnNwYWNlUGVyVk07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBHQ0NsaWVudAorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
MCw0ICsyNzAsMTMgQEAgdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYwog
ICAgICAgICBmdW5jKCp2aXNpdG9yKTsKIH0KIAorbmFtZXNwYWNlIEdDQ2xpZW50IHsKKworQUxX
QVlTX0lOTElORSBWTSYgSGVhcDo6dm0oKSBjb25zdAoreworICAgIHJldHVybiAqYml0d2lzZV9j
YXN0PFZNKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0Yo
Vk0sIGNsaWVudEhlYXApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgR0NDbGllbnQKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogSXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVh
cCwgY29uc3QgSGVhcENlbGxUeXBlJiBoZWFwQ2VsbFR5cGUsIHNpemVfdCBzaXplLCB1aW50OF90
IG51bWJlck9mTG93ZXJUaWVyQ2VsbHMsIHN0ZDo6dW5pcXVlX3B0cjxJc29NZW1vcnlBbGxvY2F0
b3JCYXNlPiYmIGFsbG9jYXRvcikKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAgLCBt
X2RpcmVjdG9yeShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXpl
PihzaXplKSkKLSAgICAsIG1fbG9jYWxBbGxvY2F0b3IoJm1fZGlyZWN0b3J5KQogICAgICwgbV9p
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKGFsbG9jYXRvciA/IFdURk1vdmUoYWxsb2NhdG9yKSA6
IG1ha2VVbmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4obmFtZSkpCiB7CiAgICAgbV9y
ZW1haW5pbmdMb3dlclRpZXJDZWxsQ291bnQgPSBudW1iZXJPZkxvd2VyVGllckNlbGxzOwpAQCAt
MTE5LDUgKzExOCwxNCBAQCB2b2lkIElzb1N1YnNwYWNlOjpkZXN0cm95TG93ZXJUaWVyRnJlZUxp
CiAgICAgfSk7CiB9CiAKK25hbWVzcGFjZSBHQ0NsaWVudCB7CisKK0lzb1N1YnNwYWNlOjpJc29T
dWJzcGFjZShKU0M6Oklzb1N1YnNwYWNlJiBzZXJ2ZXIpCisgICAgOiBtX2xvY2FsQWxsb2NhdG9y
KCZzZXJ2ZXIubV9kaXJlY3RvcnkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEdDQ2xpZW50CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNSwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgSXNvQ2VsbFNldDsKIAorbmFtZXNwYWNlIEdDQ2xpZW50IHsK
K2NsYXNzIElzb1N1YnNwYWNlOworfQorCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJz
cGFjZSB7CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiwgY29uc3QgSGVhcENlbGxUeXBlJiwgc2l6ZV90IHNpemUsIHVpbnQ4X3Qg
bnVtYmVyT2ZMb3dlclRpZXJDZWxscywgc3RkOjp1bmlxdWVfcHRyPElzb01lbW9yeUFsbG9jYXRv
ckJhc2U+JiYgPSBudWxscHRyKTsKQEAgLTQyLDEwICs0Niw2IEBAIHB1YmxpYzoKIAogICAgIHNp
emVfdCBjZWxsU2l6ZSgpIHsgcmV0dXJuIG1fZGlyZWN0b3J5LmNlbGxTaXplKCk7IH0KIAotICAg
IEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKLQotICAg
IHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSk7Ci0KICAgICB2b2lkIHN3ZWVwTG93ZXJUaWVyQ2VsbChQcmVjaXNlQWxs
b2NhdGlvbiopOwogICAgIHZvaWQgY2xlYXJJc29DZWxsU2V0Qml0KFByZWNpc2VBbGxvY2F0aW9u
Kik7CiAKQEAgLTU4LDI0ICs1OCw0NiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIElzb0NlbGxTZXQ7CisgICAgZnJpZW5kIGNsYXNzIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZTsKICAgICAKICAgICB2b2lkIGRpZFJlc2l6ZUJpdHModW5zaWduZWQgbmV3U2l6ZSkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkaWRSZW1vdmVCbG9jayh1bnNpZ25lZCBibG9ja0luZGV4KSBvdmVycmlk
ZTsKICAgICB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5k
bGUqKSBvdmVycmlkZTsKLSAgICAKKwogICAgIEJsb2NrRGlyZWN0b3J5IG1fZGlyZWN0b3J5Owot
ICAgIExvY2FsQWxsb2NhdG9yIG1fbG9jYWxBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PElzb01lbW9yeUFsbG9jYXRvckJhc2U+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAg
ICBTZW50aW5lbExpbmtlZExpc3Q8UHJlY2lzZUFsbG9jYXRpb24sIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxQcmVjaXNlQWxsb2NhdGlvbj4+IG1fbG93ZXJUaWVyRnJlZUxpc3Q7CiAgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PElzb0NlbGxTZXQsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0
Pj4gbV9jZWxsU2V0czsKIH07CiAKKworbmFtZXNwYWNlIEdDQ2xpZW50IHsKKworY2xhc3MgSXNv
U3Vic3BhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElzb1N1YnNwYWNlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJ
c29TdWJzcGFjZShKU0M6Oklzb1N1YnNwYWNlJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfklz
b1N1YnNwYWNlKCkgPSBkZWZhdWx0OworCisgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4g
bV9sb2NhbEFsbG9jYXRvci5jZWxsU2l6ZSgpOyB9CisKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
Rm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYs
IHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCitw
cml2YXRlOgorICAgIExvY2FsQWxsb2NhdG9yIG1fbG9jYWxBbGxvY2F0b3I7Cit9OworCiBBTFdB
WVNfSU5MSU5FIEFsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXpl
LCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpID09IGNlbGxTaXplKCkpOwog
ICAgIHJldHVybiBBbGxvY2F0b3IoJm1fbG9jYWxBbGxvY2F0b3IpOwogfQogCit9IC8vIG5hbWVz
cGFjZSBHQ0NsaWVudAorCiAjZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBDZWxs
VHlwZSwgdHlwZSkgKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcCksIChoZWFwQ2Vs
bFR5cGUpLCBzaXplb2YodHlwZSksIHR5cGU6Om51bWJlck9mTG93ZXJUaWVyQ2VsbHMpCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29T
dWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw2ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgR0NDbGllbnQgewor
CiBBTFdBWVNfSU5MSU5FIHZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShWTSYgdm0sIHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkgPT0gY2VsbFNpemUoKSk7
CkBAIC0zNSw2ICszNyw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9j
YXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit9IC8vIG5hbWVzcGFjZSBHQ0NsaWVudAorCiBp
bmxpbmUgdm9pZCBJc29TdWJzcGFjZTo6Y2xlYXJJc29DZWxsU2V0Qml0KFByZWNpc2VBbGxvY2F0
aW9uKiBwcmVjaXNlQWxsb2NhdGlvbikKIHsKICAgICB1bnNpZ25lZCBsb3dlclRpZXJJbmRleCA9
IHByZWNpc2VBbGxvY2F0aW9uLT5sb3dlclRpZXJJbmRleCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsMjUgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIElzb1N1YnNwYWNlUGVyVk06OkF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlIGZpbmFsIDogcHVi
bGljIElzb1N1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBBdXRvcmVtb3ZpbmdJc29TdWJzcGFjZShJ
c29TdWJzcGFjZVBlclZNJiBwZXJWTSwgQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBjb25zdCBI
ZWFwQ2VsbFR5cGUmIGhlYXBDZWxsVHlwZSwgc2l6ZV90IHNpemUpCi0gICAgICAgIDogSXNvU3Vi
c3BhY2UobmFtZSwgaGVhcCwgaGVhcENlbGxUeXBlLCBzaXplLCAvKiBudW1iZXJPZkxvd2VyVGll
ckNlbGxzICovIDApCi0gICAgICAgICwgbV9wZXJWTShwZXJWTSkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIH5BdXRvcmVtb3ZpbmdJc29TdWJzcGFjZSgpIGZpbmFsCi0gICAgewotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9wZXJWTS5tX2xvY2sgfTsKLSAgICAgICAgbV9wZXJWTS5tX3N1YnNw
YWNlUGVyVk0ucmVtb3ZlKCZzcGFjZSgpLmhlYXAoKS52bSgpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgSXNvU3Vic3BhY2VQZXJWTSYgbV9wZXJWTTsKLX07Ci0KLUlzb1N1YnNwYWNlUGVyVk06
Oklzb1N1YnNwYWNlUGVyVk0oRnVuY3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKFZNJik+IHN1YnNw
YWNlUGFyYW1ldGVycykKK0lzb1N1YnNwYWNlUGVyVk06Oklzb1N1YnNwYWNlUGVyVk0oRnVuY3Rp
b248U3Vic3BhY2VQYXJhbWV0ZXJzKEhlYXAmKT4gc3Vic3BhY2VQYXJhbWV0ZXJzKQogICAgIDog
bV9zdWJzcGFjZVBhcmFtZXRlcnMoV1RGTW92ZShzdWJzcGFjZVBhcmFtZXRlcnMpKQogewogfQpA
QCAtNTksMTYgKzQxLDUyIEBAIElzb1N1YnNwYWNlUGVyVk06On5Jc29TdWJzcGFjZVBlclZNKCkK
ICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KIAotSXNvU3Vic3BhY2UmIElzb1N1
YnNwYWNlUGVyVk06OmZvclZNKFZNJiB2bSkKK0lzb1N1YnNwYWNlJiBJc29TdWJzcGFjZVBlclZN
Ojppc29TdWJzcGFjZWZvckhlYXAoTG9ja0hvbGRlciYsIEhlYXAmIGhlYXApCiB7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zdWJzcGFjZVBlclZN
LmFkZCgmdm0sIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gbV9zdWJzcGFjZVBlckhlYXAu
YWRkKCZoZWFwLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgU3Vic3BhY2VQYXJhbWV0ZXJzIHBhcmFtcyA9IG1fc3Vic3BhY2VQYXJhbWV0ZXJzKHZtKTsK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBBdXRvcmVtb3ZpbmdJc29TdWJz
cGFjZSgqdGhpcywgcGFyYW1zLm5hbWUsIHZtLmhlYXAsICpwYXJhbXMuaGVhcENlbGxUeXBlLCBw
YXJhbXMuc2l6ZSk7CisgICAgICAgIFN1YnNwYWNlUGFyYW1ldGVycyBwYXJhbXMgPSBtX3N1YnNw
YWNlUGFyYW1ldGVycyhoZWFwKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5l
dyBJc29TdWJzcGFjZShwYXJhbXMubmFtZSwgaGVhcCwgKnBhcmFtcy5oZWFwQ2VsbFR5cGUsIHBh
cmFtcy5zaXplLCAwKTsKKworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcC5sb2NrKCkgfTsK
KyAgICAgICAgaGVhcC5wZXJWTUlzb1N1YnNwYWNlcy5hcHBlbmQodGhpcyk7CiAgICAgfQogICAg
IHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorR0NDbGllbnQ6Oklzb1N1YnNw
YWNlJiBJc29TdWJzcGFjZVBlclZNOjpjbGllbnRJc29TdWJzcGFjZWZvclZNKFZNJiB2bSkKK3sK
KyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgYXV0byByZXN1bHQgPSBtX2NsaWVu
dFN1YnNwYWNlUGVyVk0uYWRkKCZ2bSwgbnVsbHB0cik7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gKnJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CisKKyAgICBJc29TdWJzcGFjZSYgc3Vic3BhY2UgPSBpc29TdWJzcGFj
ZWZvckhlYXAobG9ja2VyLCB2bS5oZWFwKTsKKworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBuZXcgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKHN1YnNwYWNlKTsKKyAgICB2bS5jbGllbnRIZWFw
LnBlclZNSXNvU3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKKyAgICByZXR1cm4gKnJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgSXNvU3Vic3BhY2VQZXJWTTo6cmVsZWFzZUlzb1N1YnNw
YWNlKEhlYXAmIGhlYXApCit7CisgICAgSXNvU3Vic3BhY2UqIHN1YnNwYWNlOworICAgIHsKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBzdWJzcGFjZSA9IG1fc3Vi
c3BhY2VQZXJIZWFwLnRha2UoJmhlYXApOworICAgIH0KKyAgICBkZWxldGUgc3Vic3BhY2U7Cit9
CisKK3ZvaWQgSXNvU3Vic3BhY2VQZXJWTTo6cmVsZWFzZUNsaWVudElzb1N1YnNwYWNlKFZNJiB2
bSkKK3sKKyAgICBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIGNsaWVudFN1YnNwYWNlOworICAgIHsK
KyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBjbGllbnRTdWJzcGFj
ZSA9IG1fY2xpZW50U3Vic3BhY2VQZXJWTS50YWtlKCZ2bSk7CisgICAgfQorICAgIGRlbGV0ZSBj
bGllbnRTdWJzcGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMyLDEwICszMiwyMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgSGVhcDsKK2NsYXNzIFZNOworCiAvLyBUaGlzIGlzIGFuIGFwcHJvcHJpYXRlIHdheSB0byBz
dGFzaCBJc29TdWJzcGFjZXMgZm9yIHJhcmVseS11c2VkIGNsYXNzZXMgb3IgY2xhc3NlcyB0aGF0
IGFyZSBtb3N0bHkKIC8vIHN1cmUgdG8gYmUgbWFpbi10aHJlYWQtb25seS4gQnV0IGlmIGEgY2xh
c3MgdHlwaWNhbGx5IGdldHMgaW5zdGFudGlhdGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdAog
Ly8gb25jZSwgdGhlbiB0aGlzIGlzIG5vdCBncmVhdCwgYmVjYXVzZSBjb25jdXJyZW50IGFsbG9j
YXRpb25zIHdpbGwgcHJvYmFibHkgY29udGVuZCBvbiB0aGlzIHRoaW5nJ3MKIC8vIGxvY2suCisv
LworLy8gVXNhZ2U6IEEgSXNvU3Vic3BhY2VQZXJWTSBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQg
dXNpbmcgTmV2ZXJEZXN0cm95ZWQgaS5lLiBlYWNoIElzb1N1YnNwYWNlUGVyVk0KKy8vIGluc3Rh
bmNlIGlzIGltbW9ydGFsIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2Vzcy4gVGhlcmUgaXMgb25l
IElzb1N1YnNwYWNlIHR5cGUgcGVyIElzb1N1YnNwYWNlUGVyVk0uCisvLyBJc29TdWJzcGFjZVBl
clZNIGl0c2VsZiBpcyBhIGZhY3RvcnkgZm9yIHRob3NlIElzb1N1YnNwYWNlcyBwZXIgVk0gYW5k
IHBlciBIZWFwLiBJc29TdWJzcGFjZVBlclZNCisvLyBhbHNvIHNlcnZlcyBhcyB0aGUgbWFuYWdl
ciBvZiB0aGUgSXNvU3Vic3BhY2VzLiBDbGllbnQgVk1zIGFyZSByZXNwb25zaWJsZSBmb3IgY2Fs
bGluZworLy8gcmVsZWFzZUNsaWVudElzb1N1YnNwYWNlKCkgdG8gcmVsZWFzZSB0aGUgSXNvU3Vi
c3BhY2Ugd2hlbiB0aGUgVk0gc2h1dHMgZG93bi4gU2ltaWxhcmx5LCBpZiB0aGUKKy8vIEhlYXAg
aXMgbm90IGFuIGltbW9ydGFsIHNpbmdsZXRvbiBoZWFwICh3aGVuIGdsb2JhbCBHQyBpcyBlbmFi
bGVkKSwgdGhlIHBlciBIZWFwIElzb1N1YnNwYWNlIGFsc28KKy8vIG5lZWRzIHRvIGJlIHJlbGVh
c2VkIHdoZW4gdGhlIEhlYXAgaXMgZGVzdHJ1Y3RlZC4KIGNsYXNzIElzb1N1YnNwYWNlUGVyVk0g
ZmluYWwgewogcHVibGljOgogICAgIHN0cnVjdCBTdWJzcGFjZVBhcmFtZXRlcnMgewpAQCAtNTMs
MTggKzY0LDI0IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgfTsK
ICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZVBlclZNKEZ1bmN0aW9uPFN1
YnNwYWNlUGFyYW1ldGVycyhWTSYpPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3Bh
Y2VQZXJWTShGdW5jdGlvbjxTdWJzcGFjZVBhcmFtZXRlcnMoSGVhcCYpPik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgfklzb1N1YnNwYWNlUGVyVk0oKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBJc29TdWJzcGFjZSYgZm9yVk0oVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UmIGNsaWVudElzb1N1YnNwYWNlZm9yVk0oVk0mKTsKKworICAgIC8v
IEZJWE1FOiBHbG9iYWxHQzogdGhpcyBpcyBvbmx5IG5lZWRlZCB1bnRpbCB3ZSBoYXZlIGEgaW1t
b3J0YWwgc2luZ2xldG9uIGhlYXAgd2l0aCBHbG9iYWxHQy4KKyAgICB2b2lkIHJlbGVhc2VJc29T
dWJzcGFjZShIZWFwJik7CisKKyAgICB2b2lkIHJlbGVhc2VDbGllbnRJc29TdWJzcGFjZShWTSYp
OwogCiBwcml2YXRlOgotICAgIGNsYXNzIEF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlOwotICAgIGZy
aWVuZCBjbGFzcyBBdXRvcmVtb3ZpbmdJc29TdWJzcGFjZTsKKyAgICBJc29TdWJzcGFjZSYgaXNv
U3Vic3BhY2Vmb3JIZWFwKExvY2tIb2xkZXImLCBIZWFwJik7CiAKICAgICBMb2NrIG1fbG9jazsK
LSAgICBIYXNoTWFwPFZNKiwgSXNvU3Vic3BhY2UqPiBtX3N1YnNwYWNlUGVyVk0gV1RGX0dVQVJE
RURfQllfTE9DSyhtX2xvY2spOwotICAgIEZ1bmN0aW9uPFN1YnNwYWNlUGFyYW1ldGVycyhWTSYp
PiBtX3N1YnNwYWNlUGFyYW1ldGVyczsKKworICAgIEhhc2hNYXA8SGVhcCosIElzb1N1YnNwYWNl
Kj4gbV9zdWJzcGFjZVBlckhlYXA7CisgICAgSGFzaE1hcDxWTSosIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSo+IG1fY2xpZW50U3Vic3BhY2VQZXJWTSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9jayk7
CisgICAgRnVuY3Rpb248U3Vic3BhY2VQYXJhbWV0ZXJzKEhlYXAmKT4gbV9zdWJzcGFjZVBhcmFt
ZXRlcnM7CiB9OwogCiAjZGVmaW5lIElTT19TVUJTUEFDRV9QQVJBTUVURVJTKGhlYXBDZWxsVHlw
ZSwgdHlwZSkgOjpKU0M6Oklzb1N1YnNwYWNlUGVyVk06OlN1YnNwYWNlUGFyYW1ldGVycygiSXNv
bGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhlYXBDZWxsVHlwZSksIHNpemVvZih0eXBlKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw4IEBAIHZvaWQqIExvY2FsQWxs
b2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEgKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSBudWxs
cHRyKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAorICAgIC8vIEZJWE1FIEdsb2JhbEdDOiBO
ZWVkIHRvIHN5bmNocm9uaXplIGhlcmUgdG8gd2hlbiBhbGxvY2F0aW5nIGZyb20gdGhlIEJsb2Nr
RGlyZWN0b3J5IGluIHRoZSBzZXJ2ZXIuCisKICAgICBTdWJzcGFjZSogc3Vic3BhY2UgPSBtX2Rp
cmVjdG9yeS0+bV9zdWJzcGFjZTsKICAgICBpZiAoc3Vic3BhY2UtPmlzSXNvU3Vic3BhY2UoKSkg
ewogICAgICAgICBpZiAodm9pZCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SXNvU3Vic3BhY2UqPihz
dWJzcGFjZSktPnRyeUFsbG9jYXRlRnJvbUxvd2VyVGllcigpKQpAQCAtMTY0LDYgKzE2Niw3IEBA
IHZvaWQgTG9jYWxBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgKIAogdm9pZCogTG9jYWxB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQogeworICAgIC8vIEZJWE1F
OiBHbG9iYWxHQwogICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2VkIGZv
ciByZWFsIG11bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0bwog
ICAgIC8vIGNvbWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRoYXQg
cHJvdG9jb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKICAgICAvLwpAQCAtMjQ5
LDcgKzI1Miw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmsKIAog
dm9pZCBMb2NhbEFsbG9jYXRvcjo6ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChIZWFwJiBoZWFw
LCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewotICAgIGlmICghT3B0aW9u
czo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgaWYgKExJS0VMWSghT3B0aW9uczo6
c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3
ICs0MSw3IEBAIGNsYXNzIExvY2FsQWxsb2NhdG9yIDogcHVibGljIEJhc2ljUmF3U2UKICAgICAK
IHB1YmxpYzoKICAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSopOwotICAgIH5Mb2Nh
bEFsbG9jYXRvcigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Mb2NhbEFsbG9jYXRvcigpOwog
ICAgIAogICAgIHZvaWQqIGFsbG9jYXRlKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCkBAIC01Niw3ICs1Niw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKICAgICAKICAgICBib29sIGlzRnJl
ZUxpc3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0OwotICAgIAorCisgICAgQmxvY2tEaXJlY3Rv
cnkmIGRpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuICptX2RpcmVjdG9yeTsgfQorCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxv
Y2F0aW5nCiAKICAgICBmcmVlTGlzdC5mb3JFYWNoKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBj
ZWxsKSB7Ci0gICAgICAgICAgICBpZiAoTWFya2VkQmxvY2tJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAoTWFya2VkQmxvY2tJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1BvaW50ZXIoY2VsbCksICJc
biIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rl
c3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcChIZWFwQ2VsbDo6U3RvcEFsbG9j
YXRpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclN0YXRlLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWVudW0gY2xhc3MgTXV0YXRvclN0YXRlIHsKK2VudW0gY2xhc3MgTXV0YXRvclN0YXRlIDogdWlu
dDhfdCB7CiAgICAgLy8gVGhlIG11dGF0b3IgaXMgcnVubmluZyB3aGVuIGl0J3Mgbm90IGluc2lk
ZSBhIEhlYXAgc2xvdyBwYXRoLgogICAgIFJ1bm5pbmcsCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmluamVjdGVkU2NyaXB0SG9zdFNw
YWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmphdmFTY3JpcHRDYWxsRnJhbWVTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRD
YWxsRnJhbWVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0
YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0ph
dmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fn
Z3JlZ2F0ZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQWdncmVnYXRlRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWdncmVnYXRlRXJyb3JQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBFcnJvclByb3RvdHlwZUJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
QWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
SXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShBcnJh
eUl0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Zyb21T
eW5jSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0ZXJh
dG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTkgT2xla3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21haWwu
Y29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90
eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxpYS5j
b20+LgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNGdW5jdGlvblByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Q
cm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IE9sZWtzYW5kciBT
a2FjaGtvdiA8Z3NrYWNoa292QGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEFzeW5jR2VuZXJh
dG9yRnVuY3Rpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2Vu
ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgT2xl
a3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShBc3luY0dlbmVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5
bmNJdGVyYXRvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FzeW5jSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNJdGVyYXRvclByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBP
bGVrc2FuZHIgU2thY2hrb3YgPGdza2FjaGtvdkBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQXN5bmNJdGVyYXRvclByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
QXRvbWljc09iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jp
Z0ludE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNyBDYWlvIExpbWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPi4KLSAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IEpTV3JhcHBlck9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5iaWdJbnRPYmplY3RTcGFjZTxtb2Rl
PigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jp
Z0ludFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdtYWls
LmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoQmlnSW50UHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAg
LTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4g
dm0uYm9vbGVhbk9iamVjdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnJhbmRlZFN0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JyYW5kZWRTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnJhbmRlZFN0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhIFMuQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQnJhbmRlZFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBTdAog
cHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiAmdm0uYnJhbmRlZFN0cnVjdHVyZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3Vt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCFDZWxsVHlwZTo6
bmVlZHNEZXN0cnVjdGlvbiwgIiIpOwogICAgICAgICByZXR1cm4gJnZtLmNsb25lZEFyZ3VtZW50
c1NwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29s
ZU9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zb2xlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShDb25zb2xlT2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBDdXN0b21TZXR0ZXIg
PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmN1c3RvbUdldHRlclNldHRl
clNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRE9N
QXR0cmlidXRlR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RPTUF0dHJpYnV0ZUdldHRlclNldHRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEN1c3RvbUdldHRlclNldHRlcjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmRvbUF0dHJpYnV0ZUdldHRlclNldHRl
clNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNSw3ICszNSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gJnZtLmRhdGVJbnN0YW5jZVNwYWNlKCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKERhdGVQ
cm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLmVycm9ySW5zdGFuY2VTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShFcnJvclByb3Rv
dHlwZUJhc2UsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZh
bEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5ldmFsRXhlY3V0YWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5leGNlcHRpb25TcGFj
ZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbmFsaXph
dGlvblJlZ2lzdHJ5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmluYWxpemF0aW9uUmVnaXN0
cnlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoRmluYWxpemF0aW9uUmVnaXN0cnlQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDkgKzQ0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSgpLnNw
YWNlOworICAgICAgICByZXR1cm4gJnZtLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCk7CiAgICAg
fQogCiAgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgU2NyaXB0
RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIEludHJpbnNp
YyBpbnRyaW5zaWMsIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmZ1
bmN0aW9uUmFyZURhdGFTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5
cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3
LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9y
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoR2VuZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Nyw3ICs1Nyw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNQdXQgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZ2V0dGVyU2V0dGVyU3BhY2UoKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBs
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsgLy8gVGhpcyBpcyBuZXZlciBhY2Nlc3Nl
ZCBkaXJlY3RseSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rYWdlIG9uIHNvbWUgY29tcGls
ZXJzLgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChUeXBlID09IEhhc2hUYWJsZVR5cGU6OktleSkKICAgICAgICAg
ICAgIHJldHVybiB2bS5zZXRCdWNrZXRTcGFjZTxtb2RlPigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTM4LDcgKzM4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEludGVybmFsRnVuY3Rpb24pLCAiSW50ZXJuYWxGdW5jdGlv
biBzdWJjbGFzc2VzIHRoYXQgYWRkIGZpZWxkcyBuZWVkIHRvIG92ZXJyaWRlIHN1YnNwYWNlRm9y
PD4oKSIpOwogICAgICAgICByZXR1cm4gJnZtLmludGVybmFsRnVuY3Rpb25TcGFjZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0uaW50bENvbGxhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZh
bWlseSkKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNyArMzYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsQ29sbGF0b3JQcm90b3R5cGUsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHZtLmludGxEYXRlVGltZUZvcm1hdFNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZh
bldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50
bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGlzcGxheU5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bERpc3BsYXlOYW1lcy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxEaXNwbGF5TmFtZXNTcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
aXNwbGF5TmFtZXNQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXNQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bExpc3RGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsTGlzdEZvcm1hdFNwYWNlPG1vZGU+
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RG
b3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShJbnRsTGlz
dEZvcm1hdFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExvY2FsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZtLmludGxMb2NhbGVTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2Nh
bGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoSW50bExvY2FsZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIg
KGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE2NCw3ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmludGxOdW1i
ZXJGb3JtYXRTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXRQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFt
aWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdv
bmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIw
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxPYmplY3QsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZtLmludGxQbHVyYWxSdWxlc1NwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90
eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fn
b25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsUmVsYXRpdmVUaW1lRm9ybWF0
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdFByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UmVsYXRpdmVUaW1lRm9ybWF0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxSZWxhdGl2ZVRpbWVGb3JtYXRQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudEl0ZXJhdG9y
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxTZWdtZW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1v
ZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHZtLmludGxTZWdtZW50SXRlcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3JQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudEl0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50SXRlcmF0b3JQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50
bFNlZ21lbnRJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS5pbnRsU2VnbWVudGVyU3BhY2U8bW9kZT4oKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRlclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSW50bFNlZ21lbnRlclByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRzLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Miw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0u
aW50bFNlZ21lbnRzU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudHNQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudHNQcm90b3R5cGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRz
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEludGxTZWdtZW50c1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSXRlcmF0b3JQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDksNyArNDksNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiAmdm0uYXJyYXlTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2
bS5hcnJheUJ1ZmZlclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5hcnJheUl0
ZXJhdG9yU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBc3luY0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FzeW5jR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uYXN5bmNH
ZW5lcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0aWNhaW9saW1hQGdtYWlsLmNv
bT4KLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNyBA
QCBwdWJsaWM6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmJpZ0ludFNwYWNl
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
b3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljX2Fzc2VydChTdHJ1Y3R1cmVGbGFncyAmIEltcGxlbWVu
dHNIYXNJbnN0YW5jZSwgIiIpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmJvdW5kRnVuY3Rpb25TcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxs
ZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2U7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuICZ2bS5jYWxsZWVTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uY3VzdG9tR2V0dGVyRnVu
Y3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uY3VzdG9tU2V0dGVyRnVuY3Rp
b25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgVHlwZWRBcnJheUNvbnRlbnRUeXBlIGNv
bnRlbnRUeXBlID0gVHlwZWRBcnJheUNvbnRlbnRUeXBlOjpOb25lOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmRhdGFW
aWV3U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRGF0
YVZpZXdQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9u
UmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmZpbmFsaXph
dGlvblJlZ2lzdHJ5U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBa
d2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBN
YWtzIE9ybG92aWNoCiAgKgpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50cHRyX3QgcmFyZURhdGFUYWcgPSAweDE7CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uZnVuY3Rpb25T
cGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2bS5nZW5lcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2MCw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgc3dpdGNoIChBZGFwdG9yOjp0eXBlVmFs
dWUpIHsKICAgICAgICAgY2FzZSBUeXBlSW50ODoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmdsb2Jh
bExleGljYWxFbnZpcm9ubWVudFNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTYyOSw3ICs2MjksNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmdsb2JhbE9iamVjdFNwYWNlPG1vZGU+KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5tYXBTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAy
MSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBpbnRlcm5hbEZpZWxkKEZpZWxkIGZpZWxkKSB7IHJldHVybiBCYXNlOjppbnRl
cm5hbEZpZWxkKHN0YXRpY19jYXN0PHVpbnQzMl90PihmaWVsZCkpOyB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ubWFw
SXRlcmF0b3JTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNNb2R1bGVMb2FkZXIsIEJhc2UpOwog
ICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ubW9k
dWxlTmFtZXNwYWNlT2JqZWN0U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLmpzTW9kdWxlUmVjb3JkU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
YXRpdmVTdGRGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ubmF0aXZlU3RkRnVuY3Rpb25T
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT05PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNPTk9iamVjdCwgQmFzZSk7CiAgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Mj47CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gJnZtLnByb21pc2VTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNQcm9taXNlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8PCAxKSAtIDE7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
LSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICByZXR1cm4gJnZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTcGFjZSgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBl
KSA9PSBzaXplb2YoSlNQcm94eSkpOwogICAgICAgICByZXR1cm4gJnZtLmpzUHJveHlTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVu
Y3Rpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNSZW1vdGVGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgogICogQXV0aG9yOiBDYWl0bGluIFBv
dHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ3LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5yZW1vdGVGdW5j
dGlvblNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NjcmlwdEZldGNoUGFy
YW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc2NyaXB0RmV0Y2hQYXJhbWV0ZXJz
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NjcmlwdEZldGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NjcmlwdEZldGNoZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB2bS5zY3JpcHRGZXRjaGVyU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNldFNw
YWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGludGVybmFsRmll
bGQoRmllbGQgZmllbGQpIHsgcmV0dXJuIEJhc2U6OmludGVybmFsRmllbGQoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGZpZWxkKSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zZXRJdGVyYXRvclNwYWNlPG1vZGU+KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTb3VyY2VD
b2RlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc291cmNlQ29kZVNwYWNl
PG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBz
cGVjaWFsaXplIHRoZSBzdHJpbmcgc3Vic3BhY2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3NpYmxl
IHN3ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAgICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5nIGRp
ZG4ndCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdTcGFjZSgpOwogICAgIH0KQEAgLTI3Miw3ICsyNzIs
NyBAQCBjbGFzcyBKU1JvcGVTdHJpbmcgZmluYWwgOiBwdWJsaWMgSlNTdHJpCiAgICAgZnJpZW5k
IGNsYXNzIEpTU3RyaW5nOwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gJnZtLnJvcGVTdHJpbmdTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRp
YyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiB2bS5zdHJpbmdJdGVyYXRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZtLnRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvclNwYWNlPG1vZGU+KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0UmVmLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2JqZWN0
UmVmLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTV2Vha09iamVjdFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICByZXR1cm4gdm0ud2Vha09iamVjdFJlZlNwYWNlPG1vZGU+KCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhT
Y29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IEpTU2NvcGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2l0aFNjb3BlU3BhY2U8bW9kZT4oKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0
ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKE1hcEl0ZXJhdG9yUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
KyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShNYXBQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMjksNyArMjksNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTWF0aE9iamVjdCwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyAr
MzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biB2bS5tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3Rv
dHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBAIHByaXZh
dGU6CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEVycm9yUHJvdG90eXBlQmFzZTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoTmF0aXZlRXJyb3JQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ubmF0aXZlRXhlY3V0YWJsZVNwYWNlKCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNXcmFwcGVyT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5udW1iZXJPYmplY3RTcGFjZSgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoT2JqZWN0UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTUsNiAr
MzU1LDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICBcCiAgICAg
dihHQ0xvZ0xldmVsLCBsb2dHQywgR0NMb2dnaW5nOjpOb25lLCBOb3JtYWwsICJkZWJ1Z2dpbmcg
b3B0aW9uIHRvIGxvZyBHQyBhY3Rpdml0eSAoMCA9IE5vbmUsIDEgPSBCYXNpYywgMiA9IFZlcmJv
c2UpIikgXAogICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoQm9vbCwgdXNlR2xvYmFsR0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJv
b2wsIGdjQXRFbmQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUganNjIENMSSB3aWxsIGRv
IGEgR0MgYmVmb3JlIGV4aXRpbmciKSBcCiAgICAgdihCb29sLCBmb3JjZUdDU2xvd1BhdGhzLCBm
YWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgSklUIGZhc3QgYWxsb2Nh
dGlvbnMgZG93biB0aGVpciBzbG93IHBhdGhzLiIpIFwKICAgICB2KEJvb2wsIGZvcmNlRGlkRGVm
ZXJHQ1dvcmssIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBEZWZl
ckdDIGRlc3RydWN0aW9ucyB0byBwZXJmb3JtIGEgR0MuIikgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksOSArMzksOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewotICAgICAgICByZXR1cm4gJnZtLnByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKS5z
cGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCk7CiAgICAg
fQogCiAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJ
bW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICByZXR1cm4gJnZtLnByb3BlcnR5VGFibGVTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ucHJveHlPYmplY3RTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5UmV2b2tlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlSZXZva2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlSZXZva2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5wcm94eVJldm9rZVNwYWNlPG1vZGU+KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RP
YmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVmbGVjdE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShSZWZsZWN0T2JqZWN0LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ucmVnRXhwU3BhY2UoKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0
eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghQ2VsbFR5cGU6Om5lZWRzRGVz
dHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5yZWdFeHBPYmplY3RTcGFjZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoUmVnRXhwUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmlu
Z0l0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE5IEFsZXhleSBT
aHZheWthIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFJlZ0V4
cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3
ICs0NCw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghQ2VsbFR5cGU6Om5lZWRzRGVz
dHJ1Y3Rpb24sICIiKTsKICAgICAgICAgcmV0dXJuICZ2bS5zY29wZWRBcmd1bWVudHNTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2U8bW9kZT4o
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MDgsNyArMTA4LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2VsbAog
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoJlZNOjpTcGFjZUFuZFNldDo6c2V0
Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNldCk7CisgICAgQVNTRVJUKCZIZWFw
OjpTcGFjZUFuZFNldDo6c2V0Rm9yKCpzdWJzcGFjZSgpKSA9PSAmY2xlYXJhYmxlQ29kZVNldCk7
CiAgICAgY2xlYXJhYmxlQ29kZVNldC5yZW1vdmUodGhpcyk7CiB9CiAKQEAgLTE4Nyw3ICsxODcs
NyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIGF1dG8mIGNsZWFyYWJsZUNvZGVTZXQgPSBWTTo6U3BhY2VBbmRT
ZXQ6OnNldEZvcigqc3Vic3BhY2UoKSk7CisgICAgYXV0byYgY2xlYXJhYmxlQ29kZVNldCA9IEhl
YXA6OlNwYWNlQW5kU2V0OjpzZXRGb3IoKnN1YnNwYWNlKCkpOwogICAgIGlmIChoYXNDbGVhcmFi
bGVDb2RlKHZtKSkKICAgICAgICAgY2xlYXJhYmxlQ29kZVNldC5hZGQodGhpcyk7CiAgICAgZWxz
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVy
YXRvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTZXRJdGVyYXRvclByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2V0UHJvdG90
eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaGFkb3dSZWFsbU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NoYWRvd1JlYWxtT2JqZWN0
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1No
YWRvd1JlYWxtT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNiw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc2hh
ZG93UmVhbG1TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NoYWRvd1JlYWxtUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93UmVhbG1Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2hhZG93UmVhbG1Qcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU2hhZG93UmVhbG1Qcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnNwYXJzZUFycmF5
VmFsdWVNYXBTcGFjZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU1Njb3BlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZtLnN0cmljdEV2YWxBY3RpdmF0aW9uU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVyYXRv
clByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIy
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
WXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGlj
IEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU3RyaW5nSXRlcmF0b3JQcm90
b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMzEsNyArMzEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gJnZtLnN0cmluZ09iamVjdFNwYWNlKCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB+U3RydWN0dXJlKCk7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJl
dHVybiAmdm0uc3RydWN0dXJlU3BhY2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiAmdm0uc3RydWN0dXJlQ2hhaW5TcGFjZSgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJ1Y3R1cmVSYXJlRGF0
YVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4u
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0uc3ltYm9s
U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xPYmplY3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzEsNyArMzEsNyBAQCBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTV3JhcHBlck9iamVjdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS5zeW1ib2xPYmplY3RT
cGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4LDcgKzM4
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU3ltYm9sUHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00NTQsNyArNDU0LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgV1RGOjpJdGVyYXRvclJhbmdl
PHR5cGVuYW1lIFByaXZhdGVOYW1lRW52aXJvbm1lbnQ6Oml0ZXJhdG9yPiBQcml2YXRlTmFtZUl0
ZXJhdG9yUmFuZ2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuICZ2bS5zeW1ib2xUYWJsZVNwYWNlKCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxDYWxlbmRhci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXIuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxD
YWxlbmRhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsQ2FsZW5kYXJTcGFj
ZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXJQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbER1cmF0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcg
KzM1LDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLnRlbXBvcmFsRHVyYXRpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcg
KzM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxJbnN0YW50LmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsSW5z
dGFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAyMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0udGVtcG9yYWxJbnN0YW50U3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnRQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbEluc3RhbnRQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxJbnN0YW50UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFRlbXBvcmFsSW5zdGFudFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxOb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbE5vdy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbE5vdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKFRlbXBvcmFsTm93LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxPYmplY3QsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsUGxhaW5UaW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVtcG9yYWxQbGFpblRpbWUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxQbGFpblRpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIHB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wb3Jh
bFBsYWluVGltZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxQbGFpblRpbWVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFBsYWluVGltZVByb3RvdHlwZS5o
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbFBsYWluVGltZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxQbGFpblRpbWVQcm90b3R5cGUsIEJhc2UpOwogICAg
ICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbFRpbWVab25lU3BhY2U8bW9kZT4oKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVa
b25lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxUaW1lWm9uZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbFRp
bWVab25lUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUsCiAgICAgLCBtX3JhbmRvbShPcHRpb25zOjpzZWVkT2ZWTVJhbmRvbUZvckZ1enpl
cigpID8gT3B0aW9uczo6c2VlZE9mVk1SYW5kb21Gb3JGdXp6ZXIoKSA6IGNyeXB0b2dyYXBoaWNh
bGx5UmFuZG9tTnVtYmVyKCkpCiAgICAgLCBtX2ludGVncml0eVJhbmRvbSgqdGhpcykKICAgICAs
IGhlYXAoKnRoaXMsIGhlYXBUeXBlKQorICAgICwgY2xpZW50SGVhcChoZWFwKQogICAgICwgdm1U
eXBlKHZtVHlwZSkKICAgICAsIGNsaWVudERhdGEobnVsbHB0cikKICAgICAsIHRvcEVudHJ5RnJh
bWUobnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBj
b3B5KQpAQCAtMzMzLDYgKzMzMyw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBIZWFwIGhl
YXA7CisgICAgR0NDbGllbnQ6OkhlYXAgY2xpZW50SGVhcDsKIAogICAgIGNvbnN0IEhlYXBDZWxs
VHlwZSYgY2VsbEhlYXBDZWxsVHlwZSgpIHsgcmV0dXJuIGhlYXAuY2VsbEhlYXBDZWxsVHlwZTsg
fQogICAgIGNvbnN0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlJiBkZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUoKSB7IHJldHVybiBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZTsgfTsKQEAgLTM0OSwxNjQgKzM1MCwzNSBAQCBwdWJsaWM6CiAgICAgQUxXQVlT
X0lOTElORSBDb21wbGV0ZVN1YnNwYWNlJiB2YXJpYWJsZVNpemVkQ2VsbFNwYWNlKCkgeyByZXR1
cm4gaGVhcC52YXJpYWJsZVNpemVkQ2VsbFNwYWNlOyB9CiAgICAgQUxXQVlTX0lOTElORSBDb21w
bGV0ZVN1YnNwYWNlJiBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgpIHsgcmV0dXJuIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0U3BhY2U7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2Um
IGFycmF5U3BhY2UoKSB7IHJldHVybiBoZWFwLmFycmF5U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5M
SU5FIElzb1N1YnNwYWNlJiBiaWdJbnRTcGFjZSgpIHsgcmV0dXJuIGhlYXAuYmlnSW50U3BhY2U7
IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBjYWxsZWVTcGFjZSgpIHsgcmV0dXJu
IGhlYXAuY2FsbGVlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBjbG9u
ZWRBcmd1bWVudHNTcGFjZSgpIHsgcmV0dXJuIGhlYXAuY2xvbmVkQXJndW1lbnRzU3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBjdXN0b21HZXR0ZXJTZXR0ZXJTcGFjZSgp
IHsgcmV0dXJuIGhlYXAuY3VzdG9tR2V0dGVyU2V0dGVyU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5M
SU5FIElzb1N1YnNwYWNlJiBkYXRlSW5zdGFuY2VTcGFjZSgpIHsgcmV0dXJuIGhlYXAuZGF0ZUlu
c3RhbmNlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBkb21BdHRyaWJ1
dGVHZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0dXJuIGhlYXAuZG9tQXR0cmlidXRlR2V0dGVyU2V0
dGVyU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBleGNlcHRpb25TcGFj
ZSgpIHsgcmV0dXJuIGhlYXAuZXhjZXB0aW9uU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElz
b1N1YnNwYWNlJiBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UoKSB7IHJldHVybiBoZWFw
LmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNv
U3Vic3BhY2UmIGZ1bmN0aW9uU3BhY2UoKSB7IHJldHVybiBoZWFwLmZ1bmN0aW9uU3BhY2U7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBnZXR0ZXJTZXR0ZXJTcGFjZSgpIHsgcmV0
dXJuIGhlYXAuZ2V0dGVyU2V0dGVyU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNw
YWNlJiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnRTcGFjZSgpIHsgcmV0dXJuIGhlYXAuZ2xvYmFs
TGV4aWNhbEVudmlyb25tZW50U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNl
JiBpbnRlcm5hbEZ1bmN0aW9uU3BhY2UoKSB7IHJldHVybiBoZWFwLmludGVybmFsRnVuY3Rpb25T
cGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIGpzUHJveHlTcGFjZSgpIHsg
cmV0dXJuIGhlYXAuanNQcm94eVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFj
ZSYgbmF0aXZlRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5uYXRpdmVFeGVjdXRhYmxl
U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBudW1iZXJPYmplY3RTcGFj
ZSgpIHsgcmV0dXJuIGhlYXAubnVtYmVyT2JqZWN0U3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5F
IElzb1N1YnNwYWNlJiBwbGFpbk9iamVjdFNwYWNlKCkgeyByZXR1cm4gaGVhcC5wbGFpbk9iamVj
dFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgcHJvbWlzZVNwYWNlKCkg
eyByZXR1cm4gaGVhcC5wcm9taXNlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNw
YWNlJiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3BhY2UoKSB7IHJldHVybiBoZWFwLnByb3BlcnR5
TmFtZUVudW1lcmF0b3JTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHBy
b3BlcnR5VGFibGVTcGFjZSgpIHsgcmV0dXJuIGhlYXAucHJvcGVydHlUYWJsZVNwYWNlOyB9Ci0g
ICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgcmVnRXhwU3BhY2UoKSB7IHJldHVybiBoZWFw
LnJlZ0V4cFNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgcmVnRXhwT2Jq
ZWN0U3BhY2UoKSB7IHJldHVybiBoZWFwLnJlZ0V4cE9iamVjdFNwYWNlOyB9Ci0gICAgQUxXQVlT
X0lOTElORSBJc29TdWJzcGFjZSYgcm9wZVN0cmluZ1NwYWNlKCkgeyByZXR1cm4gaGVhcC5yb3Bl
U3RyaW5nU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzY29wZWRBcmd1
bWVudHNTcGFjZSgpIHsgcmV0dXJuIGhlYXAuc2NvcGVkQXJndW1lbnRzU3BhY2U7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzcGFyc2VBcnJheVZhbHVlTWFwU3BhY2UoKSB7IHJl
dHVybiBoZWFwLnNwYXJzZUFycmF5VmFsdWVNYXBTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUg
SXNvU3Vic3BhY2UmIHN0cmluZ1NwYWNlKCkgeyByZXR1cm4gaGVhcC5zdHJpbmdTcGFjZTsgfQot
ICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3BhY2UmIHN0cmluZ09iamVjdFNwYWNlKCkgeyByZXR1
cm4gaGVhcC5zdHJpbmdPYmplY3RTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJTkUgSXNvU3Vic3Bh
Y2UmIHN0cnVjdHVyZUNoYWluU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cnVjdHVyZUNoYWluU3Bh
Y2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzdHJ1Y3R1cmVSYXJlRGF0YVNw
YWNlKCkgeyByZXR1cm4gaGVhcC5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlOyB9Ci0gICAgQUxXQVlT
X0lOTElORSBJc29TdWJzcGFjZSYgc3RydWN0dXJlU3BhY2UoKSB7IHJldHVybiBoZWFwLnN0cnVj
dHVyZVNwYWNlOyB9Ci0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSYgYnJhbmRlZFN0cnVj
dHVyZVNwYWNlKCkgeyByZXR1cm4gaGVhcC5icmFuZGVkU3RydWN0dXJlU3BhY2U7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIElzb1N1YnNwYWNlJiBzeW1ib2xUYWJsZVNwYWNlKCkgeyByZXR1cm4gaGVh
cC5zeW1ib2xUYWJsZVNwYWNlOyB9CisjZGVmaW5lIERFRklORV9JU09fU1VCU1BBQ0VfQUNDRVNT
T1IobmFtZSwgaGVhcENlbGxUeXBlLCB0eXBlKSBcCisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UmIG5hbWUoKSB7IHJldHVybiBjbGllbnRIZWFwLm5hbWU7IH0KIAotI2Rl
ZmluZSBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hbWUpIFwKKyAgICBGT1Jf
RUFDSF9KU0NfSVNPX1NVQlNQQUNFKERFRklORV9JU09fU1VCU1BBQ0VfQUNDRVNTT1IpCisjdW5k
ZWYgREVGSU5FX0lTT19TVUJTUEFDRV9BQ0NFU1NPUgorCisjZGVmaW5lIERFRklORV9EWU5BTUlD
X0lTT19TVUJTUEFDRV9BQ0NFU1NPUl9JTVBMKG5hbWUsIGhlYXBDZWxsVHlwZSwgdHlwZSkgXAog
ICAgIHRlbXBsYXRlPFN1YnNwYWNlQWNjZXNzIG1vZGU+IFwKLSAgICBBTFdBWVNfSU5MSU5FIElz
b1N1YnNwYWNlKiBuYW1lKCkgeyByZXR1cm4gaGVhcC5uYW1lPG1vZGU+KCk7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogbmFtZSgpIHsgcmV0dXJuIGNsaWVudEhl
YXAubmFtZTxtb2RlPigpOyB9CiAKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYXBpV3JhcHBlck9iamVjdFNwYWNlKQotICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIob2JqQ0NhbGxiYWNrRnVuY3Rpb25T
cGFjZSkKLSNlbmRpZgotI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECi0gICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcGlXcmFwcGVyT2JqZWN0U3BhY2UpCi0gICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc2NDYWxsYmFja0Z1bmN0aW9uU3BhY2Up
Ci0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihjYWxsYmFja0FQSVdyYXBw
ZXJHbG9iYWxPYmplY3RTcGFjZSkKLSNlbmRpZgotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoYXBpR2xvYmFsT2JqZWN0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihhcGlWYWx1ZVdyYXBwZXJTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKGFycmF5QnVmZmVyU3BhY2UpCi0gICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihhcnJheUl0ZXJhdG9yU3BhY2UpCi0gICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihhc3luY0dlbmVyYXRvclNwYWNlKQotICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50NjRBcnJheVNwYWNlKQotICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYmlnSW50T2JqZWN0U3BhY2UpCi0gICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihiaWdVaW50NjRBcnJheVNwYWNlKQot
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYm9vbGVhbk9iamVjdFNwYWNl
KQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoYm91bmRGdW5jdGlvblNw
YWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY2FsbGJhY2tDb25z
dHJ1Y3RvclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY2Fs
bGJhY2tHbG9iYWxPYmplY3RTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGNhbGxiYWNrRnVuY3Rpb25TcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGNhbGxiYWNrT2JqZWN0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihjdXN0b21HZXR0ZXJGdW5jdGlvblNwYWNlKQotICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoY3VzdG9tU2V0dGVyRnVuY3Rpb25TcGFjZSkKLSAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGRhdGFWaWV3U3BhY2UpCi0gICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihkZWJ1Z2dlclNjb3BlU3BhY2UpCi0g
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihlcnJvckluc3RhbmNlU3BhY2Up
Ci0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihmbG9hdDMyQXJyYXlTcGFj
ZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGZsb2F0NjRBcnJheVNw
YWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZnVuY3Rpb25SYXJl
RGF0YVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoZ2VuZXJh
dG9yU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihnbG9iYWxP
YmplY3RTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGluamVj
dGVkU2NyaXB0SG9zdFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoaW50OEFycmF5U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihpbnQxNkFycmF5U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihpbnQzMkFycmF5U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihqYXZhU2NyaXB0Q2FsbEZyYW1lU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihqc01vZHVsZVJlY29yZFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIobWFwQnVja2V0U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihtYXBJdGVyYXRvclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIobWFwU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihtb2R1bGVOYW1lc3BhY2VPYmplY3RTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCi0gICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNlKQotICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkKLSAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0aW9uU3BhY2UpCi0gICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNl
KQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hQYXJh
bWV0ZXJzU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3Jp
cHRGZXRjaGVyU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihz
ZXRCdWNrZXRTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNl
dEl0ZXJhdG9yU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihz
ZXRTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNoYWRvd1Jl
YWxtU3BhY2UpOwotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc3RyaWN0
RXZhbEFjdGl2YXRpb25TcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHN0cmluZ0l0ZXJhdG9yU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihzb3VyY2VDb2RlU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihzeW1ib2xTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHN5bWJvbE9iamVjdFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIodGVtcGxhdGVPYmplY3REZXNjcmlwdG9yU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbENhbGVuZGFyU3BhY2UpCi0gICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbER1cmF0aW9uU3BhY2UpCi0gICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbEluc3RhbnRTcGFjZSkKLSAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsUGxhaW5UaW1lU3Bh
Y2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbFRpbWVa
b25lU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1aW50OEFy
cmF5U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih1aW50OENs
YW1wZWRBcnJheVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
dWludDE2QXJyYXlTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHVpbnQzMkFycmF5U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Uih1bmxpbmtlZEV2YWxDb2RlQmxvY2tTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTcGFjZSkKLSAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
a1NwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihmaW5hbGl6YXRpb25SZWdpc3RyeVNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIod2Vha09iamVjdFJlZlNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIod2Vha1NldFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIod2Vha01hcFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIod2l0aFNjb3BlU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihpbnRsQ29sbGF0b3JTcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGludGxEYXRlVGltZUZvcm1hdFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIoaW50bERpc3BsYXlOYW1lc1NwYWNlKQotICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bExpc3RGb3JtYXRTcGFjZSkKLSAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxMb2NhbGVTcGFjZSkKLSAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxOdW1iZXJGb3JtYXRTcGFjZSkKLSAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxQbHVyYWxSdWxlc1NwYWNl
KQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFJlbGF0aXZlVGlt
ZUZvcm1hdFNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50
bFNlZ21lbnRJdGVyYXRvclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50bFNlZ21lbnRlclNwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoaW50bFNlZ21lbnRzU3BhY2UpCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dhc21JQ0NhbGxlZVNwYWNl
KQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlFeGNl
cHRpb25TcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFz
c2VtYmx5RnVuY3Rpb25TcGFjZSkKLSAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1lbW9yeVNwYWNlKQotICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSkKLSAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
U3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJs
eVRhYmxlU3BhY2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJB
c3NlbWJseVRhZ1NwYWNlKQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKLSNlbmRpZgorI2RlZmluZSBERUZJTkVf
RFlOQU1JQ19JU09fU1VCU1BBQ0VfQUNDRVNTT1IobmFtZSkgXAorICAgIERFRklORV9EWU5BTUlD
X0lTT19TVUJTUEFDRV9BQ0NFU1NPUl9JTVBMKG5hbWUsIHVudXNlZCwgdW51c2VkMikKIAotI3Vu
ZGVmIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIKKyAgICBGT1JfRUFDSF9KU0Nf
RFlOQU1JQ19JU09fU1VCU1BBQ0UoREVGSU5FX0RZTkFNSUNfSVNPX1NVQlNQQUNFX0FDQ0VTU09S
X0lNUEwpCiAKICAgICBBTFdBWVNfSU5MSU5FIElzb0NlbGxTZXQmIGV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2VzV2l0aENvbnN0cmFpbnRzKCkgeyByZXR1cm4gaGVhcC5leGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlc1dpdGhDb25zdHJhaW50czsgfQogICAgIEFMV0FZU19JTkxJTkUgSXNvQ2VsbFNl
dCYgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycygpIHsgcmV0dXJuIGhl
YXAuZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVyczsgfQogCi0jZGVmaW5l
IERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKG5hbWUpIFwKLSAgICB0ZW1wbGF0
ZTxTdWJzcGFjZUFjY2VzcyBtb2RlPiBcCi0gICAgQUxXQVlTX0lOTElORSBJc29TdWJzcGFjZSog
bmFtZSgpIHsgcmV0dXJuIGhlYXAubmFtZTxtb2RlPigpOyB9CisgICAgQUxXQVlTX0lOTElORSBH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIGNvZGVCbG9ja1NwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVh
cC5jb2RlQmxvY2tTcGFjZTsgfQogCi0gICAgdXNpbmcgU3BhY2VBbmRTZXQgPSBIZWFwOjpTcGFj
ZUFuZFNldDsKLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiBjb2RlQmxvY2tTcGFjZSgp
IHsgcmV0dXJuIGhlYXAuY29kZUJsb2NrU3BhY2U7IH0KKyAgICBERUZJTkVfRFlOQU1JQ19JU09f
U1VCU1BBQ0VfQUNDRVNTT1IoZXZhbEV4ZWN1dGFibGVTcGFjZSkKKyAgICBERUZJTkVfRFlOQU1J
Q19JU09fU1VCU1BBQ0VfQUNDRVNTT1IobW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSkKIAot
ICAgIERZTkFNSUNfU1BBQ0VfQU5EX1NFVF9ERUZJTkVfTUVNQkVSKGV2YWxFeGVjdXRhYmxlU3Bh
Y2UpCi0gICAgRFlOQU1JQ19TUEFDRV9BTkRfU0VUX0RFRklORV9NRU1CRVIobW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGVTcGFjZSkKKyN1bmRlZiBERUZJTkVfRFlOQU1JQ19JU09fU1VCU1BBQ0VfQUND
RVNTT1JfSU1QTAorI3VuZGVmIERFRklORV9EWU5BTUlDX0lTT19TVUJTUEFDRV9HRVRURVIKIAot
ICAgIEFMV0FZU19JTkxJTkUgU3BhY2VBbmRTZXQmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkg
eyByZXR1cm4gaGVhcC5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgU3BhY2VBbmRTZXQmIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBoZWFwLnBy
b2dyYW1FeGVjdXRhYmxlU3BhY2U7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNwYWNlQW5kU2V0JiB1
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gaGVhcC51bmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UmIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5m
dW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlJiBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlKCkgeyByZXR1cm4gY2xpZW50SGVhcC5w
cm9ncmFtRXhlY3V0YWJsZVNwYWNlOyB9CisgICAgQUxXQVlTX0lOTElORSBHQ0NsaWVudDo6SXNv
U3Vic3BhY2UmIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UoKSB7IHJldHVybiBjbGll
bnRIZWFwLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7IH0KIAogICAgIFZNVHlwZSB2
bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4Miw3
ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChpc1dlYWtNYXAoKSkKICAg
ICAgICAgICAgIHJldHVybiB2bS53ZWFrTWFwU3BhY2U8bW9kZT4oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoV2Vha01hcFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVj
dFJlZlByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtPYmplY3RSZWZQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWFrT2JqZWN0
UmVmUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrU2V0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcg
QEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYWtTZXRQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICBy
ZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0Nh
bGxlZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS5qc1RvV2FzbUlDQ2FsbGVlU3BhY2U8bW9kZT4oKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKEpTV2ViQXNzZW1ibHksIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2U8bW9kZT4oKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xv
YmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3
ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZtLndlYkFzc2VtYmx5R2xvYmFsU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1NSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndl
YkFzc2VtYmx5SW5zdGFuY2VTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlNZW1v
cnlTcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlNb2R1bGVTcGFjZTxtb2RlPigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0
LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBy
ZXR1cm4gdm0ud2ViQXNzZW1ibHlUYWJsZVNwYWNlPG1vZGU+KCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlUYWdTcGFjZTxt
b2RlPigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlDb21waWxlRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlFeGNlcHRpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9w
ZXJ0eVRhYmxlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0g
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZtLndlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZTxtb2RlPigpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlHbG9iYWxQcm90b3R5cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlHbG9i
YWxQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
V2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZSwgQmFzZSk7
CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgs
NyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseU1vZHVs
ZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFNwYWNlPG1vZGU+KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVF
cnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90
eXBlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSwgQmFzZSk7CiAgICAg
ICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw1MDUgQEAKKzIwMjItMDItMTggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIFNwbGl0IElzb1N1YnNwYWNlIGludG8gYSBHQ0NsaWVudCBhbGxvY2F0b3IgdXNlZCBi
eSBWTSBhbmQgYSBiYWNrZW5kIG1hbmFnZWQgYnkgSGVhcC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzg3OAorICAgICAgICByZGFyOi8vcHJvYmxl
bS84NjEwODM5NAorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAg
ICAgMS4gTWFrZSB2YXJpb3VzIGNsYXNzZXMgY2xpZW50LXNlcnZlciBhd2FyZSBpbiB0ZXJtcyBv
ZiBJc29TdWJzcGFjZXMuCisgICAgICAgIDIuIE1ha2UgQ29kZUdlbmVyYXRvckpTLnBtIGNsaWVu
dC1zZXJ2ZXIgYXdhcmUgaW4gdGVybXMgb2YgSXNvU3Vic3BhY2VzLgorICAgICAgICAzLiBSZWJh
c2UgYmluZGluZ3MgdGVzdCByZXN1bHRzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01H
Q091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJh
aW50OjpleGVjdXRlSW1wbEltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0
Q29uc3RyYWludC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQXN5bmNJdGVyYXRvci5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01Db25zdHJ1Y3RvckJhc2U6OnN1YnNwYWNlRm9yKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZTo6c3Vic3BhY2VGb3IpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3dQcm9wZXJ0aWVzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93UHJvcGVydGllcy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmg6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxP
YmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV2luZG93UHJveHk6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNv
cmVKU0NsaWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIZWFwRGF0YTo6SlNIZWFw
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjplbnN1cmVIZWFwRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OmluaXROb3JtYWxXb3JsZCk6CisgICAgICAgICog
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNI
ZWFwRGF0YTo6bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjpzdWJzcGFjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNIZWFwRGF0YTo6ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNIZWFwRGF0YTo6c2V0RmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNW
TUNsaWVudERhdGE6Om5vcm1hbFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnRE
YXRhOjpyZW1lbWJlcldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpm
b3JnZXRXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6aGVhcERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OmJ1aWx0aW5OYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6YnVpbHRpbkZ1bmN0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OmRvbUNvbnN0cnVjdG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OmRvbU5hbWVzcGFjZU9iamVjdFNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpkb21XaW5kb3dQcm9wZXJ0aWVz
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OnJ1bnRpbWVBcnJheVNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpydW50aW1lTWV0aG9kU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OnJ1bnRpbWVPYmplY3RTcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6d2luZG93UHJveHlTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6aWRiU2VyaWFsaXphdGlvblNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpmaWxlU3lzdGVtRGlyZWN0b3J5
SGFuZGxlSXRlcmF0b3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6
c2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNWTUNsaWVudERhdGE6OmNsaWVudFN1YnNwYWNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1ZNQ2xpZW50RGF0YTo6Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6c3Vic3BhY2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAg
KEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAg
ICAgICAoR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVQcm90
b3R5cGVEZWNsYXJhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNz
LWlkbHMucGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTRXhwb3NlZFN0YXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkU3RhckRPTUNv
bnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNF
eHBvc2VkU3Rhcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkU3Rh
cjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvcik6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93UmVh
bG1HbG9iYWxTY29wZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFkb3dSZWFsbUdsb2JhbFNj
b3BlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
U2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uc0RPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JT
dHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q0VSZWFjdGlvbnM6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVh
Y3Rpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uczo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXI6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbFRyYWNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsVHJhY2VyRE9N
Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDYWxsVHJhY2VyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDYWxsVHJhY2VyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yRE9NQ29uc3RydWN0
b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlc0RPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
czo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGVET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlv
bmFsbHlSZWFkV3JpdGU6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERPTUpJ
VERPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0RE9NSklUOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERP
TUpJVDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3REZWZhdWx0VG9KU09OLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRU
b0pTT05ET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBv
c2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZERPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZURPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdERPTUNvbnN0cnVj
dG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6c3Vic3BhY2VGb3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWxET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWw6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlRE9NQ29uc3Ry
dWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RE
ZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3lu
dGhldGljQXR0cmlidXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWxlZ2F0ZVRvU2hh
cmVkU3ludGhldGljQXR0cmlidXRlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERvbWFpblNlY3VyaXR5RE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REb21haW5TZWN1cml0eTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWlu
U2VjdXJpdHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERvbWFpblNlY3VyaXR5OjpzdWJz
cGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJs
ZWRCeVNldHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxlZEJ5U2V0dGlu
Z0RPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vic3BhY2VGb3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFbmFibGVkRm9yQ29udGV4dERPTUNvbnN0cnVjdG9y
Ojpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXRET01Db25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Ojpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhj
ZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvbkRPTUNvbnN0cnVj
dG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhj
ZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlv
bjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290RE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVy
YXRlQWRkT3BhcXVlUm9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVBZGRP
cGFxdWVSb290OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZURPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2xvYmFs
T2JqZWN0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2Jh
bE9iamVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBl
Rm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9yKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRl
cmZhY2VET01Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVET01Db25z
dHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6
OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SXRlcmFibGVET01Db25zdHJ1
Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0
ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25fZW50cmllc0NhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RJdGVyYWJsZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEl0ZXJhYmxlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb25ET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
bjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RM
ZWdhY3lGYWN0b3J5RnVuY3Rpb246OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3RQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2Jq
ZWN0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zRE9NQ29uc3RydWN0
b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmg6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvcik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TWFwTGlrZURPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JT
dHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWFwTGlrZTo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWFwTGlrZTo6c3Vic3BhY2VGb3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9yKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkRPTUNvbnN0cnVjdG9yOjpw
cm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0
ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uRE9NQ29uc3RydWN0
b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aERPTUNvbnN0cnVjdG9yOjpw
cm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckRPTUNvbnN0cnVj
dG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3Ip
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9yKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckRPTUNvbnN0cnVjdG9y
Ojpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnN1YnNwYWNlRm9yKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluc0RP
TUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3IpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzRE9NQ29uc3RydWN0b3I6OnBy
b3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluc0RPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVG
b3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVC
dWlsdElucy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lc3BhY2VP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lc3BhY2VPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVzcGFjZU9iamVj
dDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
bl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakRPTUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE9iajo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPcGVyYXRpb25Db25kaXRpb25hbERPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPcGVyYXRpb25D
b25kaXRpb25hbDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnN1YnNw
YWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2VET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZTo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UGx1Z2luSW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZh
Y2U6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBy
b21pc2VSZWplY3Rpb25FdmVudDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlYWRPbmx5TWFwTGlrZURPTUNvbnN0cnVjdG9y
Ojpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVhZE9u
bHlNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFJlYWRPbmx5TWFwTGlrZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0UmVhZE9ubHlTZXRMaWtlRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5
U2V0TGlrZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpzdWJz
cGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9y
dEV4dHJhTWVtb3J5Q29zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRFeHRy
YU1lbW9yeUNvc3RET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFN
ZW1vcnlDb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3Q6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZURPTUNvbnN0cnVjdG9yOjpwcm90
b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXRMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNldExpa2VET01Db25zdHJ1Y3Rv
cjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNldExp
a2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNldExpa2U6OnN1YnNw
YWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmg6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJz
cGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyRE9NQ29uc3Ry
dWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
dHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0
cmluZ2lmaWVyOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uRE9NQ29uc3RydWN0b3I6
OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1
Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5oOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjpzdWJzcGFjZUZvcik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdET01Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmg6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnN1YnNw
YWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlRE9NQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdyYXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0VGFnZ2VkV3JhcHBlckRPTUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JT
dHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VGFnZ2VkV3JhcHBlcjo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFn
Z2VkV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VGFnZ2VkV3JhcHBlcjo6c3Vi
c3BhY2VGb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBl
ZGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0RPTUNvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2Nv
cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEds
b2JhbFNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vi
c3BhY2VGb3IpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAg
ICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
Ok9iamNGYWxsYmFja09iamVjdEltcDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBicmlk
Z2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX21ldGhvZC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlJ1bnRpbWVPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfb2JqZWN0Lmg6CisKIDIwMjItMDItMTUgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIE1ha2UgSGVhcFR5cGUgYW4gZW51bSBjbGFzcy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjA4Niw2ICsyMDg2LDcgQEAgc2V0KE1BS0VfTkFN
RVNfREVQRU5ERU5DSUVTCiApCiBzZXQoU1VQUExFTUVOVEFMX0RFUEVOREVOQ1lfRklMRSAke1dl
YkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vc3VwcGxlbWVudGFsX2RlcGVuZGVuY3kudG1wKQog
c2V0KElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUgJHtXZWJDb3JlX0RFUklWRURfU09VUkNFU19E
SVJ9L0RPTUlzb1N1YnNwYWNlcy5oKQorc2V0KENMSUVOVF9JU09fU1VCU1BBQ0VTX0hFQURFUl9G
SUxFICR7V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9ET01DbGllbnRJc29TdWJzcGFjZXMu
aCkKIHNldChDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEUgJHtXZWJDb3JlX0RFUklWRURfU09VUkNF
U19ESVJ9L0RPTUNvbnN0cnVjdG9ycy5oKQogc2V0KFdJTkRPV19DT05TVFJVQ1RPUlNfRklMRSAk
e1dlYkNvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vRE9NV2luZG93Q29uc3RydWN0b3JzLmlkbCkK
IHNldChXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSAke1dlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsKQpAQCAtMjI3
NCw5ICsyMjc1LDEwIEBAIEdFTkVSQVRFX0JJTkRJTkdTKFdlYkNvcmVCaW5kaW5ncwogICAgIEdF
TkVSQVRPUiBKUwogICAgIFNVUFBMRU1FTlRBTF9ERVBGSUxFICR7U1VQUExFTUVOVEFMX0RFUEVO
REVOQ1lfRklMRX0KICAgICBQUF9FWFRSQV9PVVRQVVQKLSAgICAke0lTT19TVUJTUEFDRVNfSEVB
REVSX0ZJTEV9ICR7Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFfSAke1dJTkRPV19DT05TVFJVQ1RP
UlNfRklMRX0gJHtXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRX0gJHtTSEFET1dS
RUFMTUdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfSAke0RFRElDQVRFRFdPUktFUkdMT0JB
TFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfQorICAgICR7SVNPX1NVQlNQQUNFU19IRUFERVJfRklM
RX0gJHtDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRX0gJHtDT05TVFJVQ1RPUlNfSEVB
REVSX0ZJTEV9ICR7V0lORE9XX0NPTlNUUlVDVE9SU19GSUxFfSAke1dPUktFUkdMT0JBTFNDT1BF
X0NPTlNUUlVDVE9SU19GSUxFfSAke1NIQURPV1JFQUxNR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JT
X0ZJTEV9ICR7REVESUNBVEVEV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEV9CiAg
ICAgUFBfRVhUUkFfQVJHUwogICAgICAgICAtLWlzb1N1YnNwYWNlc0hlYWRlckZpbGUgJHtJU09f
U1VCU1BBQ0VTX0hFQURFUl9GSUxFfQorICAgICAgICAtLWNsaWVudElTT1N1YnNwYWNlc0hlYWRl
ckZpbGUgJHtDTElFTlRfSVNPX1NVQlNQQUNFU19IRUFERVJfRklMRX0KICAgICAgICAgLS1jb25z
dHJ1Y3RvcnNIZWFkZXJGaWxlICR7Q09OU1RSVUNUT1JTX0hFQURFUl9GSUxFfQogICAgICAgICAt
LXdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgJHtXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEV9CiAgICAg
ICAgIC0td29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICR7V09SS0VSR0xPQkFMU0NP
UEVfQ09OU1RSVUNUT1JTX0ZJTEV9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAg
LTksNiArOSw3IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvbG9yRGF0YS5jcHAK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0NvbW1hbmRMaW5l
QVBJTW9kdWxlU291cmNlLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0NvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTUNvbnN0cnVjdG9ycy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01Jc29TdWJz
cGFjZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9N
SklUQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTIwNzYsNiArMjA3Niw3IEBAIEpTX0JJTkRJTkdTX1ND
UklQVFMgPSAkKENPTU1PTl9CSU5ESU5HU18KIFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUg
PSBTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMudHh0CiBTVVBQTEVNRU5UQUxfTUFLRUZJTEVfREVQ
UyA9IFN1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAKIElTT19TVUJTUEFDRVNfSEVBREVSX0ZJ
TEUgPSBET01Jc29TdWJzcGFjZXMuaAorQ0xJRU5UX0lTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUg
PSBET01DbGllbnRJc29TdWJzcGFjZXMuaAogQ09OU1RSVUNUT1JTX0hFQURFUl9GSUxFID0gRE9N
Q29uc3RydWN0b3JzLmgKIFdJTkRPV19DT05TVFJVQ1RPUlNfRklMRSA9IERPTVdpbmRvd0NvbnN0
cnVjdG9ycy5pZGwKIFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFID0gV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCkBAIC0yMDkyLDYgKzIwOTMsNyBAQCBJRExfSU5U
RVJNRURJQVRFX0ZJTEVTID0gXAogICAgICQoU1VQUExFTUVOVEFMX01BS0VGSUxFX0RFUFMpIFwK
ICAgICAkKFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUpIFwKICAgICAkKElTT19TVUJTUEFD
RVNfSEVBREVSX0ZJTEUpIFwKKyAgICAkKENMSUVOVF9JU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxF
KSBcCiAgICAgJChDT05TVFJVQ1RPUlNfSEVBREVSX0ZJTEUpIFwKICAgICAkKFdJTkRPV19DT05T
VFJVQ1RPUlNfRklMRSkgXAogICAgICQoV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJ
TEUpIFwKQEAgLTIxMDYsNyArMjEwOCw3IEBAIElETF9JTlRFUk1FRElBVEVfUEFUVEVSTlMgPSAk
KHN1YnN0IC4sJSwKIAogJChJRExfSU5URVJNRURJQVRFX1BBVFRFUk5TKSA6ICQoUFJFUFJPQ0VT
U19JRExTX1NDUklQVFMpICQoSURMX0FUVFJJQlVURVNfRklMRSkgJChKU19CSU5ESU5HX0lETFMp
ICQoRkVBVFVSRV9BTkRfUExBVEZPUk1fREVGSU5FX0RFUEVOREVOQ0lFUykKIAkkKHNoZWxsIGVj
aG8gJChKU19CSU5ESU5HX0lETFMpIHwgdHIgIiAiICJcbiIgPiBJRExGaWxlTmFtZXNMaXN0LnR4
dCkKLQkkKFBFUkwpICQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMu
cGwgLS1kZWZpbmVzICIkKEZFQVRVUkVfQU5EX1BMQVRGT1JNX0RFRklORVMpIExBTkdVQUdFX0pB
VkFTQ1JJUFQiIC0taWRsRmlsZU5hbWVzTGlzdCBJRExGaWxlTmFtZXNMaXN0LnR4dCAtLWlkbEF0
dHJpYnV0ZXNGaWxlICQoSURMX0FUVFJJQlVURVNfRklMRSkgLS1zdXBwbGVtZW50YWxEZXBlbmRl
bmN5RmlsZSAkKFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUpIC0taXNvU3Vic3BhY2VzSGVh
ZGVyRmlsZSAkKElTT19TVUJTUEFDRVNfSEVBREVSX0ZJTEUpIC0tY29uc3RydWN0b3JzSGVhZGVy
RmlsZSAkKENPTlNUUlVDVE9SU19IRUFERVJfRklMRSkgLS13aW5kb3dDb25zdHJ1Y3RvcnNGaWxl
ICQoV0lORE9XX0NPTlNUUlVDVE9SU19GSUxFKSAtLXdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0
b3JzRmlsZSAkKFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNoYWRvd1Jl
YWxtR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0hBRE9XUkVBTE1HTE9CQUxTQ09QRV9D
T05TVFJVQ1RPUlNfRklMRSkgLS1kZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9y
c0ZpbGUgJChERURJQ0FURURXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1z
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0VSVklDRVdPUktFUkdM
T0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNoYXJlZFdvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3JzRmlsZSAkKFNIQVJFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxF
KSAtLXdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChXT1JLTEVUR0xPQkFMU0NP
UEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tcGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnNGaWxlICQoUEFJTlRXT1JLTEVUR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tYXVk
aW9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoQVVESU9XT1JLTEVUR0xPQkFM
U0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc3VwcGxlbWVudGFsTWFrZWZpbGVEZXBzICQoU1VQ
UExFTUVOVEFMX01BS0VGSUxFX0RFUFMpCisJJChQRVJMKSAkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsIC0tZGVmaW5lcyAiJChGRUFUVVJFX0FORF9QTEFURk9S
TV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWlkbEZpbGVOYW1lc0xpc3QgSURMRmls
ZU5hbWVzTGlzdC50eHQgLS1pZGxBdHRyaWJ1dGVzRmlsZSAkKElETF9BVFRSSUJVVEVTX0ZJTEUp
IC0tc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUgJChTVVBQTEVNRU5UQUxfREVQRU5ERU5DWV9G
SUxFKSAtLWlzb1N1YnNwYWNlc0hlYWRlckZpbGUgJChJU09fU1VCU1BBQ0VTX0hFQURFUl9GSUxF
KSAtLWNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUgJChDTElFTlRfSVNPX1NVQlNQQUNFU19I
RUFERVJfRklMRSkgLS1jb25zdHJ1Y3RvcnNIZWFkZXJGaWxlICQoQ09OU1RSVUNUT1JTX0hFQURF
Ul9GSUxFKSAtLXdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUgJChXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJ
TEUpIC0td29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoV09SS0VSR0xPQkFMU0NP
UEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0tc2hhZG93UmVhbG1HbG9iYWxTY29wZUNvbnN0cnVjdG9y
c0ZpbGUgJChTSEFET1dSRUFMTUdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLWRlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSAkKERFRElDQVRFRFdPUktFUkdM
T0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFKSAtLXNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yc0ZpbGUgJChTRVJWSUNFV09SS0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJ
TEUpIC0tc2hhcmVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnNGaWxlICQoU0hBUkVEV09S
S0VSR0xPQkFMU0NPUEVfQ09OU1RSVUNUT1JTX0ZJTEUpIC0td29ya2xldEdsb2JhbFNjb3BlQ29u
c3RydWN0b3JzRmlsZSAkKFdPUktMRVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1w
YWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgJChQQUlOVFdPUktMRVRHTE9C
QUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkgLS1hdWRpb1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0
cnVjdG9yc0ZpbGUgJChBVURJT1dPUktMRVRHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRSkg
LS1zdXBwbGVtZW50YWxNYWtlZmlsZURlcHMgJChTVVBQTEVNRU5UQUxfTUFLRUZJTEVfREVQUykK
IAogIwogIyBFbWl0IHRoZSBydWxlcyB0byBnZW5lcmF0ZSBiaW5kaW5ncyBmcm9tIElETCBmaWxl
cy4gTm90ZSB0aGF0IHRoZXJlIGFyZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1
dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKK0RPTUdDT3V0
cHV0Q29uc3RyYWludDo6RE9NR0NPdXRwdXRDb25zdHJhaW50KFZNJiB2bSwgSlNIZWFwRGF0YSYg
aGVhcERhdGEpCiAgICAgOiBNYXJraW5nQ29uc3RyYWludCgiRG9tbyIsICJET00gT3V0cHV0Iiwg
Q29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwgQ29uc3RyYWludENvbmN1cnJlbmN5
OjpDb25jdXJyZW50LCBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQogICAgICwgbV92
bSh2bSkKLSAgICAsIG1fY2xpZW50RGF0YShjbGllbnREYXRhKQorICAgICwgbV9oZWFwRGF0YSho
ZWFwRGF0YSkKICAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0uaGVhcC5tdXRhdG9yRXhl
Y3V0aW9uVmVyc2lvbigpKQogewogfQpAQCAtNTksNyArNTksNyBAQCB2b2lkIERPTUdDT3V0cHV0
Q29uc3RyYWludDo6ZXhlY3V0ZUltcGxJCiAgICAgCiAgICAgbV9sYXN0RXhlY3V0aW9uVmVyc2lv
biA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKICAgICAKLSAgICBtX2NsaWVudERh
dGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICBtX2hlYXBEYXRhLmZvckVhY2hP
dXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7
CiAgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoVmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwq
IGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJr
UmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpET01HQ091dHB1
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1
dENvbnN0cmFpbnQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMiAr
MzMsMTIgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSlNWTUNs
aWVudERhdGE7CitjbGFzcyBKU0hlYXBEYXRhOwogCiBjbGFzcyBET01HQ091dHB1dENvbnN0cmFp
bnQgOiBwdWJsaWMgSlNDOjpNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRE9NR0NPdXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBK
U1ZNQ2xpZW50RGF0YSYpOworICAgIERPTUdDT3V0cHV0Q29uc3RyYWludChKU0M6OlZNJiwgSlNI
ZWFwRGF0YSYpOwogICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQoKTsKICAgICAKIHByb3RlY3Rl
ZDoKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIGV4ZWN1dGVJbXBsSW1wbChWaXNpdG9yJik7CiAKICAgICBKU0M6OlZNJiBtX3Zt
OwotICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgSlNIZWFwRGF0YSYgbV9o
ZWFwRGF0YTsKICAgICB1aW50NjRfdCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uOwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Bc3luY0l0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Bc3luY0l0ZXJhdG9yLmgJ
KHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXN5
bmNJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIERPTVdyYXBwZWQgPSB0eXBlbmFtZSBKU1dyYXBwZXI6OkRPTVdyYXBwZWQ7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRE9NQXN5
bmNJdGVyYXRvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHly
aWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTM5
LDcgKzM5LDcgQEAgdm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2U6OnZpc2l0QwogCiBE
RUZJTkVfVklTSVRfQ0hJTERSRU4oSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlKTsKIAotSlND
OjpJc29TdWJzcGFjZSogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNET01CdWlsdGlu
Q29uc3RydWN0b3JCYXNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0
dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5kb21CdWls
dGluQ29uc3RydWN0b3JTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0
cnVjdG9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
IENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yOCw3ICsyOCw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNET01Db25zdHJ1Y3RvckJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoSlNET01CdWlsdGluQ29uc3Ry
dWN0b3JCYXNlKSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KENlbGxUeXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpOwpAQCAtNDgsNyArNDgsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpT
Qzo6SlNGdW5jdGlvbiYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIEpTQzo6V3JpdGVC
YXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNl
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db25zdHJ1Y3RvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0
dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGNhbGxUaHJvd1R5cGVFcgogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29k
ZShKU0M6OmpzTnVsbCgpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNET01Db25zdHJ1Y3Rv
ckJhc2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU0RPTUNvbnN0cnVjdG9yQmFzZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+ZG9tQ29uc3RydWN0b3JTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpTRE9NQ29uc3RydWN0b3JCYXNl
KSk7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKENlbGxUeXBl
LCBKU0RPTUNvbnN0cnVjdG9yQmFzZSk7CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIEpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oQmFzZTo6Z2xvYmFsT2JqZWN0KCkpOyB9CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIGdsb2JhbE9iamVjdCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JO
b3RDYWxsYWJsZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q2FsbGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQWxleGV5IFNodmF5a2EgPHNodmFp
a2FsZXNoQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgcHJvdG90eXBlRm9y
U3RydWN0dXJlKEpTQzo6Vk0mLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYpOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAg
ewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDZWxsVHlwZSkgPT0gc2l6ZW9mKEpTRE9N
Q29uc3RydWN0b3JOb3RDYWxsYWJsZSkpOwogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShDZWxsVHlwZSwgSlNET01Db25zdHJ1Y3Rvck5vdENhbGxhYmxlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
Q2Fub24sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRE9NV3Jh
cHBlZCA9IHR5cGVuYW1lIEpTV3JhcHBlcjo6RE9NV3JhcHBlZDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNET01JdGVyYXRvclByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3Bl
cnRpZXMuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM4LDcgKzEz
OCw3IEBAIGJvb2wgSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpkZWZpbmVPd25Qcm8KICAgICByZXR1
cm4gdHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgIkRl
ZmluaW5nIGEgcHJvcGVydHkgb24gYSBXaW5kb3dQcm9wZXJ0aWVzIG9iamVjdCBpcyBub3QgYWxs
b3dlZC4iX3MpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
ICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSkt
PmRvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgc3RhdGljX2Fzc2VydChDZWxsVHlwZTo6ZGVzdHJveSA9PSBKU0M6OkpTQ2VsbDo6ZGVzdHJv
eSwgIkpTRE9NV2luZG93UHJvcGVydGllcyBpcyBub3QgZGVzdHJ1Y3RpYmxlIGFjdHVhbGx5Iik7
CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwpAQCAtNzIsNyArNzIsNyBAQCBw
cml2YXRlOgogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbE9i
amVjdCYpOwotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NywyNyArNDcsMzkgQEAgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gSlNGaWxlU3lzdGVtRGlyZWN0bwogdGVtcGxhdGU8PgogY29uc3QgSlNDOjpDbGFzc0luZm8g
SlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IkRpcmVjdG9yeSBIYW5kbGUgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yUHJvdG90eXBlKSB9OwogCi1Jc29TdWJzcGFjZSogSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3I6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFjZUZvckltcGwo
Vk0mIHZtKQogewotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7CisgICAgSlNM
b2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGlmIChhdXRvKiBzcGFj
ZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSkK
LSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxl
SXRlcmF0b3I+IHx8ICFKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4p
Ci0gICAgICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2UobWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTRmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yKSk7Ci0gICAgZWxzZQotICAgICAgICBjbGllbnREYXRhLnNldEZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNGaWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IpKTsKLSAgICBhdXRvKiBzcGFjZSA9IGNsaWVu
dERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKTsKKyAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvclNwYWNlKCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IGhlYXBEYXRhLmZp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7CisgICAgaWYgKCFzcGFjZSkg
eworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3Rv
cnlIYW5kbGVJdGVyYXRvcj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yKTsKKyAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSkpOworCiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1Nf
RU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAg
IGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xpZW50OjpJc29TdWJzcGFjZSgqc3BhY2UpOwor
ICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uo
c3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4oY2xpZW50U3BhY2UpKTsKKyAg
ICByZXR1cm4gY2xpZW50U3BhY2U7CiB9CiAKIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yX29uUHJvbWlzZVNldHRsZWRCb2R5KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiwgSlNGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IqIGNhc3RlZFRoaXMpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsMTMgKzQ2LDEzIEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nl
c3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwogCiAgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
U2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgSlNJREJTZXJpYWxpemF0aW9u
R2xvYmFsT2JqZWN0OjpmaW4KICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLUlz
b1N1YnNwYWNlKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTSURCU2VyaWFsaXphdGlvbkdsb2Jh
bE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmlkYlNlcmlhbGl6YXRpb25TcGFj
ZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0
aW9uR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEzICszNiwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
SURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCogY3JlYXRlKEpTQzo6Vk0mLCBKU0M6OlN0cnVj
dHVyZSosIFJlZjxET01XcmFwcGVyV29ybGQ+JiYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7
CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYpOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHku
Y3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dp
bmRvd1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Nyw3ICsxNzcsNyBAQCBXaW5kb3dQ
cm94eSogSlNXaW5kb3dQcm94eTo6dG9XcmFwcGVkKFZNCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTV2luZG93UHJveHk6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1dpbmRvd1Byb3h5OjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT53aW5kb3dQcm94eVNwYWNlKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94eS5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pIHsgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkgeyByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsKHZtKTsgfQogCiAgICAgc3RhdGljIEpTV2luZG93UHJveHkmIGNyZWF0ZShKU0M6OlZNJiwg
QWJzdHJhY3RET01XaW5kb3cmLCBET01XcmFwcGVyV29ybGQmKTsKIApAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTV2luZG93UHJveHkoSlNDOjpWTSYsIEpTQzo6U3Ry
dWN0dXJlJiwgRE9NV3JhcHBlcldvcmxkJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJiwgQWJzdHJhY3RET01XaW5kb3cmKTsKLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAKICAgICBSZWY8RE9NV3JhcHBl
cldvcmxkPiBtX3dvcmxkOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJET01HQ091dHB1dENvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlLmgiCkBAIC01
MywxNSArNTQsMTQgQEAKICNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCiAjaW5jbHVkZSAicnVu
dGltZV9tZXRob2QuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgorI2luY2x1ZGUgPG11
dGV4PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShW
TSYgdm0pCi0gICAgOiBtX2J1aWx0aW5GdW5jdGlvbnModm0pCi0gICAgLCBtX2J1aWx0aW5OYW1l
cyh2bSkKLSAgICAsIG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxU
eXBlOjpBcmdzPFJ1bnRpbWVBcnJheT4oKSkKK0pTSGVhcERhdGE6OkpTSGVhcERhdGEoSGVhcCYg
aGVhcCkKKyAgICA6IG1fcnVudGltZUFycmF5SGVhcENlbGxUeXBlKEpTQzo6SXNvSGVhcENlbGxU
eXBlOjpBcmdzPFJ1bnRpbWVBcnJheT4oKSkKICAgICAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxs
VHlwZShKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2Jq
ZWN0PigpKQogICAgICwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZShKU0M6Oklzb0hlYXBDZWxs
VHlwZTo6QXJnczxKU1dpbmRvd1Byb3h5PigpKQogICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0RP
TVdpbmRvdyhKU0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0RPTVdpbmRvdz4oKSkKQEAgLTgx
LDE5ICs4MSw1MyBAQCBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAg
ICwgbV9oZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlKEpTQzo6SXNvSGVh
cENlbGxUeXBlOjpBcmdzPEpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU+KCkpCiAjZW5kaWYKICAg
ICAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KEpTQzo6
SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4oKSkK
LSAgICAsIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Up
Ci0gICAgLCBtX2RvbUNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0RPTUNvbnN0cnVjdG9yQmFzZSkKLSAgICAsIG1fZG9t
TmFtZXNwYWNlT2JqZWN0U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhl
YXBDZWxsVHlwZSgpLCBKU0RPTU9iamVjdCkKLSAgICAsIG1fZG9tV2luZG93UHJvcGVydGllc1Nw
YWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNE
T01XaW5kb3dQcm9wZXJ0aWVzKQotICAgICwgbV9ydW50aW1lQXJyYXlTcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZSwgUnVudGltZUFycmF5
KQotICAgICwgbV9ydW50aW1lTWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBSdW50aW1lTWV0aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUK
LSAgICAsIG1fcnVudGltZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIG1f
cnVudGltZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkK
LSAgICAsIG1fd2luZG93UHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBtX3dp
bmRvd1Byb3h5SGVhcENlbGxUeXBlLCBKU1dpbmRvd1Byb3h5KQotICAgICwgbV9pZGJTZXJpYWxp
emF0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JK
U0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9i
amVjdCkKKyAgICAsIG1fZG9tQnVpbHRpbkNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2UpCisgICAgLCBtX2RvbUNvbnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0RPTUNvbnN0cnVjdG9yQmFzZSkKKyAgICAsIG1fZG9t
TmFtZXNwYWNlT2JqZWN0U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU0RPTU9iamVjdCkKKyAgICAsIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01XaW5k
b3dQcm9wZXJ0aWVzKQorICAgICwgbV9ydW50aW1lQXJyYXlTcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBtX3J1bnRpbWVBcnJheUhlYXBDZWxsVHlwZSwgUnVudGltZUFycmF5KQorICAgICwg
bV9ydW50aW1lTWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBSdW50aW1lTWV0aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUKKyAgICAsIG1fcnVu
dGltZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1fcnVudGltZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkKKyAgICAsIG1fd2luZG93
UHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3dpbmRvd1Byb3h5SGVhcENlbGxU
eXBlLCBKU1dpbmRvd1Byb3h5KQorICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKICAgICAsIG1fc3Vic3Bh
Y2VzKG1ha2VVbmlxdWU8RE9NSXNvU3Vic3BhY2VzPigpKQogewogfQogCitKU0hlYXBEYXRhKiBK
U0hlYXBEYXRhOjplbnN1cmVIZWFwRGF0YShIZWFwJiBoZWFwKQoreworICAgIGlmICghT3B0aW9u
czo6dXNlR2xvYmFsR0MoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBKU0hlYXBEYXRhKGhlYXApOwor
CisgICAgc3RhdGljIEpTSGVhcERhdGEqIHNpbmdsZXRvbiA9IG51bGxwdHI7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBb
Jl0geworICAgICAgICBzaW5nbGV0b24gPSBuZXcgSlNIZWFwRGF0YShoZWFwKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gc2luZ2xldG9uOworfQorCisjZGVmaW5lIENMSUVOVF9JU09fU1VCU1BBQ0Vf
SU5JVChzdWJzcGFjZSkgc3Vic3BhY2UobV9oZWFwRGF0YS0+c3Vic3BhY2UpCisKK0pTVk1DbGll
bnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCisgICAgOiBtX2J1aWx0aW5GdW5jdGlvbnMo
dm0pCisgICAgLCBtX2J1aWx0aW5OYW1lcyh2bSkKKyAgICAsIG1faGVhcERhdGEoSlNIZWFwRGF0
YTo6ZW5zdXJlSGVhcERhdGEodm0uaGVhcCkpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lO
SVQobV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChtX2RvbUNvbnN0cnVjdG9yU3BhY2UpCisgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQobV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VC
U1BBQ0VfSU5JVChtX3J1bnRpbWVBcnJheVNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFD
RV9JTklUKG1fcnVudGltZU1ldGhvZFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9J
TklUKG1fcnVudGltZU9iamVjdFNwYWNlKQorICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklU
KG1fd2luZG93UHJveHlTcGFjZSkKKyAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX2lk
YlNlcmlhbGl6YXRpb25TcGFjZSkKKyAgICAsIG1fY2xpZW50U3Vic3BhY2VzKG1ha2VVbmlxdWU8
RE9NQ2xpZW50SXNvU3Vic3BhY2VzPigpKQoreworfQorCisjdW5kZWYgQ0xJRU5UX0lTT19TVUJT
UEFDRV9JTklUCisKIEpTVk1DbGllbnREYXRhOjp+SlNWTUNsaWVudERhdGEoKQogewogICAgIEFT
U0VSVChtX3dvcmxkU2V0LmNvbnRhaW5zKG1fbm9ybWFsV29ybGQuZ2V0KCkpKTsKQEAgLTE0Miw3
ICsxNzYsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAg
SlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAg
ICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRl
ci4KIAotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KG1ha2VVbmlxdWU8RE9NR0NP
dXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CisgICAgdm0tPmhlYXAuYWRkTWFy
a2luZ0NvbnN0cmFpbnQobWFrZVVuaXF1ZTxET01HQ091dHB1dENvbnN0cmFpbnQ+KCp2bSwgY2xp
ZW50RGF0YS0+aGVhcERhdGEoKSkpOwogCiAgICAgY2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9
IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKCp2bSwgRE9NV3JhcHBlcldvcmxkOjpUeXBlOjpOb3Jt
YWwpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlcih0eXBlID09IFdvcmtlclRocmVhZFR5cGU6OkRlZGljYXRl
ZFdvcmtlciB8fCB0eXBlID09IFdvcmtlclRocmVhZFR5cGU6OldvcmtsZXQpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0Ns
aWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMjUsNTQgKzI1LDI2IEBACiAjaW5jbHVkZSAiV2ViQ29yZUJ1aWx0aW5OYW1lcy5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5zLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkVHlw
ZS5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IERPTUNsaWVudElzb1N1YnNwYWNlczsKIGNsYXNzIERPTUlzb1N1YnNwYWNlczsKIAotY2xhc3Mg
SlNWTUNsaWVudERhdGEgOiBwdWJsaWMgSlNDOjpWTTo6Q2xpZW50RGF0YSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSlNWTUNsaWVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LSAgICBmcmllbmQgY2xhc3MgVk1Xb3JsZEl0ZXJhdG9yOwotCitjbGFzcyBKU0hlYXBEYXRhIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0hlYXBEYXRhKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBmcmllbmQgY2xhc3MgSlNWTUNsaWVudERhdGE7CiBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgSlNWTUNsaWVudERhdGEoSlNDOjpWTSYpOwotCi0gICAgdmlydHVhbCB+SlNW
TUNsaWVudERhdGEoKTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBpbml0
Tm9ybWFsV29ybGQoSlNDOjpWTSosIFdvcmtlclRocmVhZFR5cGUpOwotCi0gICAgRE9NV3JhcHBl
cldvcmxkJiBub3JtYWxXb3JsZCgpIHsgcmV0dXJuICptX25vcm1hbFdvcmxkOyB9CisgICAgSlNI
ZWFwRGF0YShKU0M6OkhlYXAmKTsKIAotICAgIHZvaWQgZ2V0QWxsV29ybGRzKFZlY3RvcjxSZWY8
RE9NV3JhcHBlcldvcmxkPj4mKTsKLQotICAgIHZvaWQgcmVtZW1iZXJXb3JsZChET01XcmFwcGVy
V29ybGQmIHdvcmxkKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3dvcmxkU2V0LmNvbnRhaW5z
KCZ3b3JsZCkpOwotICAgICAgICBtX3dvcmxkU2V0LmFkZCgmd29ybGQpOwotICAgIH0KLQotICAg
IHZvaWQgZm9yZ2V0V29ybGQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3dvcmxkU2V0LmNvbnRhaW5zKCZ3b3JsZCkpOwotICAgICAgICBtX3dvcmxkU2V0
LnJlbW92ZSgmd29ybGQpOwotICAgIH0KKyAgICBzdGF0aWMgSlNIZWFwRGF0YSogZW5zdXJlSGVh
cERhdGEoSlNDOjpIZWFwJik7CiAKLSAgICBXZWJDb3JlQnVpbHRpbk5hbWVzJiBidWlsdGluTmFt
ZXMoKSB7IHJldHVybiBtX2J1aWx0aW5OYW1lczsgfQotICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyYg
YnVpbHRpbkZ1bmN0aW9ucygpIHsgcmV0dXJuIG1fYnVpbHRpbkZ1bmN0aW9uczsgfQotICAgIAot
ICAgIEpTQzo6SXNvU3Vic3BhY2UmIGRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1
cm4gbV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2Um
IGRvbUNvbnN0cnVjdG9yU3BhY2UoKSB7IHJldHVybiBtX2RvbUNvbnN0cnVjdG9yU3BhY2U7IH0K
LSAgICBKU0M6Oklzb1N1YnNwYWNlJiBkb21OYW1lc3BhY2VPYmplY3RTcGFjZSgpIHsgcmV0dXJu
IG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiBkb21X
aW5kb3dQcm9wZXJ0aWVzU3BhY2UoKSB7IHJldHVybiBtX2RvbVdpbmRvd1Byb3BlcnRpZXNTcGFj
ZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVBcnJheVNwYWNlKCkgeyByZXR1cm4g
bV9ydW50aW1lQXJyYXlTcGFjZTsgfQotICAgIEpTQzo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVNZXRo
b2RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU1ldGhvZFNwYWNlOyB9Ci0gICAgSlNDOjpJc29T
dWJzcGFjZSYgcnVudGltZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lT2JqZWN0U3Bh
Y2U7IH0KLSAgICBKU0M6Oklzb1N1YnNwYWNlJiB3aW5kb3dQcm94eVNwYWNlKCkgeyByZXR1cm4g
bV93aW5kb3dQcm94eVNwYWNlOyB9Ci0gICAgSlNDOjpJc29TdWJzcGFjZSYgaWRiU2VyaWFsaXph
dGlvblNwYWNlKCkgeyByZXR1cm4gbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7IH0KLSAgICBKU0M6
Oklzb1N1YnNwYWNlKiBmaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsg
cmV0dXJuIG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6
dW5pcXVlX3B0cjxKU0M6Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2ZpbGVTeXN0ZW1EaXJlY3Rv
cnlIYW5kbGVJdGVyYXRvclNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFjZSwgbnVsbHB0cik7IH0K
KyAgICBMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgRE9NSXNvU3Vic3BhY2Vz
JiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9zdWJzcGFjZXMuZ2V0KCk7IH0KIAogICAgIFZlY3Rv
cjxKU0M6Oklzb1N1YnNwYWNlKj4mIG91dHB1dENvbnN0cmFpbnRTcGFjZXMoKSB7IHJldHVybiBt
X291dHB1dENvbnN0cmFpbnRTcGFjZXM7IH0KIApAQCAtODMsMTQgKzU1LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGZ1bmMoKnNwYWNlKTsKICAgICB9CiAKLSAgICBET01Jc29TdWJzcGFjZXMm
IHN1YnNwYWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNlcy5nZXQoKTsgfQorICAgIEpTQzo6SXNv
U3Vic3BhY2UqIGZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkgeyByZXR1
cm4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZS5nZXQoKTsgfQorICAg
IHZvaWQgc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlx
dWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQogCiBw
cml2YXRlOgotICAgIEhhc2hTZXQ8RE9NV3JhcHBlcldvcmxkKj4gbV93b3JsZFNldDsKLSAgICBS
ZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX25vcm1hbFdvcmxkOwotCi0gICAgSlNCdWlsdGluRnVu
Y3Rpb25zIG1fYnVpbHRpbkZ1bmN0aW9uczsKLSAgICBXZWJDb3JlQnVpbHRpbk5hbWVzIG1fYnVp
bHRpbk5hbWVzOworICAgIExvY2sgbV9sb2NrOwogCiAgICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUg
bV9ydW50aW1lQXJyYXlIZWFwQ2VsbFR5cGU7CiAgICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9y
dW50aW1lT2JqZWN0SGVhcENlbGxUeXBlOwpAQCAtMTI1LDggKzk0LDc4IEBAIHByaXZhdGU6CiAg
ICAgSlNDOjpJc29TdWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CiAgICAgSlNDOjpJc29TdWJz
cGFjZSBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJ
c29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKKwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxET01Jc29TdWJzcGFjZXM+IG1fc3Vic3BhY2VzOwogICAgIFZl
Y3RvcjxKU0M6Oklzb1N1YnNwYWNlKj4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOwogfTsKIAor
CitjbGFzcyBKU1ZNQ2xpZW50RGF0YSA6IHB1YmxpYyBKU0M6OlZNOjpDbGllbnREYXRhIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU1ZNQ2xpZW50RGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIGZyaWVuZCBjbGFzcyBWTVdvcmxkSXRlcmF0b3I7CisKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBKU1ZNQ2xpZW50RGF0YShKU0M6OlZNJik7CisKKyAgICB2aXJ0dWFsIH5KU1ZN
Q2xpZW50RGF0YSgpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGluaXRO
b3JtYWxXb3JsZChKU0M6OlZNKiwgV29ya2VyVGhyZWFkVHlwZSk7CisKKyAgICBET01XcmFwcGVy
V29ybGQmIG5vcm1hbFdvcmxkKCkgeyByZXR1cm4gKm1fbm9ybWFsV29ybGQ7IH0KKworICAgIHZv
aWQgZ2V0QWxsV29ybGRzKFZlY3RvcjxSZWY8RE9NV3JhcHBlcldvcmxkPj4mKTsKKworICAgIHZv
aWQgcmVtZW1iZXJXb3JsZChET01XcmFwcGVyV29ybGQmIHdvcmxkKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX3dvcmxkU2V0LmNvbnRhaW5zKCZ3b3JsZCkpOworICAgICAgICBtX3dvcmxkU2V0
LmFkZCgmd29ybGQpOworICAgIH0KKworICAgIHZvaWQgZm9yZ2V0V29ybGQoRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3dvcmxkU2V0LmNvbnRhaW5zKCZ3
b3JsZCkpOworICAgICAgICBtX3dvcmxkU2V0LnJlbW92ZSgmd29ybGQpOworICAgIH0KKworICAg
IEpTSGVhcERhdGEmIGhlYXBEYXRhKCkgeyByZXR1cm4gKm1faGVhcERhdGE7IH0KKworICAgIFdl
YkNvcmVCdWlsdGluTmFtZXMmIGJ1aWx0aW5OYW1lcygpIHsgcmV0dXJuIG1fYnVpbHRpbk5hbWVz
OyB9CisgICAgSlNCdWlsdGluRnVuY3Rpb25zJiBidWlsdGluRnVuY3Rpb25zKCkgeyByZXR1cm4g
bV9idWlsdGluRnVuY3Rpb25zOyB9CisgICAgCisgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIGRvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21CdWlsdGluQ29u
c3RydWN0b3JTcGFjZTsgfQorICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBkb21Db25z
dHJ1Y3RvclNwYWNlKCkgeyByZXR1cm4gbV9kb21Db25zdHJ1Y3RvclNwYWNlOyB9CisgICAgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGRvbU5hbWVzcGFjZU9iamVjdFNwYWNlKCkgeyByZXR1
cm4gbV9kb21OYW1lc3BhY2VPYmplY3RTcGFjZTsgfQorICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlJiBkb21XaW5kb3dQcm9wZXJ0aWVzU3BhY2UoKSB7IHJldHVybiBtX2RvbVdpbmRvd1By
b3BlcnRpZXNTcGFjZTsgfQorICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBydW50aW1l
QXJyYXlTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZUFycmF5U3BhY2U7IH0KKyAgICBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSYgcnVudGltZU1ldGhvZFNwYWNlKCkgeyByZXR1cm4gbV9ydW50
aW1lTWV0aG9kU3BhY2U7IH0KKyAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcnVudGlt
ZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lT2JqZWN0U3BhY2U7IH0KKyAgICBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgd2luZG93UHJveHlTcGFjZSgpIHsgcmV0dXJuIG1fd2lu
ZG93UHJveHlTcGFjZTsgfQorICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBpZGJTZXJp
YWxpemF0aW9uU3BhY2UoKSB7IHJldHVybiBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsgfQorICAg
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBmaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4gc3Bh
Y2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhj
aGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9CisKKyAgICBET01DbGllbnRJc29TdWJzcGFjZXMmIGNs
aWVudFN1YnNwYWNlcygpIHsgcmV0dXJuICptX2NsaWVudFN1YnNwYWNlcy5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIEhhc2hTZXQ8RE9NV3JhcHBlcldvcmxkKj4gbV93b3JsZFNldDsKKyAgICBS
ZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX25vcm1hbFdvcmxkOworCisgICAgSlNCdWlsdGluRnVu
Y3Rpb25zIG1fYnVpbHRpbkZ1bmN0aW9uczsKKyAgICBXZWJDb3JlQnVpbHRpbk5hbWVzIG1fYnVp
bHRpbk5hbWVzOworCisgICAgSlNIZWFwRGF0YSogbV9oZWFwRGF0YTsKKyAgICBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlOworICAgIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fZG9tQ29uc3RydWN0b3JTcGFjZTsKKyAgICBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSBtX2RvbU5hbWVzcGFjZU9iamVjdFNwYWNlOworICAgIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fZG9tV2luZG93UHJvcGVydGllc1NwYWNlOworICAgIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fcnVudGltZUFycmF5U3BhY2U7CisgICAgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lTWV0aG9kU3BhY2U7CisgICAgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7CisgICAgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOworICAgIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvclNwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxET01DbGllbnRJc29TdWJzcGFjZXM+
IG1fY2xpZW50U3Vic3BhY2VzOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0JKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgogIyBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAjIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1Pgog
IyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAgLTMwOTMsMTMgKzMwOTMsMTMgQEAgc3ViIEdlbmVy
YXRlSGVhZGVyCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSlcbiIpOworICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAge1xuIik7CiAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpT
Qzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSlcbiIpOwogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjtcbiIpOwogICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pO1xuIik7CiAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7XG4iKTsKIAog
ICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewpAQCAt
NDg3MSwzNyArNDg3MSw1MCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIAogICAg
IEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uKCRpbnRlcmZhY2UpIGlmICRpbnRlcmZhY2UtPml0
ZXJhYmxlOwogCisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEuaCIpOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9y
TWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJz
cGFjZUlubGluZXMuaD4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SXNvU3Vic3Bh
Y2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKVxuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogJHtjbGFzc05h
bWV9OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTtcbiIpOwot
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vi
c3BhY2VzKCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCkpXG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHNwYWNlO1xuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZh
Y2VOYW1lfS5nZXQoKSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7XG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNwYWNlKSB7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7XG4iKTsKKwogICAgIGlmIChJc0RP
TUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENl
bGxUeXBlRm9yJHtjbGFzc05hbWV9LCAke2NsYXNzTmFtZX0pO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfSwgJHtj
bGFzc05hbWV9KTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgJHtjbGFzc05hbWV9PiB8fCAhJHtjbGFzc05hbWV9OjpuZWVkc0Rlc3RydWN0aW9u
KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4p
XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCAk
e2NsYXNzTmFtZX0pO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGVsc2Vc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCAke2NsYXNzTmFtZX0pO1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4g
fHwgISR7Y2xhc3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFzc05hbWV9PilcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAk
e2NsYXNzTmFtZX0pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBl
bHNlXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsICR7Y2xhc3NOYW1lfSk7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0u
Z2V0KCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJ
TihcInVucmVhY2hhYmxlLWNvZGVcIilcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludClcbiIpOwotIyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoJiR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTtc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05h
bWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludClcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9S
RV9XQVJOSU5HU19FTkRcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5J
TkdTX0VORFxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHNwYWNlO1xu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNl
TmFtZX0uZ2V0KCk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAg
ICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewpAQCAtNjc4NSwyOSArNjc5OCw0MCBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9ICR7aXRlcmF0b3JOYW1lfUJhc2U7CiAgICAgREVDTEFSRV9J
TkZPOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4g
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
aWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgICAgIGF1
dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIGlmIChhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHNwYWNlOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRl
cmF0b3JOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9
PikKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksICR7aXRlcmF0b3JOYW1lfSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhl
YXBDZWxsVHlwZSgpLCAke2l0ZXJhdG9yTmFtZX0pOwotICAgICAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOworICAgICAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgICAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRl
cmF0b3JOYW1lfS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
ICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICAgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsKKyAgICAgICAgaWYgKCFzcGFj
ZSkgeworICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7
aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRlcmF0b3JOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7Cisg
ICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4pCisgICAgICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsICR7aXRlcmF0b3JOYW1lfSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCAke2l0ZXJhdG9yTmFtZX0pOworICAgICAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxl
LWNvZGVcIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7aXRlcmF0
b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQor
ICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAg
ICByZXR1cm4gc3BhY2U7CisgICAgICAgIH0KKworICAgICAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzU4OCw3
ICs3NjEyLDcgQEAgc3ViIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24KICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgREVDTEFSRV9JTkZPO1xuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3M+XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAge1xuIik7CiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRSgke3Byb3RvdHlwZUNsYXNzTmFtZX0sIEJhc2UpO1xuIik7CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTtcbiIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMu
cGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9j
ZXNzLWlkbHMucGwJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBAIG15ICRpZGxGaWxlTmFtZXNMaXN0OwogbXkgJHRlc3RHbG9iYWxDb250ZXh0TmFtZTsKIG15
ICRzdXBwbGVtZW50YWxEZXBlbmRlbmN5RmlsZTsKIG15ICRpc29TdWJzcGFjZXNIZWFkZXJGaWxl
OworbXkgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGU7CiBteSAkY29uc3RydWN0b3JzSGVh
ZGVyRmlsZTsKIG15ICR3aW5kb3dDb25zdHJ1Y3RvcnNGaWxlOwogbXkgJHdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzRmlsZTsKQEAgLTgxLDYgKzgyLDcgQEAgR2V0T3B0aW9ucygnZGVmaW5l
cz1zJyA9PiBcJGRlZmluZXMsCiAgICAgICAgICAgICd0ZXN0R2xvYmFsQ29udGV4dE5hbWU9cycg
PT4gXCR0ZXN0R2xvYmFsQ29udGV4dE5hbWUsCiAgICAgICAgICAgICdzdXBwbGVtZW50YWxEZXBl
bmRlbmN5RmlsZT1zJyA9PiBcJHN1cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlLAogICAgICAgICAg
ICAnaXNvU3Vic3BhY2VzSGVhZGVyRmlsZT1zJyA9PiBcJGlzb1N1YnNwYWNlc0hlYWRlckZpbGUs
CisgICAgICAgICAgICdjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlPXMnID0+IFwkY2xpZW50
SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSwKICAgICAgICAgICAgJ2NvbnN0cnVjdG9yc0hlYWRlckZp
bGU9cycgPT4gXCRjb25zdHJ1Y3RvcnNIZWFkZXJGaWxlLAogICAgICAgICAgICAnd2luZG93Q29u
c3RydWN0b3JzRmlsZT1zJyA9PiBcJHdpbmRvd0NvbnN0cnVjdG9yc0ZpbGUsCiAgICAgICAgICAg
ICd3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGU9cycgPT4gXCR3b3JrZXJHbG9iYWxT
Y29wZUNvbnN0cnVjdG9yc0ZpbGUsCkBAIC0xMTQsNiArMTE2LDcgQEAgZGllKCdNdXN0IHNwZWNp
ZnkgSURMIGF0dHJpYnV0ZXMgZmlsZSB1cwogCiAkc3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUg
PSBDeWd3aW5QYXRoSWZOZWVkZWQoJHN1cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlKTsKICRpc29T
dWJzcGFjZXNIZWFkZXJGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCRpc29TdWJzcGFjZXNIZWFk
ZXJGaWxlKTsKKyRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlID0gQ3lnd2luUGF0aElmTmVl
ZGVkKCRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJGaWxlKTsKICRjb25zdHJ1Y3RvcnNIZWFkZXJG
aWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCRjb25zdHJ1Y3RvcnNIZWFkZXJGaWxlKTsKICR3aW5k
b3dDb25zdHJ1Y3RvcnNGaWxlID0gQ3lnd2luUGF0aElmTmVlZGVkKCR3aW5kb3dDb25zdHJ1Y3Rv
cnNGaWxlKTsKICR3b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yc0ZpbGUgPSBDeWd3aW5QYXRo
SWZOZWVkZWQoJHdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzRmlsZSk7CkBAIC0xNzUsNiAr
MTc4LDcgQEAgbXkgJGlzb1N1YnNwYWNlc0hlYWRlckNvZGUgPSA8PEVORDsKICNwcmFnbWEgb25j
ZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBjbGFzcyBE
T01Jc29TdWJzcGFjZXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERPTUlzb1N1YnNwYWNl
cyk7CkBAIC0xODMsNiArMTg3LDIyIEBAIHB1YmxpYzoKICAgICBET01Jc29TdWJzcGFjZXMoKSA9
IGRlZmF1bHQ7CiBFTkQKIAorbXkgJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckNvZGUgPSA8PEVO
RDsKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKworY2xhc3MgRE9NQ2xpZW50SXNvU3Vic3BhY2VzIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShET01DbGllbnRJc29TdWJzcGFjZXMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEKERPTUNsaWVudElzb1N1YnNwYWNlcyk7CitwdWJsaWM6CisgICAgRE9NQ2xpZW50SXNv
U3Vic3BhY2VzKCkgPSBkZWZhdWx0OworRU5ECisKIG15IEBjb25zdHJ1Y3RvcnMgPSAoKTsKIG15
ICRjb25zdHJ1Y3RvcnNIZWFkZXJDb2RlID0gPDxFTkQ7CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KQEAgLTI0OCw5ICsyNjgsMTEgQEAgZm9yZWFjaCBteSAkaWRsRmlsZU5hbWUgKHNvcnQg
a2V5cyAlaWRsRgogCiAgICAgbXkgJGlzQ2FsbGJhY2tJbnRlcmZhY2UgPSBpc0NhbGxiYWNrSW50
ZXJmYWNlRnJvbUlETCgkaWRsRmlsZSk7CiAgICAgaWYgKCEkaXNDYWxsYmFja0ludGVyZmFjZSkg
ewotICAgICAgICAkaXNvU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5pcXVlX3B0
cjxKU0M6Oklzb1N1YnNwYWNlPiBtX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfTtcbiI7Cisg
ICAgICAgICRpc29TdWJzcGFjZXNIZWFkZXJDb2RlIC49ICIgICAgc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPiBtX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfTtcbiI7CisgICAgICAgICRj
bGllbnRJU09TdWJzcGFjZXNIZWFkZXJDb2RlIC49ICIgICAgc3RkOjp1bmlxdWVfcHRyPEdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4gbV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX07XG4i
OwogICAgICAgICBpZiAoY29udGFpbnNJdGVyYWJsZUludGVyZmFjZUZyb21JREwoJGlkbEZpbGUp
KSB7Ci0gICAgICAgICAgICAkaXNvU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAiICAgIHN0ZDo6dW5p
cXVlX3B0cjxKU0M6Oklzb1N1YnNwYWNlPiBtX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfUl0
ZXJhdG9yO1xuIjsKKyAgICAgICAgICAgICRpc29TdWJzcGFjZXNIZWFkZXJDb2RlIC49ICIgICAg
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPiBtX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1l
fUl0ZXJhdG9yO1xuIjsKKyAgICAgICAgICAgICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJDb2Rl
IC49ICIgICAgc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4gbV9jbGllbnRT
dWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX1JdGVyYXRvcjtcbiI7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTMyNiw2ICszNDgsMTIgQEAgaWYgKCRpc29TdWJzcGFjZXNIZWFkZXJGaWxlKSB7CiAg
ICAgV3JpdGVGaWxlSWZDaGFuZ2VkKCRpc29TdWJzcGFjZXNIZWFkZXJGaWxlLCAkaXNvU3Vic3Bh
Y2VzSGVhZGVyQ29kZSk7CiB9CiAKK2lmICgkY2xpZW50SVNPU3Vic3BhY2VzSGVhZGVyRmlsZSkg
eworICAgICRjbGllbnRJU09TdWJzcGFjZXNIZWFkZXJDb2RlIC49ICJ9O1xuIjsKKyAgICAkY2xp
ZW50SVNPU3Vic3BhY2VzSGVhZGVyQ29kZSAuPSAifSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxuIjsK
KyAgICBXcml0ZUZpbGVJZkNoYW5nZWQoJGNsaWVudElTT1N1YnNwYWNlc0hlYWRlckZpbGUsICRj
bGllbnRJU09TdWJzcGFjZXNIZWFkZXJDb2RlKTsKK30KKwogaWYgKCRjb25zdHJ1Y3RvcnNIZWFk
ZXJGaWxlKSB7CiAgICAgbXkgJGNvbnN0cnVjdG9yc0xlbmd0aCA9IEBjb25zdHJ1Y3RvcnM7CiAg
ICAgJGNvbnN0cnVjdG9yc0hlYWRlckNvZGUgLj0gIn07XG4iOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3Bw
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAj
aW5jbHVkZSAiSlNET01XaW5kb3cuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgor
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCkBAIC0zNjMsMjMgKzM2NCwzNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNE
T01XaW5kb3dfVGVzCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OmdldDxq
c0RPTVdpbmRvd19UZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3JHZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1KU0M6
Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQor
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRE9NV2luZG93OjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JET01XaW5kb3cuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzcGFjZXMubV9z
dWJzcGFjZUZvckRPTVdpbmRvdyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdywg
SlNET01XaW5kb3cpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JET01X
aW5kb3cuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNET01XaW5k
b3csIEpTRE9NV2luZG93KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNET01XaW5kb3c6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNET01XaW5kb3c6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19F
TkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsKIH0KIAogdm9pZCBKU0RPTVdp
bmRvdzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTRE9NV2luZG93LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwx
MyArNTAsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0
Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7
CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogICAgIERPTVdpbmRvdyYgd3JhcHBlZCgpIGNvbnN0
CiAgICAgewpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0
YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0RP
TVdpbmRvd1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgpAQCAtMTY0LDIzICsxNjUsMzQgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzRGVkaWNh
dGVkV29yawogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZT46OmdldDxqc0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlX0V4cG9zZWRTdGFyQ29uc3Ry
dWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5h
bWUpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNw
YWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBz
cGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1
ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hl
YXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUsIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9k
ZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OworICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUs
IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKIH0KIAogdm9pZCBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEzICs0
NywxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHBy
IChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAg
ICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiAgICAgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUmIHdy
YXBwZWQoKSBjb25zdAogICAgIHsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNl
QWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRTdGFy
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3
IEBACiAjaW5jbHVkZSAiSlNFeHBvc2VkU3Rhci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNF
eHBvc2VkU3RhclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZSgpOwpAQCAtMjI4LDI3ICsyMjksMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzRXhwb3NlZFN0YXJQcgogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNFeHBvc2VkU3Rhcj46
OmNhbGw8anNFeHBvc2VkU3RhclByb3RvdHlwZUZ1bmN0aW9uX29wZXJhdGlvbkp1c3RGb3JXb3Jr
ZXJDb250ZXh0c0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAib3BlcmF0
aW9uSnVzdEZvcldvcmtlckNvbnRleHRzIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTRXhw
b3NlZFN0YXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU0V4cG9zZWRTdGFyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkU3Rhci5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rhcj4gfHwgIUpT
RXhwb3NlZFN0YXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rhcj4pCi0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUoKSwgSlNFeHBvc2VkU3Rhcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvckV4cG9zZWRTdGFyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU0V4cG9zZWRTdGFy
KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0
KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvckV4cG9zZWRTdGFyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisK
KyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRTdGFyPiB8fCAhSlNFeHBvc2VkU3Rh
cjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rhcj4pCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkU3Rhcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkU3Rhcik7CisgICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNFeHBvc2VkU3Rhcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Cisg
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0V4cG9zZWRTdGFyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvckV4cG9zZWRTdGFyLmdldCgpOwogfQogCiB2b2lkIEpTRXhwb3NlZFN0YXI6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRTdGFyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFN0
YXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEz
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1v
ZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0K
LSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlND
OjpIZWFwQW5hbHl6ZXImKTsKICAgICBFeHBvc2VkU3RhciYgd3JhcHBlZCgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
Miw3IEBACiAjaW5jbHVkZSAiSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKQEAgLTEwOSw3ICsxMTAsNyBAQCBwdWJs
aWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjQ2
LDI3ICsyNDcsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzRXhwb3NlZFRvV29yawog
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+OjpjYWxs
PGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlRnVuY3Rpb25fZG9Tb21ldGhpbmdC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImRvU29tZXRoaW5nIik7CiB9
CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3c+IHx8ICFKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4pCi0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlKCksIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KTsKLSAgICBlbHNl
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZSgpLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7Ci0gICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5nZXQo
KTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdz4gfHwgIUpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpuZWVkc0Rlc3RydWN0aW9u
KTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4pCisgICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3cgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5nZXQoKTsKIH0KIAog
dm9pZCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCwxMyArNTAsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAg
IEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QmLCBSZWY8RXhwb3NlZFRvV29ya2VyQW5kV2luZG93PiYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCkBAIC0xNjMsMjMgKzE2NCwzNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIo
anNQYWludFdvcmtsZXRHCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlPjo6Z2V0PGpzUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVfUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwot
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1f
aGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSwgSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50
V29ya2xldEdsb2JhbFNjb3BlLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOwor
ICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRh
Lm1faGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSwgSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlLmdldCgpOwogfQogCiB2
b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsMTMgKzQ3LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKICAgICBQYWludFdvcmtsZXRHbG9i
YWxTY29wZSYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI4OTg2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNs
dWRlICJKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKQEAgLTE2MywyMyArMTY0LDM0IEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc1NlcnZpY2VXb3JrZXIKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTU2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlPjo6Z2V0PGpzU2VydmljZVdvcmtlckdsb2JhbFNjb3BlX1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFj
ZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICBy
ZXR1cm4gc3BhY2U7Ci0gICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCBjbGllbnREYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUs
IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgpOworICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
R1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOworICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlLCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSk7CisgICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0K
KworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
KyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGUuZ2V0KCk7CiB9CiAKIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlND
OjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKICAgICBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUmIHdyYXBwZWQoKSBjb25zdAog
ICAgIHsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xvYmFs
U2NvcGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTE0OSwyMyArMTUw
LDM0IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1NoYWRvd1JlYWxtR2wKICAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZT46OmdldDxqc1NoYWRvd1Jl
YWxtR2xvYmFsU2NvcGVfU2hhZG93UmVhbG1HbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlND
OjpJc29TdWJzcGFjZSogSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNTaGFkb3dSZWFsbUds
b2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgp
KQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFkb3dS
ZWFsbUdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2hhZG93UmVhbG1HbG9i
YWxTY29wZSwgSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKTsKKyAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhZG93
UmVhbG1HbG9iYWxTY29wZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisg
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTaGFkb3dSZWFsbUdsb2Jh
bFNjb3BlLCBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VO
RAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUu
Z2V0KCk7CiB9CiAKIHZvaWQgSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hh
ZG93UmVhbG1HbG9iYWxTY29wZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNz
IG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNv
bmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNT
aGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKQEAgLTE0NywyMyArMTQ4LDM0IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihq
c1NoYXJlZFdvcmtlckcKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGU+OjpnZXQ8anNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZV9TaGFyZWRXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNTaGFyZWRXb3JrZXJH
bG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0g
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEubV9o
ZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLCBKU1NoYXJlZFdvcmtlckds
b2JhbFNjb3BlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7Cisg
ICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEu
bV9oZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLCBKU1NoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJH
bG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1NoYXJlZFdvcmtlckds
b2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CiB9CiAKIHZv
aWQgSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFyZWRXb3JrZXJHbG9i
YWxTY29wZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NywxMyArNDcsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogICAgIFNoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlJiB3cmFwcGVkKCkgY29uc3QKICAgICB7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENFUmVhY3Rpb25zLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAj
aW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKKyNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJFbGVtZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtODgsNyArODks
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtNDMw
LDI3ICs0MzEsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENFUmVhY3Rpbwog
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q0VSZWFjdGlvbnM+OjpjYWxsPGpzVGVzdENF
UmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25fbWV0aG9kV2l0aENFUmVhY3Rpb25zTm90TmVlZGVk
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoQ0VSZWFj
dGlvbnNOb3ROZWVkZWQiKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Q0VSZWFjdGlv
bnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RDRVJlYWN0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewog
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25z
LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4g
fHwgIUpTVGVzdENFUmVhY3Rpb25zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENF
UmVhY3Rpb25zPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMg
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0Q0VSZWFjdGlvbnMpOwotICAg
IGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBtYWtl
VW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVh
cENlbGxUeXBlKCksIEpTVGVzdENFUmVhY3Rpb25zKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdENFUmVhY3Rpb25zPiB8fCAhSlNUZXN0Q0VSZWFjdGlvbnM6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENFUmVhY3Rpb25zPikKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDRVJlYWN0aW9ucyk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnMpOworICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RDRVJlYWN0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDRVJlYWN0aW9uczo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOwogfQogCiB2b2lkIEpT
VGVzdENFUmVhY3Rpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q0VSZWFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VB
Y2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0Q0VSZWFjdGlvbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0Q0VSZWFjdGlvbnM+JiYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZS5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCkBAIC03Miw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
SU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAg
ICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTI1NiwyNyArMjU3LDM4IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RDRVJlYWN0aW8KICAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpjYWxsPGpzVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvbl90b1N0cmluZ0JvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9TdHJpbmciKTsKIH0KIAotSlNDOjpJc29TdWJzcGFj
ZSogSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgp
KQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyPiB8fCAhSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPikKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSgpLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKTsKLSAgICBlbHNlCi0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBt
YWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxs
SGVhcENlbGxUeXBlKCksIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIpOwotICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5n
ZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7
CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXI+IHx8ICFKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpuZWVkc0Rl
c3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPikKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Cisg
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
cjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9k
ZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllcj4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNp
bmNsdWRlICJKU1Rlc3RDYWxsVHJhY2VyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCkBAIC05NCw3ICs5NSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVz
dENhbGxUcmFjZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2Jq
ZWN0U3BhY2UoKTsKQEAgLTUwNSwyNyArNTA2LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RDYWxsVHJhY2UKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENhbGxUcmFj
ZXI+OjpjYWxsPGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvbl90ZXN0T3BlcmF0aW9u
V2l0aERlZmF1bHRWYXJpYW50QXJndW1lbnRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgInRlc3RPcGVyYXRpb25XaXRoRGVmYXVsdFZhcmlhbnRBcmd1bWVudCIpOwogfQog
Ci1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDYWxsVHJhY2VyOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q2FsbFRyYWNlcjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBz
cGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBz
cGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdENhbGxUcmFjZXI+IHx8ICFKU1Rlc3RDYWxsVHJhY2VyOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENhbGxUcmFjZXI+KQotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
KCksIEpTVGVzdENhbGxUcmFjZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Q2FsbFRyYWNlciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0Q2FsbFRyYWNlcik7
Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyLmdl
dCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2FsbFRyYWNlcj4gfHwgIUpTVGVz
dENhbGxUcmFjZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENhbGxUcmFj
ZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENhbGxU
cmFjZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENh
bGxUcmFjZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENhbGxUcmFjZXI6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q2FsbFRyYWNl
cjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsK
IH0KIAogdm9pZCBKU1Rlc3RDYWxsVHJhY2VyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsVHJhY2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZN
JiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0Q2FsbFRyYWNlcihKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RDYWxsVHJhY2VyPiYmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ci5oIgpAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMTY4LDI3ICsxNjksMzggQEAgSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKGpzVGVzdENsYXNzV2l0aAogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0
KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBj
bGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpKQotICAgICAg
ICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cj4gfHwgIUpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPikKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ig
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOworICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yPiB8fCAhSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ip
OworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
IGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VO
RAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VB
Y2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1
ZGVzLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTEyNCw3ICsxMjUs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkBAIC03ODEsMjcgKzc4MiwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0Q29u
ZGl0aW9uCiAKICNlbmRpZgogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+IHx8ICFKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+KQot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMpOwot
ICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlcyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyk7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVz
LmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKSkKKyAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsK
KyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcz4gfHwgIUpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6Om5lZWRzRGVzdHJ1Y3Rp
b24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+KQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbElu
Y2x1ZGVzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKTsKIH0KIAogdm9pZCBK
U1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1
ZGVzLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAKICAgICAvLyBDdXN0b20gYXR0cmlidXRl
cwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmNwcAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJv
bWlzZVByb3h5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTk1LDcgKzk2LDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZVByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAt
NjAzLDI3ICs2MDQsMzggQEAgSlNDX0RFRklORV9DVVNUT01fU0VUVEVSKHNldEpTVGVzdENvbmRp
dAogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZT46
OnNldDxzZXRKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlX3NldHRpbmdzQ29uZGl0aW9uYWxs
eVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2VTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vi
c3BhY2UqIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDb25kaXRpb25hbGx5
UmVhZFdyaXRlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxseVJl
YWRXcml0ZT4gfHwgIUpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZT4pCi0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSk7Ci0gICAgZWxz
ZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRl
ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
Y2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlKTsKLSAgICBh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3Jp
dGUuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpKQorICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFj
ZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25k
aXRpb25hbGx5UmVhZFdyaXRlPiB8fCAhSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZT4p
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9u
YWxseVJlYWRXcml0ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRl
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FS
TklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0K
KworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlS
ZWFkV3JpdGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFk
V3JpdGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25k
aXRpb25hbGx5UmVhZFdyaXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5
LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0
cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwg
SlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RE9NSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RET01K
SVQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkRPTUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJET01KSVRJRExDb252
ZXJ0LmgiCkBAIC00NzgsNyArNDc5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNU
ZXN0RE9NSklUUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlKCk7CkBAIC0xMjQ0LDI3ICsxMjQ1LDM4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
Tihqc1Rlc3RET01KSVRQcm8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50
ZXJmYWNlPE5vZGVMaXN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5nZXRFbGVtZW50c0J5TmFtZShXVEZNb3ZlKGVs
ZW1lbnROYW1lKSkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RE9NSklUOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0RE9NSklUOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpKQotICAgICAgICBy
ZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RET01KSVQ+IHx8ICFKU1Rlc3RET01KSVQ6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RE9NSklUPikKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RE9NSklUID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dERPTUpJVCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01K
SVQgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdERPTUpJVCk7Ci0gICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCkp
CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAg
ICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERPTUpJVD4gfHwgIUpTVGVzdERPTUpJVDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RE9NSklUPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RET01KSVQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdERPTUpJVCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJ
VCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RET01KSVQ6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RE9NSklUOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKwor
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERPTUpJVCA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsKIH0KIAogdm9pZCBK
U1Rlc3RET01KSVQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RET01KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RE9NSklULmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKICAgICBUZXN0RE9NSklUJiB3cmFw
cGVkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcg
QEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKQEAgLTEyMSw3ICsxMjIsNyBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC04MDAsMjcgKzgwMSwzOCBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RGVmYXVsdFRvCiAgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Y2FsbDxqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBl
RnVuY3Rpb25fdG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0
b0pTT04iKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTjo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdl
dCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8
fCAhSlNUZXN0RGVmYXVsdFRvSlNPTjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RE
ZWZhdWx0VG9KU09OPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3REZWZhdWx0VG9KU09O
KTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pT
T04gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdERlZmF1bHRUb0pTT04pOwotICAgIGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsKKyAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dERlZmF1bHRUb0pTT04uZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
R1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04+IHx8ICFKU1Rlc3REZWZh
dWx0VG9KU09OOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZh
dWx0VG9KU09OKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3REZWZhdWx0VG9KU09OKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVs
dFRvSlNPTiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09O
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdERlZmF1bHRUb0pTT046OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1
cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RGVmYXVsdFRvSlNPTiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dERlZmF1bHRUb0pTT04uZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTjo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVmYXVsdFRvSlNPTi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdERlZmF1bHRUb0pTT04oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNwcAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC03Miw3ICs3Myw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpAQCAtMjYyLDI3ICsyNjMsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdERlZmF1bHRUbwogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkPjo6Y2FsbDxqc1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4
cG9zZWRQcm90b3R5cGVGdW5jdGlvbl90b0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgInRvSlNPTiIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZh
dWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
K0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRC
eUV4cG9zZWQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4
cG9zZWQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRU
b0pTT05GaWx0ZXJlZEJ5RXhwb3NlZD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09ORmls
dGVyZWRCeUV4cG9zZWQ+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0
VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkKTsKLSAgICBlbHNlCi0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkKTsK
LSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05G
aWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhw
b3NlZC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2Rl
LmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkPiB8fCAhSlNU
ZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ+KQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJl
ZEJ5RXhwb3NlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RE
ZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBv
c2VkLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3Nl
ZDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9z
ZWQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZChKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ+
JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC01OSw3ICs2MCw3
IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlKCk7CkBAIC0xNTQsMjcgKzE1NSwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoanNUZXN0RGVmYXVsdFRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1K
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
PiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+KQot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IG1ha2VVbmlxdWU8
SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5
cGUoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UpOwotICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAg
SXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgp
OworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+IHx8ICFKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+KQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSk7CisgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTMgKzQ4LDEzIEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0m
LCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpT
dWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6
ZXImKTsKICAgICBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UmIHdyYXBwZWQo
KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtODYsNyArODcs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpAQCAtMjg0LDI3ICsyODUsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERl
ZmF1bHRUbwogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQ+OjpjYWxsPGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25fdG9K
U09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKIH0K
IAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PikKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQpOwotICAgIGVsc2UK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBt
YWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxs
SGVhcENlbGxUeXBlKCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KTsKLSAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgp
OworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwor
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0PiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6Om5lZWRzRGVzdHJ1Y3Rpb24p
OworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PikKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOwogfQogCiB2
b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAgICAgVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0JiB3cmFwcGVkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAK
ICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtODgsNyArODksNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBl
LCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zMjQs
MjcgKzMyNSwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RGVmYXVsdFRvCiAg
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6
Y2FsbDxqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25fdG9K
U09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKIH0K
IAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBl
KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpOwotICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsK
KyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwor
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpuZWVk
c0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1
cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7CiB9CiAKIHZvaWQg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJz
cGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNl
QWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
ICAgIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsJiB3cmFwcGVkKCkgY29uc3QKICAgICB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVs
ZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRT
eW50aGV0aWNBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRp
Y0F0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKQEAgLTY3LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9J
TkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZVByb3RvdHlwZSwgQmFz
ZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjM4LDI3ICsy
MzksMzggQEAgSlNDX0RFRklORV9DVVNUT01fU0VUVEVSKHNldEpTVGVzdERlbGVnYQogICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0
ZT46OnNldFBhc3NpbmdQcm9wZXJ0eU5hbWU8c2V0SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRo
ZXRpY0F0dHJpYnV0ZV9zaGFyZWRBdHRyaWJ1dGUyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1KU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRh
LnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1
dGU+IHx8ICFKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1
dGU+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3lu
dGhldGljQXR0cmlidXRlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdERl
bGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOwotICAgIGVsc2UKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0
ZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRv
U2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisg
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0
dHJpYnV0ZT4gfHwgIUpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0
aWNBdHRyaWJ1dGU+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNB
dHRyaWJ1dGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hh
cmVkU3ludGhldGljQXR0cmlidXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
KyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVy
biBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5n
ZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRl
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVU
b1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGlj
QXR0cmlidXRlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nl
c3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZShKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REZWxlZ2F0ZVRvU2hhcmVk
U3ludGhldGljQXR0cmlidXRlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCkBAIC03Nyw3ICs3OCw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERvbWFpblNlY3VyaXR5UHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zMTIsMjcgKzMxMywz
OCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RG9tYWluU2VjCiAgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3REb21haW5TZWN1cml0eT46OmNhbGw8anNUZXN0RG9tYWluU2Vj
dXJpdHlQcm90b3R5cGVGdW5jdGlvbl9vdmVybG9hZGVkTWV0aG9kT3ZlcmxvYWREaXNwYXRjaGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsK
IH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RG9tYWluU2VjdXJpdHk6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REb21h
aW5TZWN1cml0eTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpKQot
ICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REb21haW5TZWN1cml0eT4gfHwgIUpT
VGVzdERvbWFpblNlY3VyaXR5OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFp
blNlY3VyaXR5PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJp
dHkgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0RG9tYWluU2VjdXJpdHkp
OwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJp
dHkgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdERvbWFpblNlY3VyaXR5KTsKLSAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpOworICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RG9tYWluU2VjdXJpdHkuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKwor
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFpblNlY3VyaXR5PiB8fCAhSlNUZXN0
RG9tYWluU2VjdXJpdHk6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFp
blNlY3VyaXR5PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3REb21haW5TZWN1cml0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgSlNUZXN0RG9tYWluU2VjdXJpdHkpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3REb21haW5TZWN1cml0eSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REb21h
aW5TZWN1cml0eTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3REb21haW5TZWN1cml0eTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdERvbWFp
blNlY3VyaXR5OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RG9tYWluU2VjdXJpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNl
Y3VyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRC
eVNldHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAkocmV2aXNpb24gMjg5ODY0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRC
eVNldHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKQEAgLTg5LDcgKzkwLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtNDUxLDI3ICs0NTIsMzggQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGpzVGVzdEVuYWJsZWRCeQogCiAjZW5kaWYKIAotSlNDOjpJc29TdWJzcGFjZSog
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdldCgpKQotICAgICAgICByZXR1cm4gc3Bh
Y2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPiB8fCAhSlNUZXN0RW5hYmxlZEJ5U2V0
dGluZzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPikK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKTsKLSAgICBl
bHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBt
YWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxs
SGVhcENlbGxUeXBlKCksIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcpOwotICAgIGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5nZXQoKTsKKyAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEVuYWJsZWRCeVNldHRpbmcuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKwor
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc+IHx8ICFKU1Rl
c3RFbmFibGVkQnlTZXR0aW5nOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RF
bmFibGVkQnlTZXR0aW5nPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7CiB9
CiAKIHZvaWQgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0
dGluZy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNv
bnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2
bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JD
b250ZXh0LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjMsNyArNjQsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAt
MTc4LDI3ICsxNzksMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEVuYWJsZWRG
bwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+OjpnZXQ8
anNUZXN0RW5hYmxlZEZvckNvbnRleHRfVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3Ry
dWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5h
bWUpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAg
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNv
bnRleHQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0PiB8fCAhSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+KQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElT
T19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSgpLCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dCA9IG1ha2VVbmlxdWU8SXNvU3Vic3Bh
Y2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4
dC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Cisg
ICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdl
dCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+IHx8ICFKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEVuYWJsZWRGb3JDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7CiB9CiAKIHZv
aWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4
dC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
MTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdl
dENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25z
dGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0p
OwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMTQ0LDcgKzE0NSw3IEBAIHB1
YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTMxNSwy
NyArMzE2LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RFdmVudENvbnMKIAog
I2VuZGlmCiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4gfHwgIUpTVGVzdEV2ZW50Q29uc3RydWN0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEV2ZW50Q29uc3RydWN0b3IgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2
ZW50Q29uc3RydWN0b3IuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpKQorICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisK
KyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYg
KCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yPiB8fCAhSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6bmVlZHNEZXN0
cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4pCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3Ig
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQor
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJu
IHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEV2ZW50Q29uc3RydWN0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RFdmVudENvbnN0cnVjdG9yLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFj
ZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
ICAgICBUZXN0RXZlbnRDb25zdHJ1Y3RvciYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRUYXJnZXQu
aCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC03
MCw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkBAIC0yNTQsMjcgKzI1NSwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RXZl
bnRUYXJnCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RFdmVudFRhcmdldD46OmNhbGw8
anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbl9pdGVtQm9keT4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJpdGVtIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpT
VGVzdEV2ZW50VGFyZ2V0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RXZlbnRUYXJnZXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RFdmVudFRhcmdldC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
RXZlbnRUYXJnZXQ+IHx8ICFKU1Rlc3RFdmVudFRhcmdldDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RFdmVudFRhcmdldD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEV2ZW50VGFyZ2V0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdEV2ZW50
VGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50
VGFyZ2V0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RFdmVudFRhcmdldCk7Ci0gICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsKKyAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEV2ZW50VGFyZ2V0LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQ
VU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudFRhcmdldD4gfHwgIUpTVGVzdEV2ZW50VGFy
Z2V0OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudFRhcmdldD4pCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRUYXJnZXQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50VGFy
Z2V0KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRUYXJnZXQ6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRUYXJnZXQ6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJO
SU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQor
CisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsK
IH0KIAogdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMyArNTMsMTMgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBK
U0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAg
IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOwogICAgIFRlc3RFdmVudFRhcmdldCYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjMsNyArNjQsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTE3OSwyNyAr
MTgwLDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RFeGNlcHRpb24KICAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEV4Y2VwdGlvbj46OmdldDxqc1Rlc3RFeGNlcHRpb25f
bmFtZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdEV4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEV4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRh
LnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEV4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
RXhjZXB0aW9uPiB8fCAhSlNUZXN0RXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdEV4Y2VwdGlvbj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2Vw
dGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RFeGNlcHRpb24pOwot
ICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhl
YXBDZWxsVHlwZSgpLCBKU1Rlc3RFeGNlcHRpb24pOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7Cisg
ICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RFeGNlcHRpb24+IHx8ICFKU1Rlc3RFeGNlcHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24p
OworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdEV4Y2VwdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0RXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFeGNlcHRpb24pOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RFeGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
RXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdEV4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RFeGNlcHRpb24uZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0RXhjZXB0aW9uOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1
MCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHBy
IChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAg
ICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RXhjZXB0aW9uKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEV4Y2VwdGlvbj4mJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYg
KzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02Myw3ICs2NCw3IEBAIHB1Ymxp
YzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
SlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdFByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMTc5
LDI3ICsxODAsMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEdlbmVyYXRlQQog
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290Pjo6Z2V0
PGpzVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdF9zb21lQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCBhdHRyaWJ1dGVOYW1lKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0R2VuZXJhdGVB
ZGRPcGFxdWVSb290OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290OjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVu
dERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpKQotICAgICAgICByZXR1cm4gc3Bh
Y2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q+IHx8ICFKU1Rlc3RHZW5lcmF0
ZUFkZE9wYXF1ZVJvb3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVB
ZGRPcGFxdWVSb290PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVB
ZGRPcGFxdWVSb290ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdEdlbmVy
YXRlQWRkT3BhcXVlUm9vdCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdEdlbmVy
YXRlQWRkT3BhcXVlUm9vdCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1
ZVJvb3QuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9k
ZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdD4gfHwgIUpTVGVzdEdlbmVy
YXRlQWRkT3BhcXVlUm9vdDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCk7CisgICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2VuZXJh
dGVBZGRPcGFxdWVSb290Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQor
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJu
IHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBj
b25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwo
dm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsK
IAogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjMsNyArNjQsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0xODksMjcgKzE5
MCwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0R2VuZXJhdGVJCiAgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPjo6Z2V0PGpzVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVfYVNlY3JldEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgYXR0cmli
dXRlTmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4gfHwgIUpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4pCi0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSk7Ci0gICAg
ZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
Y2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKTsKLSAgICBhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuZ2V0
KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlPiB8fCAhSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6bmVlZHNEZXN0cnVjdGlvbik7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4pCisgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOwogfQogCiB2b2lkIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
MTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdl
dENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25z
dGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0p
OwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVz
dEdlbmVyYXRlSXNSZWFjaGFibGU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
Miw3IEBACiAjaW5jbHVkZSAiSlNUZXN0R2xvYmFsT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Qcm9taXNlUHJveHkuaCIKICNp
bmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKQEAgLTE4MjIsMjMgKzE4MjMsMzQgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEdsb2JhbE9iagogCiAjZW5kaWYKIAotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0R2xvYmFsT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0R2xvYmFsT2JqZWN0OjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9
IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7
Ci0gICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0ID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBD
ZWxsVHlwZUZvckpTVGVzdEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKTsK
KyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwor
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwor
CisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNUZXN0R2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RHbG9iYWxPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2xvYmFs
T2JqZWN0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdEdsb2JhbE9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RHbG9iYWxPYmplY3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0R2xvYmFsT2JqZWN0Ojph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJs
aWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUsIEJhc2Up
OwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
NyBAQAogI2luY2x1ZGUgIkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02
Miw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2UoKTsKQEAgLTI2OCwyNyArMjY5LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1Rlc3RJbmRleGVkU2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJ
c29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI+IHx8ICFKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPikKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7
CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpD
b25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3Rv
dHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAt
MjY4LDI3ICsyNjksMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEluZGV4ZWRT
ZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
LCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSgpLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgIGVsc2UK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24pOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQ
VU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+
IHx8ICFKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Om5lZWRzRGVzdHJ1Y3Rp
b24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOworICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTcw
LDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkBAIC0zMDAsMjcgKzMwMSwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0SW5kZXhlZFNlCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYWxsPGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uX2luZGV4ZWRTZXR0ZXJCb2R5PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgImluZGV4ZWRTZXR0ZXIiKTsKIH0KIAotSlNDOjpJc29TdWJz
cGFjZSogSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVl
PElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxU
eXBlKCksIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Z2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNw
YWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4gfHwgIUpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7
CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGll
bnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMTc4LDcgKzE3OSw3IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMTA5NiwyOSArMTA5Nyw0MCBAQCBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFRlc3RJbnRlcmZhY2VJdGVyYXRvckJhc2U7CiAgICAg
REVDTEFSRV9JTkZPOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsK
ICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1
cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIGlm
IChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9y
LmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZh
Y2VJdGVyYXRvcj4gfHwgIVRlc3RJbnRlcmZhY2VJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgVGVzdEludGVyZmFjZUl0ZXJhdG9yPikKLSAgICAgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlKCksIFRlc3RJbnRlcmZhY2VJdGVyYXRvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0gbWFrZVVuaXF1
ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxs
VHlwZSgpLCBUZXN0SW50ZXJmYWNlSXRlcmF0b3IpOwotICAgICAgICBhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpOworICAgICAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgICAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKKworICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgICAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsK
KyAgICAgICAgaWYgKCFzcGFjZSkgeworICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcj4gfHwgIVRlc3RJbnRlcmZhY2VJ
dGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZhY2VJ
dGVyYXRvcj4pCisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFRl
c3RJbnRlcmZhY2VJdGVyYXRvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBUZXN0SW50ZXJmYWNlSXRlcmF0b3IpOworICAgICAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IFRlc3RJbnRlcmZhY2VJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVGVzdEludGVy
ZmFjZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCisgICAgICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgICAgIHJldHVybiBzcGFjZTsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpOwogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCkBAIC0xMTkwLDI3ICsxMjAyLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3RJbnRlcmZhY2UKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46
OmNhbGw8anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25fZm9yRWFjaENhbGxlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJmb3JFYWNoIik7CiB9CiAKLUpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdEludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQor
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEludGVyZmFjZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGll
bnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0SW50ZXJmYWNlPiB8fCAhSlNUZXN0SW50ZXJmYWNlOjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdEludGVyZmFjZT4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEludGVyZmFjZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJbnRlcmZh
Y2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
Y2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RJbnRlcmZhY2UpOwotICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOworICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2U+IHx8ICFKU1Rlc3RJbnRlcmZhY2U6Om5lZWRzRGVzdHJ1
Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEludGVyZmFjZT4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJmYWNlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2UpOworICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0SW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdEludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RJbnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDEzICs1MywxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29u
c3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZt
KTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAKICAgICAvLyBDdXN0b20gYXR0cmlidXRlcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUu
Y3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02
Myw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkBAIC0xNzksMjcgKzE4MCwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoanNUZXN0SW50ZXJmYWNlCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZT46OmdldDxqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZV9yZWFkb25seUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
ICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+IHx8ICFKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZT4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlw
ZSgpLCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSk7Ci0gICAgYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQo
KTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgpKQorICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkg
eworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZT4gfHwgIUpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKTsKKyAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQo
KTsKIH0KIAogdm9pZCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9k
ZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAog
I2luY2x1ZGUgIkpTVGVzdEl0ZXJhYmxlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMTkxLDI5ICsxOTIsNDAgQEAgcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBUZXN0SXRlcmFibGVJdGVyYXRvckJhc2U7CiAgICAgREVD
TEFSRV9JTkZPOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
ICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IuZ2V0
KCkpCi0gICAgICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEl0ZXJhYmxlSXRl
cmF0b3I+IHx8ICFUZXN0SXRlcmFibGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgVGVzdEl0ZXJhYmxlSXRlcmF0b3I+KQotICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgp
LCBUZXN0SXRlcmFibGVJdGVyYXRvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBtYWtlVW5pcXVlPElzb1N1YnNw
YWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIFRl
c3RJdGVyYWJsZUl0ZXJhdG9yKTsKLSAgICAgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOworICAgICAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgICAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJs
ZUl0ZXJhdG9yLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAg
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgICAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICAgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIGlmICgh
c3BhY2UpIHsKKyAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBUZXN0SXRlcmFibGVJdGVyYXRvcj4gfHwgIVRlc3RJdGVyYWJsZUl0ZXJhdG9yOjpuZWVkc0Rl
c3RydWN0aW9uKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEl0ZXJhYmxlSXRlcmF0b3I+KQorICAgICAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBUZXN0SXRlcmFibGVJdGVyYXRv
cik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUZXN0
SXRlcmFibGVJdGVyYXRvcik7CisgICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJ
dGVyYWJsZUl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0SXRl
cmFibGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CisgICAgICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVGVzdEl0ZXJhYmxlSXRlcmF0b3I6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgcmV0dXJuIHNwYWNlOwor
ICAgICAgICB9CisKKyAgICAgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
SXRlcmFibGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0yODUsMjcgKzI5Nywz
OCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SXRlcmFibGVQCiAgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RJdGVyYWJsZT46OmNhbGw8anNUZXN0SXRlcmFibGVQcm90b3R5
cGVGdW5jdGlvbl9mb3JFYWNoQ2FsbGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImZvckVhY2giKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0SXRlcmFibGU6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RJdGVyYWJsZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgpKQotICAg
ICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJdGVyYWJsZT4gfHwgIUpTVGVzdEl0ZXJh
YmxlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPikKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGUgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUoKSwgSlNUZXN0SXRlcmFibGUpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SXRlcmFibGUgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdEl0ZXJhYmxlKTsK
LSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgp
OworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SXRlcmFibGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKwor
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPiB8fCAhSlNUZXN0SXRlcmFi
bGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPikKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJdGVyYWJsZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SXRlcmFibGUpOworICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RJdGVyYWJsZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJdGVyYWJsZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEl0ZXJhYmxl
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SXRlcmFibGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SXRl
cmFibGUoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SXRlcmFi
bGU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yMjIsMjcgKzIy
MywzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SlNCdWlsdGluCiAgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmNhbGw8anNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGVGdW5jdGlvbl90ZXN0Q3VzdG9tRnVuY3Rpb25C
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRlc3RDdXN0b21GdW5jdGlv
biIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yPiB8fCAhSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+KQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7Ci0g
ICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IpOwotICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKSkKKyAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2Up
IHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3I+IHx8ICFKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6bmVlZHNEZXN0
cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+KQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7
CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyAr
NDYsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhw
ciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAg
ICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKIAogICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVzCiAgICAgSlND
OjpKU1ZhbHVlIHRlc3RBdHRyaWJ1dGVDdXN0b20oSlNDOjpKU0dsb2JhbE9iamVjdCYpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExl
Z2FjeUZhY3RvcnlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb25Qcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTIyNCwyNyAr
MjI1LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RMZWdhY3lGYWMKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lGYWN0b3J5
RnVuY3Rpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsK
LSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4gfHwgIUpTVGVzdExlZ2FjeUZhY3Rv
cnlGdW5jdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lGYWN0b3J5
RnVuY3Rpb24+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5
RnVuY3Rpb24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
bi5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Cisg
ICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdl
dCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uPiB8fCAhSlNUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lG
YWN0b3J5RnVuY3Rpb24+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKTsKKyAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lGYWN0
b3J5RnVuY3Rpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3Bh
Y2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVn
YWN5RmFjdG9yeUZ1bmN0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwx
MyArNTAsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAg
ewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29u
Y3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uPiYmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVy
ZmFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCkBAIC04Miw3ICs4Myw3IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zMjcsMjcg
KzMyOCwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TGVnYWN5Tm9JCiAgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdD46OmNhbGxT
dGF0aWM8anNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvckZ1bmN0aW9uX3N0
YXRpY09wZXJhdGlvbkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAic3Rh
dGljT3BlcmF0aW9uIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU5vSW50
ZXJmYWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q+IHx8ICFKU1Rlc3RM
ZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RM
ZWdhY3lOb0ludGVyZmFjZU9iamVjdD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCks
IEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0ID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlw
ZSgpLCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCk7Ci0gICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKTsKKyAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdD4gfHwgIUpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdD4pCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VP
YmplY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdExl
Z2FjeU5vSW50ZXJmYWNlT2JqZWN0KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5H
U19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VP
YmplY3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwor
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lOb0lu
dGVyZmFjZU9iamVjdC5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9i
amVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2Fj
eU5vSW50ZXJmYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyAr
NTAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25z
dGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0p
OwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIAogICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYg
KzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3Ry
YWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNzAsNyArNzEs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkBAIC0yNDEsMjcgKzI0MiwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0
TGVnYWN5T3ZlCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zPjo6Y2FsbDxqc1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zUHJvdG90eXBlRnVuY3Rp
b25fbmFtZWRJdGVtQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJuYW1l
ZEl0ZW0iKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWls
dEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0g
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TGVnYWN5T3ZlcnJp
ZGVCdWlsdEluczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJp
ZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFw
TW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsK
KyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CiB9CiAKIHZv
aWQgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwxMyArNTIsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpD
b25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNYXBMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE1hcExp
a2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC03OSw3ICs4
MCw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE1hcExpa2VQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTM1OCwy
NyArMzU5LDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RNYXBMaWtlUHIKICAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE1hcExpa2U+OjpjYWxsPGpzVGVzdE1hcExpa2VQ
cm90b3R5cGVGdW5jdGlvbl9kZWxldGVCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgImRlbGV0ZSIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0TWFwTGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2U+IHx8ICFKU1Rlc3RNYXBMaWtl
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2U+KQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
KCksIEpTVGVzdE1hcExpa2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TWFwTGlrZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TWFwTGlrZSk7Ci0gICAgYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlLmdldCgpOworICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TWFwTGlrZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBN
b2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZT4gfHwgIUpTVGVzdE1hcExpa2U6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2U+KQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOworICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RNYXBMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dE1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0TWFwTGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJl
dHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RNYXBMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFw
TGlrZS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RNYXBMaWtlOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmgJKHJldmlz
aW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNYXBMaWtlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZN
JiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TWFwTGlrZShKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RNYXBMaWtlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKQEAgLTgz
LDcgKzg0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzcyLDI3ICszNzMsMzggQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGpzVGVzdE1hcExpa2VXaQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uX2RlbGV0ZUJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZGVsZXRlIik7CiB9CiAKLUpTQzo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4pCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVl
PElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CisgICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zPiB8fCAhSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucz4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwor
ICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwogfQogCiB2b2lk
IEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMg
KzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4
cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwog
ICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjMsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5
cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTMz
NiwyNyArMzM3LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZEFuZEkK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
ICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBt
YWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3Bh
Y2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNw
YWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAg
IGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3Io
SlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9
PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwor
ICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6Okhl
YXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0
cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTYzLDcgKzY0
LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTMzNiwyNyArMzM3LDM4IEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1Rlc3ROYW1lZEFuZEkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVj
dCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+IHx8ICFKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCi0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKKyAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24g
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAg
fQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsK
IH0KIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYs
IGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJp
ZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFi
c3RyYWN0T3BlcmF0aW9ucy5oIgpAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlw
ZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzkz
LDI3ICszOTQsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkQW5kSQog
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI+OjpjYWxsPGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
UHJvdG90eXBlRnVuY3Rpb25faW5kZXhlZFNldHRlckJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAiaW5kZXhlZFNldHRlciIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFj
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiB8fCAh
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KQot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIp
OwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisg
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlND
OjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92
ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI4
OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3
IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjIsNyArNjMsNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZp
ZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKQEAgLTIzOCwyNyArMjM5LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RO
YW1lZERlbGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0
KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKTsK
LSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVs
ZXRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAg
SXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgp
OworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKTsK
KyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgp
OwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMyArNTQsMTMgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpW
TSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6
OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0
YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNw
cAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgpAQCAtNjIsNyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0
YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjM4LDI3ICsyMzksMzggQEAgSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkRGVsZQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMg
PSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAg
ICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPikKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb24pOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwor
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Cisg
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCisgICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7
CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24pOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Cisg
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
Miw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVz
LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKQEAgLTY5LDcgKzcwLDcg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXJQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2UoKTsKQEAgLTI2MiwyNyArMjYzLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3ROYW1lZERlbGUKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkRGVsZXRlcldp
dGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZUZ1bmN0aW9uX25hbWVkRGVsZXRlckJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAibmFtZWREZWxldGVyIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
ckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4g
fHwgIUpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsK
KyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4pCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7
CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMyArNTQsMTMgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4g
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNj
ZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAt
NjMsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjU0LDI3ICsyNTUsMzggQEAgSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzVGVzdE5hbWVkRGVsZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0K
IAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRh
LnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpKQotICAgICAgICByZXR1cm4g
c3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4gfHwgIUpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyPikKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOworICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIpOworICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNz
IG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNv
bmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJz
ZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTYyLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjEyLDI3ICsyMTMsMzggQEAgSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzVGVzdE5hbWVkR2V0dAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+
IHx8ICFKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCks
IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCA9IG1ha2VVbmlxdWU8SXNvU3Vic3Bh
Y2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBN
b2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aD4gfHwgIUpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGg6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGg+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpOworICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNh
bGxXaXRoID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
KyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aC5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwg
Y29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyODk4
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBA
CiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02Miw3ICs2Myw3IEBAIHB1
YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBA
IC0yMTIsMjcgKzIxMywzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRH
ZXR0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNw
YWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiB8
fCAhSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3Bh
Y2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIu
Z2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKSkKKyAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2Up
IHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+
KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwor
ICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsMTMgKzUyLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhl
YXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgpAQCAtNjcsNyArNjgsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJF
X0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlLCBCYXNlKTsKICAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yMzgsMjcgKzIzOSwzOCBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRHZXR0CiAgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25fZ2V0dGVyTmFtZUJvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZ2V0dGVyTmFtZSIpOwogfQogCi1K
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXI+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOworICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+KQor
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBz
cGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nl
c3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk
ZSAiSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlLCBC
YXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yOTIsMjcg
KzI5MywzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRTZXR0CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNs
aWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgp
LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8
SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5
cGUoKSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Cisg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVj
dGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+KQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklO
R1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKwor
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
KyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZp
c2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMg
KzU1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4
cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwog
ICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93
blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKQEAgLTYyLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9J
TkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CiAg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjkyLDI3ICsyOTMsMzgg
QEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFj
ZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24+IHx8ICFKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24pOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElT
T19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOworICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVj
dCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRs
eSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5
emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgor
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9w
ZXJhdGlvbnMuaCIKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZP
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAg
ICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzIzLDI3ICszMjQsMzggQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhbGw8anNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uX25hbWVkU2V0dGVyQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJuYW1lZFNldHRlciIpOwogfQogCi1KU0M6
Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewog
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SXNvU3Vic3Bh
Y2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOworICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1
Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+KQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFj
ZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6
OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAog
I2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKQEAgLTcyLDcgKzczLDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
clByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpAQCAtMzcwLDI3ICszNzEsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5h
bWVkU2V0dAogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlcj46OmNhbGw8anNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3Rv
dHlwZUZ1bmN0aW9uX2luZGV4ZWRTZXR0ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgImluZGV4ZWRTZXR0ZXIiKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
cjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBl
KCksIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIpOwotICAgIGF1dG8qIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5n
ZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNw
YWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19F
TkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJh
Y3RPcGVyYXRpb25zLmgiCkBAIC03Miw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
SU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGUs
IEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTQyMCwy
NyArNDIxLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNldHQKICAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXI+OjpjYWxsPGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXJQcm90b3R5cGVGdW5jdGlvbl9pbmRleGVkU2V0dGVyT3ZlcmxvYWREaXNwYXRjaGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImluZGV4ZWRTZXR0ZXIiKTsKIH0KIAotSlND
OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgp
KQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IG1ha2VVbmlxdWU8SXNv
U3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIpOwotICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlci5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+IHx8ICFK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3Bh
Y2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUs
MTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAo
bW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAg
fQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBK
U0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNp
bmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFi
c3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNjIsNyAr
NjMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2
bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yNjksMjcgKzI3MCwzOCBAQCBKU0NfREVGSU5FX0NV
U1RPTV9HRVRURVIoanNUZXN0TmFtZWRTZXR0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVj
dCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4pCi0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMg
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVuaXF1
ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxs
VHlwZSgpLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKLSAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
ckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
czo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5T3ZlcnJpZGVCdWlsdElucz4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwor
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25z
LmgiCkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGlj
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc1Byb3RvdHlwZSwgQmFzZSk7
CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzUzLDI3ICszNTQs
MzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNJbnN0YW5jZUZ1bmN0aW9uX3VuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ1bmZvcmdlYWJsZU9wZXJhdGlvbiIpOwogfQogCi1K
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcz4gfHwgIUpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+
KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKTsKLSAgICBlbHNl
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllcyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcy5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2Rl
LmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3Bh
Y2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAkocmV2aXNpb24g
Mjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSwxMyArNTUsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50
bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCkBAIC03MSw3ICs3Miw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTMzMCwyNyAr
MzMxLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNldHQKICAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+OjpjYWxsPGpzVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnNJbnN0YW5jZUZ1bmN0aW9uX3VuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keT4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJ1bmZvcmdlYWJsZU9wZXJhdGlvbiIpOwogfQogCi1KU0M6
Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMg
PSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsK
LSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0Fu
ZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+KQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3Zl
cnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOwor
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Cisg
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisg
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+KQor
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKIH0KIAog
dm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI4OTg2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBt
b2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8
IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lc3BhY2VPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE5h
bWVzcGFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
QEAgLTI3MiwyNyArMjczLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1l
c3BhY2UKIAogI2VuZGlmCiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVzcGFjZU9iamVj
dDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVzcGFj
ZU9iamVjdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZXNw
YWNlT2JqZWN0PiB8fCAhSlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE5hbWVzcGFjZU9iamVjdD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVzcGFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBK
U1Rlc3ROYW1lc3BhY2VPYmplY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3ROYW1lc3Bh
Y2VPYmplY3QpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZXNwYWNlT2JqZWN0LmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgpKQorICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFz
cGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RO
YW1lc3BhY2VPYmplY3Q+IHx8ICFKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6Om5lZWRzRGVzdHJ1Y3Rp
b24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVzcGFjZU9iamVjdD4pCisgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZXNwYWNlT2JqZWN0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lc3BhY2VPYmplY3QpOwor
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZXNwYWNlT2JqZWN0Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVzcGFjZU9i
amVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAg
ICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VP
YmplY3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwor
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VP
YmplY3QuZ2V0KCk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lc3BhY2VPYmplY3QuaAko
cmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMyArNDQs
MTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAo
bW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAg
fQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lc3BhY2VPYmplY3Qo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNp
bmNsdWRlICJKU1Rlc3ROb2RlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Qcm9taXNlUHJveHkuaCIKICNpbmNsdWRlICJJRExUeXBlcy5o
IgpAQCAtOTIsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAg
ewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3ROb2Rl
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkBAIC0zOTcsMjkgKzM5OCw0MCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFRlc3ROb2Rl
SXRlcmF0b3JCYXNlOwogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgICAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNw
YWNlcygpOwotICAgICAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROb2RlSXRlcmF0b3IuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgVGVzdE5vZGVJdGVyYXRvcj4gfHwgIVRlc3ROb2RlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIFRlc3ROb2RlSXRlcmF0b3I+KQotICAgICAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
KCksIFRlc3ROb2RlSXRlcmF0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIFRlc3ROb2Rl
SXRlcmF0b3IpOwotICAgICAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5vZGVJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07CisKKyAgICAgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7CisgICAgICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5vZGVJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgaWYgKCFzcGFjZSkgeworICAgICAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3ROb2RlSXRlcmF0b3I+IHx8
ICFUZXN0Tm9kZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVz
dE5vZGVJdGVyYXRvcj4pCisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIFRlc3ROb2RlSXRlcmF0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgVGVzdE5vZGVJdGVyYXRvcik7CisgICAgICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IFRlc3ROb2RlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOworICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3ROb2RlSXRlcmF0b3I6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9S
RV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgcmV0dXJuIHNwYWNl
OworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Tm9kZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5vZGVJdGVyYXRvci5nZXQoKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNDkxLDI3ICs1MDMsMzggQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5vZGVQcm90bwogICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uX2Zv
ckVhY2hDYWxsZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIp
OwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Tm9kZTo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMg
PSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE5vZGU+IHx8ICFKU1Rlc3ROb2RlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5vZGU+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdE5vZGUpOwotICAgIGVsc2UKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElT
T19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0Tm9k
ZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlLmdldCgp
OworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Tm9kZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JH
UFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Tm9kZT4gfHwgIUpTVGVzdE5vZGU6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5vZGU+KQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5vZGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROb2RlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5vZGU6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Tm9k
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsKIH0KIAogdm9pZCBK
U1Rlc3ROb2RlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29u
c3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZt
KTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAgICAgVGVzdE5vZGUmIHdyYXBwZWQoKSBjb25z
dAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5Lmgi
CiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC0xODY2LDcgKzE4NjcsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RPYmpQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTkwNTksMjcgKzkwNjAsMzggQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE9ialByb3RvdAogICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbl90b1N0cmluZ0Jv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9TdHJpbmciKTsKIH0KIAot
SlNDOjpJc29TdWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0T2JqLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPYmo+
IHx8ICFKU1Rlc3RPYmo6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T2JqPikKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T2JqID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlKCksIEpTVGVzdE9iaik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RPYmogPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2
bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE9iaik7Ci0gICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmouZ2V0KCk7CisgICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPYmouZ2V0KCkp
CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAg
ICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE9iaj4gfHwgIUpTVGVzdE9iajo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0T2JqPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RPYmopOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE9i
aik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9iaiA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RPYmo6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0T2JqOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE9iaiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE9iai5nZXQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTMgKzU5LDEzIEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoQ09ORElUSU9OKQogICAgIG11dGFibGUgSlNDOjpXcml0ZUJhcnJp
ZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0ZTM7CiAjZW5kaWYKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAo
bW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAg
fQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiAgICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25D
b25kaXRpb25hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmNwcAkocmV2aXNpb24gMjg5
ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
I2luY2x1ZGUgIkpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNzgsNyArNzksNyBA
QCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpA
QCAtMjI2LDI3ICsyMjcsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE9wZXJh
dGlvbgogCiAjZW5kaWYKIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4gfHwgIUpTVGVzdE9wZXJhdGlvbkNvbmRpdGlv
bmFsOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwg
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWwpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWwgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2
bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAo
IXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsPiB8fCAhSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPikK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RPcGVyYXRpb25D
b25kaXRpb25hbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RPcGVyYXRpb25Db25kaXRpb25hbCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3Bh
Y2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RPcGVyYXRpb25Db25kaXRpb25hbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAog
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbCA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlv
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEzICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VB
Y2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+JiYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpT
dWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUsIEJh
c2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTI5NywyNyAr
Mjk4LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RPdmVybG9hZGUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpKQotICAgICAgICByZXR1cm4gc3Bh
Y2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiB8fCAhSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsKKyAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
R1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IHx8ICFK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7CiB9
CiAKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4g
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNj
ZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJv
dGVjdGVkOgogICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4mJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRl
ICJKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCkBAIC02NSw3ICs2Niw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2Uo
KTsKQEAgLTIzNCwyNyArMjM1LDM4IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RP
dmVybG9hZGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgpKQotICAgICAgICByZXR1
cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
PiB8fCAhSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBt
YWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxs
SGVhcENlbGxUeXBlKCksIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2Up
OwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
R1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2U+IHx8ICFKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisg
ICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4g
c3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0
KCk7CiB9CiAKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
ICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZT4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNl
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02MSw3
ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFBsdWdpbkludGVyZmFj
ZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgp
OwpAQCAtMjM2LDI3ICsyMzcsMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdFBs
dWdpbkludAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0UGx1Z2luSW50ZXJmYWNl
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5
cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFBsdWdp
bkludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFBsdWdpbkludGVyZmFjZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlPiB8fCAhSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFBsdWdpbkludGVyZmFjZT4pCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSgpLCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rl
c3RQbHVnaW5JbnRlcmZhY2UpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7Cisg
ICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+IHx8ICFKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFBsdWdpbkludGVyZmFjZT4pCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0UGx1Z2luSW50ZXJmYWNlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RQbHVnaW5JbnRl
cmZhY2UpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2Ug
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFBs
dWdpbkludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBz
cGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQ
bHVnaW5JbnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQ
bHVnaW5JbnRlcmZhY2UuZ2V0KCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2lu
SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJm
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEzICs1NiwxMyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VB
Y2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBy
b21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Qcm9taXNlUHJveHkuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgpAQCAtMTQ1LDcgKzE0Niw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMjk1LDI3ICsyOTYsMzggQEAgSlNDX0RFRklO
RV9DVVNUT01fR0VUVEVSKGpzVGVzdFByb21pc2VSZQogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pjo6Z2V0PGpzVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudF9yZWFzb25HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1KU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudD4gfHwgIUpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ+KQotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50KTsKLSAgICBlbHNlCi0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50KTsKLSAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQo
KTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50PiB8fCAhSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ+KQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UHJvbWlz
ZVJlamVjdGlvbkV2ZW50KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UHJvbWlz
ZVJlamVjdGlvbkV2ZW50ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
IGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Lmdl
dCgpOwogfQogCiB2b2lkIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJz
cGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNl
QWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
ICAgIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQmIHdyYXBwZWQoKSBjb25zdAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25s
eU1hcExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuY3BwCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlN
YXBMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpT
VGVzdFJlYWRPbmx5TWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTc2LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0
UmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlKCk7CkBAIC0yOTcsMjcgKzI5OCwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0UmVhZE9ubHlNCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RSZWFk
T25seU1hcExpa2U+OjpjYWxsPGpzVGVzdFJlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9u
X2ZvckVhY2hCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImZvckVhY2gi
KTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
UmVhZE9ubHlNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdl
dCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZWFkT25seU1hcExpa2U+
IHx8ICFKU1Rlc3RSZWFkT25seU1hcExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0UmVhZE9ubHlNYXBMaWtlPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVh
ZE9ubHlNYXBMaWtlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdFJlYWRP
bmx5TWFwTGlrZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RS
ZWFkT25seU1hcExpa2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdFJlYWRPbmx5TWFwTGlrZSk7
Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExp
a2UuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRPbmx5TWFw
TGlrZT4gfHwgIUpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seU1hcExpa2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5TWFwTGlrZSk7CisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RSZWFkT25seU1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1Nf
RU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAgIH0KKworICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQo
KTsKIH0KIAogdm9pZCBKU1Rlc3RSZWFkT25seU1hcExpa2U6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlN
YXBMaWtlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBj
b25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwo
dm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RSZWFk
T25seU1hcExpa2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
UmVhZE9ubHlNYXBMaWtlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2Uu
Y3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFJlYWRPbmx5U2V0TGlrZS5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTc1LDcgKzc2LDcgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0UmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlLCBCYXNlKTsK
ICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yNzYsMjcgKzI3Nywz
OCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0UmVhZE9ubHlTCiAgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RSZWFkT25seVNldExpa2U+OjpjYWxsPGpzVGVzdFJlYWRPbmx5
U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uX2ZvckVhY2hCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgImZvckVhY2giKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
UmVhZE9ubHlTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RSZWFkT25seVNldExpa2U+IHx8ICFKU1Rlc3RSZWFkT25seVNldExpa2U6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlTZXRMaWtlPikKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlKCksIEpTVGVzdFJlYWRPbmx5U2V0TGlrZSk7Ci0gICAgZWxzZQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2UgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCks
IEpTVGVzdFJlYWRPbmx5U2V0TGlrZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RSZWFkT25seVNldExpa2UuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2Uu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZT4gfHwgIUpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6
bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlTZXRMaWtlPikKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seVNldExp
a2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRP
bmx5U2V0TGlrZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0
TGlrZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZWFkT25seVNldExpa2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0UmVhZE9ubHlTZXRMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0
dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFJlYWRPbmx5U2V0TGlrZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RSZWFkT25seVNldExp
a2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25s
eVNldExpa2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExp
a2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFj
Y2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHBy
b3RlY3RlZDoKICAgICBKU1Rlc3RSZWFkT25seVNldExpa2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0UmVhZE9ubHlTZXRMaWtlPiYmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9y
eUNvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuY3BwCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lu
Y2x1ZGUgIkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTYwLDcgKzYxLDcgQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0UHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBA
IC0xNjMsMjcgKzE2NCwzOCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0UmVwb3J0
RXh0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3Q6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3Rv
dHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0UmVw
b3J0RXh0cmFNZW1vcnlDb3N0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0OjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9
IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmdldCgpKQotICAgICAgICByZXR1
cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q+IHx8ICFKU1Rlc3RS
ZXBvcnRFeHRyYU1lbW9yeUNvc3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVw
b3J0RXh0cmFNZW1vcnlDb3N0PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVw
b3J0RXh0cmFNZW1vcnlDb3N0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVz
dFJlcG9ydEV4dHJhTWVtb3J5Q29zdCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVz
dFJlcG9ydEV4dHJhTWVtb3J5Q29zdCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRy
YU1lbW9yeUNvc3QuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BV
TWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdD4gfHwgIUpTVGVz
dFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCk7Cisg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
UmVwb3J0RXh0cmFNZW1vcnlDb3N0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
cmV0dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0LmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsMTMgKzUwLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKIAogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKQEAgLTg2LDcgKzg3LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFS
RV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zNDEsMjcgKzM0
MiwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U2VyaWFsaXplCiAgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+Ojpj
YWxsPGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
X2Z1bmN0aW9uUmV0dXJuaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJmdW5jdGlvblJldHVybmluZyIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
K0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gfHwgIUpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKLSAgICBlbHNlCi0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsK
LSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2Rl
LmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiB8fCAhSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICByZXR1cm4gc3BhY2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmdldCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMyArNTMsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBtdXRh
YmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRWYWx1ZTsKICAgICBt
dXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRSZWFkb25seVZh
bHVlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAg
ICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRs
eSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CiAKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U2V0TGlr
ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTc4LDcgKzc5
LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2V0TGlrZVByb3RvdHlwZSwg
QmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpAQCAtMzM0LDI3
ICszMzUsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNldExpa2VQcgogICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZT46OmNhbGw8anNUZXN0U2V0TGlrZVBy
b3RvdHlwZUZ1bmN0aW9uX2RlbGV0ZUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAiZGVsZXRlIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNldExpa2U6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZT4gfHwgIUpTVGVzdFNldExpa2U6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZT4pCi0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUo
KSwgSlNUZXN0U2V0TGlrZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXRMaWtlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RTZXRMaWtlKTsKLSAgICBhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCk7CisgICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
ZXRMaWtlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1v
ZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlPiB8fCAhSlNUZXN0U2V0TGlrZTo6bmVlZHNEZXN0
cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZT4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZSk7CisgICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFNldExpa2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RTZXRMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0
dXJuIHNwYWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFNldExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRM
aWtlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdFNldExpa2U6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuaAkocmV2aXNp
b24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNldExpa2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0m
LCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpT
dWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6
ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RTZXRMaWtlKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNldExpa2U+JiYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtODIs
NyArODMsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5w
bGFpbk9iamVjdFNwYWNlKCk7CkBAIC0zNDYsMjcgKzM0NywzOCBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNUZXN0U2V0TGlrZVdpCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25fY2xlYXJCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImNsZWFyIik7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2Uq
IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAg
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7
Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zPiB8fCAhSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
czo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJR05PUkVf
V0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOworICAg
IH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwogfQogCiB2b2lkIEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjg5ODY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5
LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0
cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwg
SlNDOjpIZWFwQW5hbHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXIuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXIuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBA
IC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFN0cmluZ2lm
aWVyUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
KCk7CkBAIC0xODQsMjcgKzE4NSwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0
U3RyaW5naWZpCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllcj46OmNh
bGw8anNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvbl90b1N0cmluZ0JvZHk+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9TdHJpbmciKTsKIH0KIAotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
K0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllcjo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBj
bGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0g
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RTdHJpbmdpZmllcj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyPikKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0U3RyaW5naWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0U3RyaW5naWZpZXIgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0Vf
SU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCksIEpTVGVzdFN0cmluZ2lmaWVyKTsK
LSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyLmdl
dCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyPiB8fCAhSlNU
ZXN0U3RyaW5naWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmlu
Z2lmaWVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RT
dHJpbmdpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0U3RyaW5naWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdp
ZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllcjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RT
dHJpbmdpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFj
ZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXIuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0
OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHBy
IChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAg
ICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U3RyaW5naWZpZXIo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0U3RyaW5naWZpZXI+
JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U3Ry
aW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uUHJv
dG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBA
IC0xODQsMjcgKzE4NSwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5n
aWZpCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbj46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5
cGVGdW5jdGlvbl90b1N0cmluZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAidG9TdHJpbmciKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBz
cGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmdldCgp
KQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24pOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24gPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlKCks
IEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKTsKLSAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmdl
dCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCkpCisgICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNw
YWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24pOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
bjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZN
JiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFj
Y2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3Rh
dGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRP
cGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTY3LDcgKzY4LDcgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpA
QCAtMjAxLDI3ICsyMDIsMzggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmlu
Z2lmaQogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJh
dGlvbj46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0
aW9uX3RvU3RyaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0
cmluZyIpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnRE
YXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBz
cGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24+IHx8ICFKU1Rlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4g
SVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlKCksIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24pOwotICAgIGVsc2UKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbik7Ci0gICAgYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRh
LmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisg
ICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2Uq
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICgh
c3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVy
YXRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24pOworICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5nZXQoKTsK
IH0KIAogdm9pZCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmgJKHJldmlzaW9uIDI4OTg2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpT
Qzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCShyZXZpc2lvbiAyODk4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
cy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTY3LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBlLCBCYXNlKTsKICAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yMDEsMjcgKzIwMiwzOCBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM+OjpjYWxsPGpz
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc1Byb3RvdHlwZUZ1bmN0aW9uX3Rv
U3RyaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIp
OwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2Vz
ID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
SW1wbGVtZW50ZWRBcz4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
czo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXM+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwg
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzKTsKLSAgICBlbHNlCi0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50
ZWRBcyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwor
CisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBs
ZW1lbnRlZEFzPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
IElHTk9SRV9XQVJOSU5HU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3Bh
Y2U7CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOwog
fQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uSW1wbGVtZW50ZWRBcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMu
aAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbCh2bSk7CiAgICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyhKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXM+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAj
aW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
NjYsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2UoKTsKQEAgLTE4NCwyNyArMTg1LDM4IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZz46OmNhbGw8anNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nUHJvdG90eXBlRnVuY3Rpb25fdG9TdHJpbmdCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnRE
YXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zz4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhl
YXBDZWxsVHlwZSgpLCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcpOwot
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1h
cE1vZGUuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+
IHx8ICFKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6Om5lZWRzRGVzdHJ1
Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zz4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcpOwor
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmcgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
KyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dB
Uk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbk5hbWVkVG9TdHJpbmcgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7CiB9CiAKIHZvaWQg
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZz4mJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmll
clJlYWRPbmx5QXR0cmlidXRlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgpAQCAtNjgsNyArNjksNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRp
YyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAg
ICAgewogICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlUHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkBAIC0yMDAsMjcgKzIwMSwzOCBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlPjo6Y2FsbDxqc1Rlc3RTdHJpbmdp
ZmllclJlYWRPbmx5QXR0cmlidXRlUHJvdG90eXBlRnVuY3Rpb25fdG9TdHJpbmdCb2R5PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZT4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUoKSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSk7Ci0gICAgZWxzZQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
Y2VsbEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlKTsK
LSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlPiB8fCAhSlNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNl
OworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgpOwogfQogCiB2b2lkIEpT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlND
OjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBz
dGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBA
CiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC02OSw3ICs3MCw3IEBAIHB1Ymxp
YzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
SlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
UHJvdG90eXBlLCBCYXNlKTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7
CkBAIC0yMTksMjcgKzIyMCwzOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3Ry
aW5naWZpCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZT46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVQcm90
b3R5cGVGdW5jdGlvbl90b1N0cmluZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAidG9TdHJpbmciKTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK0pTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdl
dCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2
bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBl
KCksIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlKTsKLSAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
LmdldCgpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAo
IXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JF
X1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAg
ICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpOwogfQogCiB2b2lkIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpT
Qzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGUoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdyYXBwZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFw
cGVyLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0VGFnZ2VkV3JhcHBlci5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTYwLDcg
KzYxLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0VGFnZ2VkV3JhcHBlclBy
b3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZSgpOwpA
QCAtMTYyLDI3ICsxNjMsMzggQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdFRhZ2dl
ZFdyYQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0VGFnZ2VkV3JhcHBlcjo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RUYWdnZWRXcmFw
cGVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0VGFnZ2VkV3JhcHBlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRhZ2dlZFdy
YXBwZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRhZ2dlZFdy
YXBwZXI+IHx8ICFKU1Rlc3RUYWdnZWRXcmFwcGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdFRhZ2dlZFdyYXBwZXI+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RU
YWdnZWRXcmFwcGVyID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
dm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCksIEpTVGVzdFRhZ2dl
ZFdyYXBwZXIpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFn
Z2VkV3JhcHBlciA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUoKSwgSlNUZXN0VGFnZ2VkV3JhcHBlcik7Ci0gICAg
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyLmdldCgp
OworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0VGFnZ2VkV3JhcHBlcj4gfHwgIUpT
VGVzdFRhZ2dlZFdyYXBwZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRh
Z2dlZFdyYXBwZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdFRhZ2dlZFdyYXBwZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdFRhZ2dlZFdyYXBwZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RUYWdnZWRXcmFwcGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFRhZ2dl
ZFdyYXBwZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0VGFnZ2VkV3JhcHBlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RUYWdnZWRXcmFw
cGVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2Vk
V3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmgJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwcm90ZWN0
ZWQ6CiAgICAgSlNUZXN0VGFnZ2VkV3JhcHBlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0JiwgUmVmPFRlc3RUYWdnZWRXcmFwcGVyPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZz
LmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
NyBAQAogI2luY2x1ZGUgIkpTVGVzdFR5cGVkZWZzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCkBAIC0xMTMsNyArMTE0LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9J
TkZPOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUsIEJhc2UpOwogICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2UoKTsKQEAgLTc3MiwyNyArNzczLDM4IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihqc1Rlc3RUeXBlZGVmc1AKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5
cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uX2NhbGxXaXRoU2Vx
dWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJjYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZSIpOwogfQogCi1KU0M6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQorSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFR5cGVkZWZzOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNs
aWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdFR5cGVkZWZzPiB8fCAhSlNUZXN0VHlwZWRlZnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0VHlwZWRlZnM+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RU
eXBlZGVmcyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpLCBKU1Rlc3RUeXBlZGVmcyk7
Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxI
ZWFwQ2VsbFR5cGUoKSwgSlNUZXN0VHlwZWRlZnMpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7CisgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JHUFVNYXBNb2RlLmdldCgpOworICAg
IGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0VHlwZWRlZnM+IHx8ICFKU1Rlc3RUeXBlZGVmczo6bmVlZHNEZXN0cnVjdGlvbik7Cisg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0VHlwZWRlZnM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdFR5cGVkZWZzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RUeXBlZGVmcyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdFR5cGVkZWZzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CiBJR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFR5cGVkZWZz
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdFR5cGVkZWZzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CiBJR05PUkVfV0FSTklOR1NfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNw
YWNlOworICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5
cGVkZWZzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
KyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMu
Z2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0VHlwZWRlZnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCShyZXZpc2lv
biAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0VHlwZWRlZnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0m
LCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpT
dWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KLSAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0
aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6
ZXImKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJH
bG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxT
Y29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1dv
cmtlckdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgpAQCAtMjQzLDIzICsyNDQsMzQgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzV29ya2Vy
R2xvYmFsUwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46Omdl
dDxqc1dvcmtlckdsb2JhbFNjb3BlX1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JHZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1K
U0M6Oklzb1N1YnNwYWNlKiBKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXb3JrZXJHbG9iYWxTY29w
ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBzcGFjZTsKLSAgICBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xpZW50
RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGUsIEpTV29ya2VyR2xvYmFs
U2NvcGUpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9i
YWxTY29wZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpCisgICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yR1BVTWFwTW9kZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7
CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZv
ckpTV29ya2VyR2xvYmFsU2NvcGUsIEpTV29ya2VyR2xvYmFsU2NvcGUpOworICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOworICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKIH0KIAogdm9p
ZCBKU1dvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmgJKHJldmlzaW9u
IDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dv
cmtlckdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpT
Qzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAg
c3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CiAgICAgV29ya2VyR2xvYmFsU2NvcGUmIHdyYXBwZWQoKSBjb25zdAogICAgIHsK
QEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsK
ICAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNXb3JrZXJHbG9i
YWxTY29wZVByb3RvdHlwZSwgQmFzZSk7CiAgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
V29ya2xldEdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAy
ODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3Jr
bGV0R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5j
bHVkZSAiSlNXb3JrbGV0R2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCkBAIC0xNTcsMjMgKzE1OCwzNCBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoanNXb3JrbGV0R2xvYmFsCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1dvcmtsZXRHbG9i
YWxTY29wZT46OmdldDxqc1dvcmtsZXRHbG9iYWxTY29wZV9Xb3JrbGV0R2xvYmFsU2NvcGVDb25z
dHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgYXR0cmlidXRl
TmFtZSk7CiB9CiAKLUpTQzo6SXNvU3Vic3BhY2UqIEpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNX
b3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yV29y
a2xldEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2JhbFNj
b3BlLCBKU1dvcmtsZXRHbG9iYWxTY29wZSk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3Bl
LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckdQVU1hcE1vZGUuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZSwgSlNXb3JrbGV0R2xv
YmFsU2NvcGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29w
ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwogSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1dvcmtsZXRHbG9iYWxTY29wZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1dvcmts
ZXRHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwogSUdOT1JFX1dBUk5JTkdTX0VORAogSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBz
cGFjZTsKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmts
ZXRHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2xl
dEdsb2JhbFNjb3BlLmdldCgpOwogfQogCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNXb3JrbGV0R2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsK
ICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1
cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsKHZtKTsKICAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiAgICAgV29ya2xldEds
b2JhbFNjb3BlJiB3cmFwcGVkKCkgY29uc3QKICAgICB7CkBAIC04Miw3ICs4Miw3IEBAIHB1Ymxp
YzoKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
SlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlLCBCYXNl
KTsKICAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NjEsNyArMTYxLDcgQEAgYm9vbCBSdW50aW1lQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogUnVudGltZUFycmF5Ojpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
UnVudGltZUFycmF5OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5ydW50aW1lQXJy
YXlTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCShy
ZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3RhdGljIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0KQEAgLTg4LDcgKzg4LDcgQEAg
cHJpdmF0ZToKICAgICBSdW50aW1lQXJyYXkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgQmluZGluZ3M6OkFycmF5Kik7CiAKLSAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7CiAKICAgICBC
aW5kaW5nc0FycmF5KiBtX2FycmF5OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgyLDcgQEAg
Ym9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAgIHJldHVybiBJbnRl
cm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKIH0KIAotSXNvU3Vic3BhY2UqIFJ1bnRpbWVNZXRob2Q6OnN1YnNwYWNl
Rm9ySW1wbChWTSYgdm0pCitHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIFJ1bnRpbWVNZXRob2Q6OnN1
YnNwYWNlRm9ySW1wbChWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5ydW50aW1lTWV0aG9kU3BhY2UoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAyODk4NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKENlbGxUeXBlKSA9PSBzaXplb2YoUnVudGltZU1ldGhvZCksICJSdW50aW1lTWV0
aG9kIHN1YmNsYXNzZXMgdGhhdCBhZGQgZmllbGRzIG5lZWQgdG8gb3ZlcnJpZGUgc3Vic3BhY2VG
b3I8PigpIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2VsbFR5cGU6OmRlc3Ryb3kgPT0gSlND
OjpKU0NlbGw6OmRlc3Ryb3kpOwpAQCAtNzQsNyArNzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CisgICAgc3RhdGljIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKFZNJik7CiAKICAgICBCaW5kaW5nczo6TWV0aG9kKiBt
X21ldGhvZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5j
cHAJKHJldmlzaW9uIDI4OTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA4LTIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTMsNyArMzEzLDcgQEAg
RXhjZXB0aW9uKiB0aHJvd1J1bnRpbWVPYmplY3RJbnZhbGlkQWNjZQogICAgIHJldHVybiB0aHJv
d0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRyeWluZyB0byBhY2Nlc3Mgb2JqZWN0IGZyb20gZGVz
dHJveWVkIHBsdWctaW4uIikpOwogfQogCi1KU0M6Oklzb1N1YnNwYWNlKiBSdW50aW1lT2JqZWN0
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogUnVudGltZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+cnVudGlt
ZU9iamVjdFNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9v
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuaAkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoQ2VsbFR5cGUpID09IHNpemVvZihSdW50aW1lT2JqZWN0KSwg
IlJ1bnRpbWVPYmplY3Qgc3ViY2xhc3NlcyB0aGF0IGFkZCBmaWVsZHMgbmVlZCB0byBvdmVycmlk
ZSBzdWJzcGFjZUZvcjw+KCkiKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDZWxsVHlwZTo6ZGVz
dHJveSA9PSBSdW50aW1lT2JqZWN0OjpkZXN0cm95KTsKQEAgLTg2LDcgKzg2LDcgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOworICAgIHN0YXRpYyBHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChWTSYpOwogCiAgICAgUmVmUHRyPEluc3Rh
bmNlPiBtX2luc3RhbmNlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oCShyZXZpc2lvbiAyODk4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDcgKzk1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgot
ICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgc3Rh
dGljIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAg
ewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9CkBAIC0xMzgsNyAr
MTM4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdG9Cb29sZWFuKEpTR2xvYmFsT2JqZWN0Kikg
Y29uc3Q7IC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBpcyBicm9rZW4gYmVjYXVzZSBub25lIG9m
IHRoZSBzdXBlcmNsYXNzZXMgYXJlIG1hcmtlZCB2aXJ0dWFsLiBXZSBuZWVkIHRvIHNvbHZlIHRo
aXMgaW4gdGhlIGxvbmdlciB0ZXJtLgogCi0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoVk0mKTsKKyAgICBzdGF0aWMgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoVk0mKTsKIAogICAgIFJlZlB0cjxPYmpjSW5zdGFuY2U+IF9pbnN0YW5jZTsKICAg
ICBTdHJpbmcgbV9pdGVtOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5tbQkocmV2aXNpb24gMjg5ODY0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMyLDEzICszMzIsMTMgQEAg
Ym9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnRvQm9vbGVhbihKUwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotSlNDOjpJc29TdWJzcGFjZSogT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCitKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogT2JqY0Zh
bGxiYWNrT2JqZWN0SW1wOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEpTQzo6SXNvU3Vic3BhY2VQZXJWTT4gcGVyVk0oW10gKEpTQzo6
Vk0mIHZtKSB7Ci0gICAgICAgIHJldHVybiBJU09fU1VCU1BBQ0VfUEFSQU1FVEVSUyh2bS5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKSwgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNDOjpJc29TdWJzcGFjZVBlclZNPiBwZXJWTShbXSAo
SlNDOjpIZWFwJiBoZWFwKSB7CisgICAgICAgIHJldHVybiBJU09fU1VCU1BBQ0VfUEFSQU1FVEVS
UyhoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgT2JqY0ZhbGxiYWNrT2JqZWN0
SW1wKTsKICAgICB9KTsKLSAgICByZXR1cm4gJnBlclZNLmdldCgpLmZvclZNKHZtKTsKKyAgICBy
ZXR1cm4gJnBlclZNLmdldCgpLmNsaWVudElzb1N1YnNwYWNlZm9yVk0odm0pOwogfQogCi19Ci19
Cit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>