<?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>177922</bug_id>
          
          <creation_ts>2017-10-05 01:36:46 -0700</creation_ts>
          <short_desc>Refactor the inliner to simplify block linking</short_desc>
          <delta_ts>2017-10-09 16:56:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176601</blocked>
    
    <blocked>177925</blocked>
    
    <blocked>177926</blocked>
    
    <blocked>177927</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1356920</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-10-05 01:36:46 -0700</bug_when>
    <thetext>This bug is to discuss separately the refactoring I started in https://bugs.webkit.org/show_bug.cgi?id=176601.

The key idea is to put basic blocks in m_unlinkedBlocks once we have given them a terminal (and know where their successor will be allocated) instead of as soon as possible.
Details are in the Changelog, and in the aforementioned bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356975</commentid>
    <comment_count>1</comment_count>
      <attachid>322824</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-10-05 04:40:46 -0700</bug_when>
    <thetext>Created attachment 322824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356976</commentid>
    <comment_count>2</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-10-05 04:43:02 -0700</bug_when>
    <thetext>This patch is based on the one that I last submitted to https://bugs.webkit.org/show_bug.cgi?id=176601, and takes into account the comments left there by Keith and Saam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356977</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-05 04:43:54 -0700</bug_when>
    <thetext>Attachment 322824 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4084:  WTF_CONCAT is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4086:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4091:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6171:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 4 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358332</commentid>
    <comment_count>4</comment_count>
      <attachid>322824</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 12:23:07 -0700</bug_when>
    <thetext>Comment on attachment 322824
Patch

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

r=me with some comments.

&gt; Source/JavaScriptCore/ChangeLog:23
&gt; +        - I made separate allocateBlock routines because the little dance with AdoptRef(* new BasicBlock(...)) was being repeated in lots of places, and typos in that were a major source of bugs during other refactorings

typo: AdoptRef =&gt; adoptRef

&gt; Source/JavaScriptCore/ChangeLog:26
&gt; +        - probably some more I forgot..

no need for this. This is assumed in most changelog entries :)

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:82
&gt; +#define VERBOSE_LOG(...) dataLogIf(Options::verboseDFGByteCodeParsing(), __VA_ARGS__)

Why not use the static verbose variable instead of the runtime option? I think until we prove having this runtime switch is actually useful, we should let the compiler eliminate a bunch of the dead code.

Also, FWIW, I&apos;m not sure we&apos;ll need all the logging you added. Do you think it&apos;s all actually helpful to someone else hacking on this code in the future?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:208
&gt; +    // or they can be untargetable, with bytecodeBegin==UINT_MAX, to be managed manually and not by the linkBlock machinery.

what are the use cases for the not well defined bytecode begin?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1238
&gt; +void ByteCodeParser::makeJumpTo(BasicBlock* block)

Style nit: I think a name more consistent with DFG bytecode parser naming would be: addJumpTo instead of makeJumpTo

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1246
&gt; +void ByteCodeParser::makeJumpTo(unsigned bytecodeIndex)

ditto

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1292
&gt; +    // We first check that we have profiling information about this call, and that it did not behave too polymorphically.

nit: I&apos;d say: &quot;did not behave too polymorphically&quot; =&gt; &quot;does not have megamorphic callees&quot; or something similar.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2045
&gt; +

please remove empty line

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4094
&gt; +        shouldContinueParsing
&gt; +#define LAST_OPCODE(name) \

style nit: I&apos;d add a newline between these two macros

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4096
&gt; +        if (m_currentBlock-&gt;terminal()) { \

nit: I&apos;d cache the result of terminal() since I&apos;m not 100% sure the compiler will CSE it because it loops and such.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4104
&gt; +                case Jump: \
&gt; +                case Branch: \
&gt; +                case Switch: \
&gt; +                    ASSERT(!m_currentBlock-&gt;isLinked); \
&gt; +                    m_inlineStackTop-&gt;m_unlinkedBlocks.append(m_currentBlock); \
&gt; +                    break;\
&gt; +                default: break; \

style nit: Webkit style says that we don&apos;t indent between switch and case

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4162
&gt;                  addToGraph(Jump, OpInfo(m_currentIndex));

maybe use your helper function here?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6320
&gt; +            // - we may just have returned from an inlined callee that had some early returns and so allocated a continuation block, and the instruction after the call is a jump target.

nit: I&apos;d break this line up across 2 new lines

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6344
&gt; +                // This case only happens if the last instruction was an inlined call with early returns or polymorphic (creating an empty continuation block),

nit: I&apos;d break this line up across 2 new lines

&gt; JSTests/stress/arguments-elimination-varargs-too-many-args-arg-count.js:28
&gt; -            throw &quot;Error: bad result in loop in DFG: &quot; + result.result;
&gt; +            throw &quot;Error: bad result in loop in DFG (result.ftl: &quot; + result.ftl + &quot;): &quot; + result.result + &quot; in iteration &quot; + i;
&gt;      } else {
&gt;          if (result.result != 1)
&gt; -            throw &quot;Error: bad result in loop before DFG: &quot; + result.result;
&gt; +            throw &quot;Error: bad result in loop before DFG (result.ftl: &quot; + result.ftl + &quot;): &quot; + result.result + &quot; in iteration &quot; + i;

Please revert or add a changelog entry for JSTests. I&apos;d vote for reverting since this was probably just used by you for some local debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358480</commentid>
    <comment_count>5</comment_count>
      <attachid>323239</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-10-09 16:13:15 -0700</bug_when>
    <thetext>Created attachment 323239
Applied Saam&apos;s suggestions + s/PARSER_ASSERT/RELEASE_ASSERT/g</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358482</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-09 16:16:19 -0700</bug_when>
    <thetext>Attachment 323239 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4084:  WTF_CONCAT is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4086:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:4091:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6167:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358483</commentid>
    <comment_count>7</comment_count>
      <attachid>323240</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-10-09 16:17:43 -0700</bug_when>
    <thetext>Created attachment 323240
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358508</commentid>
    <comment_count>8</comment_count>
      <attachid>323240</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-09 16:55:29 -0700</bug_when>
    <thetext>Comment on attachment 323240
Patch for landing

Clearing flags on attachment: 323240

Committed r223086: &lt;http://trac.webkit.org/changeset/223086&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358509</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-09 16:55:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358510</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-09 16:56:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/34898758&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322824</attachid>
            <date>2017-10-05 04:40:46 -0700</date>
            <delta_ts>2017-10-09 16:13:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177922-20171005134044.patch</filename>
            <type>text/plain</type>
            <size>78057</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YzRlNGM5ZDEyODI1OTNlN2FhZGZmNDMwNDEwZTZiOWE3NTc2ZGU1Li45ZjE2MWE4ZmFhNDU4ZjI5
NjljMjU0NTRlMjQ2YTg3ZDIxOTQzY2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAxNy0wOS0yNiAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBpbmxpbmVyIHRvIHNpbXBsaWZ5IGJsb2NrIGxp
bmtpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBiaWdnZXN0IHJlZmFjdG9yIGNoYW5nZXMgdGhlIHdheSBibG9ja3MgYXJlIGxpbmtlZC4gSW4g
REZHQnl0ZUNvZGVQYXJzZXIsIG1vc3QgdGVybWluYWxzIChzdWNoIGFzIEp1bXAgb3IgQnJhbmNo
KSBqdW1wIHRvIG51bGxwdHIgaW5pdGlhbGx5LCBhbmQgaGF2ZQorICAgICAgICBzb21lIG1ldGFk
YXRhIGluZGljYXRpbmcgdGhlIGJ5dGVjb2RlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlaXIg
dGFyZ2V0cy4gVGhleSBhcmUgbGF0ZXIgbGlua2VkIHRvIHRoZSByaWdodCBiYXNpYyBibG9jayB1
c2luZyB0d28gZmllbGRzIG9mIElubGluZVN0YWNrRW50cnk6CisgICAgICAgIC0gbV91bmxpbmtl
ZEJsb2NrcyBpcyBqdXN0IGEgd29ya2xpc3Qgb2YgYmxvY2tzIHdpdGggYSB0ZXJtaW5hbCB0aGF0
IG5lZWRzIHRvIGJlIGxpbmtlZAorICAgICAgICAtIG1fbGlua2luZ1RhcmdldHMgaXMgYSBkaWN0
aW9uYXJ5IGZyb20gYnl0ZWNvZGUgaW5kaWNlcyB0byBCYXNpY0Jsb2NrKgorICAgICAgICBCZWZv
cmUgcmVmYWN0b3JpbmcsIGV2ZXJ5IGJsb2NrIHdhcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGJv
dGggb2YgdGhlc2UgZmllbGRzLCBmb3IgdGhlIElubGluZVN0YWNrRW50cnkgb2Ygd2hhdGV2ZXIg
ZnVuY3Rpb24gYWxsb2NhdGVkIGl0LgorICAgICAgICBUaGlzIGNyZWF0ZWQgYSBzaWduaWZpY2Fu
dCBudW1iZXIgb2YgY29ybmVyIGNhc2VzLCBzdWNoIGFzIGJsb2NrcyBhbGxvY2F0ZWQgaW4gYSBj
YWxsZXIsIHdpdGggYSB0ZXJtaW5hbCB3cml0dGVuIGJ5IGFuIGlubGluZWQgY2FsbGVlIGFuZCBw
b2ludGluZyB0byBhIGJsb2NrIGluIHRoZSBjYWxsZWUsCisgICAgICAgIG9yIGJsb2NrcyBhbGxv
Y2F0ZWQgaW4gYW4gaW5saW5lIGNhbGxlZSwgd2l0aCBhIHRlcm1pbmFsIHdyaXR0ZW4gYnkgdGhl
IGNhbGxlciBhZnRlciBpdCByZXR1cm5zIGFuZCBwb2ludGluZyB0byBhIGJsb2NrIGluIHRoZSBj
YWxsZXIsIG9yIGJsb2NrcyB3aXRoIGEgbWFudWFsbHkgbGlua2VkCisgICAgICAgIHRlcm1pbmFs
IHRoYXQgbmVlZHMgdG8gYmUgdGFrZW4gb2ZmIG1fdW5saW5rZWRCbG9ja3MuCisgICAgICAgIEkg
Y2hhbmdlZCB0aGluZ3Mgc28gdGhhdCBibG9ja3MgYXJlIG9ubHkgYWRkZWQgdG8gbV91bmxpbmtl
ZEJsb2NrcyB3aGVuIHRoZWlyIHRlcm1pbmFsIGdldHMgd3JpdHRlbiAoc2VlIHRoZSBMQVNUX09Q
Q09ERSBtYWNybykgbWFraW5nIGl0IGEgbG90IGVhc2llciB0byBiZSBpbiB0aGUgInJpZ2h0IiBJ
bmxpbmVTdGFja0VudHJ5LAorICAgICAgICB0aGF0IGlzIHRoZSBvbmUgdGhhdCBob2xkcyB0aGVp
ciB0YXJnZXQgaW4gaXRzIG1fbGlua2luZ1RhcmdldHMgZmllbGQuCisKKyAgICAgICAgVGhlcmUg
YXJlIGEgZmV3IG11Y2ggc21hbGxlciByZWZhY3RvcnMgaW4gdGhpcyBwYXRjaDoKKyAgICAgICAg
LSBwYXJzZSgpIGlzIG5vdyBvZiB0eXBlIHZvaWQgaW5zdGVkIG9mIGJvb2wgKGl0IHdhcyBhbHdh
eXMgcmV0dXJuaW5nIHRydWUpCisgICAgICAgIC0gVGhlIDcgYW5kIDggYXJndW1lbnRzIG9mIGhh
bmRsZUNhbGwgd2VyZSBpbmxpbmVkIGluIGl0cyAzIGFyZ3VtZW50cyB2ZXJzaW9uIGZvciByZWFk
YWJpbGl0eQorICAgICAgICAtIFRoZSA5IGFyZ3VtZW50IHZlcnNpb24gd2FzIGNsZWFuZWQgdXAg
YW5kIHNpbXBsaWZpZWQKKyAgICAgICAgLSBJIG1hZGUgc2VwYXJhdGUgYWxsb2NhdGVCbG9jayBy
b3V0aW5lcyBiZWNhdXNlIHRoZSBsaXR0bGUgZGFuY2Ugd2l0aCBBZG9wdFJlZigqIG5ldyBCYXNp
Y0Jsb2NrKC4uLikpIHdhcyBiZWluZyByZXBlYXRlZCBpbiBsb3RzIG9mIHBsYWNlcywgYW5kIHR5
cG9zIGluIHRoYXQgd2VyZSBhIG1ham9yIHNvdXJjZSBvZiBidWdzIGR1cmluZyBvdGhlciByZWZh
Y3RvcmluZ3MKKyAgICAgICAgLSBKdW1wcyBhcmUgbm93IGNyZWF0ZWQgd2l0aCBleHBsaWNpdCBt
YWtlSnVtcFRvKCkgZnVuY3Rpb25zLCBwcm92aWRpbmcgc29tZSBzYW5pdHkgY2hlY2tpbmcgdGhy
b3VnaCBhc3NlcnRzIGFuZCBkaWRMaW5rKCkKKyAgICAgICAgLSBCbG9ja3MgYXJlIG9ubHkgYWRk
ZWQgdG8gbV91bmxpbmtlZEJsb2NrcyBpZiB0aGV5IGVuZCBpbiBhIHRlcm1pbmFsIHRoYXQgbGlu
a0Jsb2NrIHdvcmtzIHdpdGggKHNlZSBMQVNUX09QQ09ERSkKKyAgICAgICAgLSBwcm9iYWJseSBz
b21lIG1vcmUgSSBmb3Jnb3QuLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9HcmFwaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBhcnNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2FuY2VsTGlua2luZ0ZvckJsb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoKKyAgICAgICAgKiBkZmcv
REZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1w
bCk6CisKIDIwMTctMTAtMDUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAg
ICAgICAgTWFrZSBzdXJlIGFsbCBwcm90b3R5cGVzIHVuZGVyIHBvbHkgcHJvdG8gZ2V0IGFkZGVk
IGludG8gdGhlIFZNJ3MgcHJvdG90eXBlIG1hcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaAppbmRleCA2NDAzZWFlZTg5YjNhMDA0ODZlOTRhMTcxMWNiZTNlYjVkOTM0
NGNkLi4xZTIzZTM3NjM3YzQzMWUxOGI2ODU4ZjE2YjYzNDkyZGM3YWNmODdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtMjUxLDIxICsyNTEsNiBAQCBw
cml2YXRlOgogfTsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDU+IEJsb2NrTGlzdDsK
LQotc3RydWN0IFVubGlua2VkQmxvY2sgewotICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Ci0gICAg
Ym9vbCBtX25lZWRzTm9ybWFsTGlua2luZzsKLSAgICBib29sIG1fbmVlZHNFYXJseVJldHVybkxp
bmtpbmc7Ci0gICAgCi0gICAgVW5saW5rZWRCbG9jaygpIHsgfQotICAgIAotICAgIGV4cGxpY2l0
IFVubGlua2VkQmxvY2soQmFzaWNCbG9jayogYmxvY2spCi0gICAgICAgIDogbV9ibG9jayhibG9j
aykKLSAgICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQotICAgICAgICAsIG1fbmVl
ZHNFYXJseVJldHVybkxpbmtpbmcoZmFsc2UpCi0gICAgewotICAgIH0KLX07CiAgICAgCiBzdGF0
aWMgaW5saW5lIHVuc2lnbmVkIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2NrKiog
YmFzaWNCbG9jaykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKaW5kZXggNzVjMWU1OWE5OGRjMjVhZWJiMDBlNmRhNGI2M2ZiZWViNWYxMzc5
NS4uNWFjZjY2NTM4M2FkNDhkOTIwOTYzYjVlMWIyMTUwMTRiZTFjMTg2MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTc3LDExICs3
NywxMSBAQCBuYW1lc3BhY2UgewogICAgIH0gXAogfSB3aGlsZSAoMCkKIAotfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NzkyNworLy8gQ2hlY2sgdGhhdCB0aGUgcnVudGltZSBjb3N0IG9mIHRoaXMgaXMg
bm90IHRvbyBsYXJnZS4gSWYgaXQgaXMsIGNvbnNpZGVyIG1ha2luZyB0aGlzIG1hY3JvIGEgbm8t
b3AgaW4gcmVsZWFzZSBtb2RlLgorI2RlZmluZSBWRVJCT1NFX0xPRyguLi4pIGRhdGFMb2dJZihP
cHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCksIF9fVkFfQVJHU19fKQogCi1uYW1l
c3BhY2UgREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7Ci19Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogY2xhc3MgQ29uc3Rh
bnRCdWZmZXJLZXkgewogcHVibGljOgpAQCAtMTgxLDcgKzE4MSw3IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgLy8gUGFyc2UgYSBmdWxsIENvZGVCbG9jayBvZiBieXRlY29kZS4KLSAgICBi
b29sIHBhcnNlKCk7CisgICAgdm9pZCBwYXJzZSgpOwogICAgIAogcHJpdmF0ZToKICAgICBzdHJ1
Y3QgSW5saW5lU3RhY2tFbnRyeTsKQEAgLTE5MSw2ICsxOTEsNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAgICB7CisgICAg
ICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVMb2NhbHM6IHRyeWluZyB0byByYWlzZSBtX251bUxv
Y2FscyBmcm9tICIsIG1fbnVtTG9jYWxzLCAiIHRvICIsIG5ld051bUxvY2FscywgIlxuIik7CiAg
ICAgICAgIGlmIChuZXdOdW1Mb2NhbHMgPD0gbV9udW1Mb2NhbHMpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIG1fbnVtTG9jYWxzID0gbmV3TnVtTG9jYWxzOwpAQCAtMjAzLDE2ICsyMDQs
MjAgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwg
Tm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIAogICAgIHZv
aWQgcmVmaW5lU3RhdGljYWxseShDYWxsTGlua1N0YXR1cyYsIE5vZGUqIGNhbGxUYXJnZXQpOwor
ICAgIC8vIEJsb2NrcyBjYW4gZWl0aGVyIGJlIHRhcmdldGFibGUgKGkuZS4gaW4gdGhlIG1fYmxv
Y2tMaW5raW5nVGFyZ2V0cyBvZiBvbmUgSW5saW5lU3RhY2tFbnRyeSkgd2l0aCBhIHdlbGwtZGVm
aW5lZCBieXRlY29kZUJlZ2luLAorICAgIC8vIG9yIHRoZXkgY2FuIGJlIHVudGFyZ2V0YWJsZSwg
d2l0aCBieXRlY29kZUJlZ2luPT1VSU5UX01BWCwgdG8gYmUgbWFuYWdlZCBtYW51YWxseSBhbmQg
bm90IGJ5IHRoZSBsaW5rQmxvY2sgbWFjaGluZXJ5LgorICAgIEJhc2ljQmxvY2sqIGFsbG9jYXRl
VGFyZ2V0YWJsZUJsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIEJhc2ljQmxvY2sq
IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKKyAgICAvLyBBbiB1bnRhcmdldGFibGUgYmxv
Y2sgY2FuIGJlIGdpdmVuIGEgYnl0ZWNvZGVJbmRleCB0byBiZSBsYXRlciBtYW5hZ2VkIGJ5IGxp
bmtCbG9jaywgYnV0IG9ubHkgb25jZSwgYW5kIGl0IGNhbiBuZXZlciBnbyBpbiB0aGUgb3RoZXIg
ZGlyZWN0aW9uCisgICAgdm9pZCBtYWtlQmxvY2tUYXJnZXRhYmxlKEJhc2ljQmxvY2sqLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKKyAgICB2b2lkIG1ha2VKdW1wVG8oQmFzaWNCbG9jayopOwor
ICAgIHZvaWQgbWFrZUp1bXBUbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAvLyBIYW5k
bGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBp
bnRyaW5zaWNzLgogICAgIGVudW0gVGVybWluYWxpdHkgeyBUZXJtaW5hbCwgTm9uVGVybWluYWwg
fTsKICAgICBUZXJtaW5hbGl0eSBoYW5kbGVDYWxsKAogICAgICAgICBpbnQgcmVzdWx0LCBOb2Rl
VHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUs
Ci0gICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBDYWxsTGlua1N0YXR1cywKKyAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVz
LAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBUZXJtaW5hbGl0eSBo
YW5kbGVDYWxsKAotICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUsIHVu
c2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKLSAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFy
Z0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKLSAgICBUZXJtaW5h
bGl0eSBoYW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSwgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rl
ck9mZnNldCk7CiAgICAgVGVybWluYWxpdHkgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5v
ZGVUeXBlIG9wLCBDYWxsTW9kZSk7CiAgICAgVGVybWluYWxpdHkgaGFuZGxlVmFyYXJnc0NhbGwo
SW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUpOwogICAgIHZvaWQgZW1pdEZ1
bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc0FyZ3VtbnQpOwpAQCAtMjIxLDExICsyMjYsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgSW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mg
bm90IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZl
IGEgY29zdCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQg
c3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhh
bmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29u
c3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0
aGlzQXJndW1lbnQsIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQg
YXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVk
IG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2Fs
bGVyRG9lc05vcm1hbExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgotICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQg
bmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICBib29sIGF0dGVtcHRUb0lubGluZUNh
bGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2ln
bmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYg
aW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgotICAg
IHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQs
IENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxs
ZXJMaW5rYWJpbGl0eSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB2
b2lkIGlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBD
YWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JC
bG9jayhJbmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4g
dGhlIGdpdmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRo
YXQgaW5saW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25z
LiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQg
YSBjYWxsLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CkBAIC0zMDEsNyAr
MzA1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwog
ICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vzc29ycy4KICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Js
b2NrKiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKLSAgICB2b2lkIGxp
bmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJh
c2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9y
PEJhc2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3Np
YmxlVGFyZ2V0cyk7CiAgICAgCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewpAQCAtNzUyLDggKzc1Niw3
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKLSAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgYXBwZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6
b3BOYW1lKG5vZGUtPm9wKCkpLCAiXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgICAgICAg
YXBwZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCAiXG4iKTsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChub2RlKTsKICAgICAgICAgaWYgKGNsb2Ji
ZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxz
ZTsKQEAgLTExMTUsMzMgKzExMTgsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiBtX2NvbnN0YW50QnVmZmVyUmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9z
d2l0Y2hSZW1hcDsKICAgICAgICAgCi0gICAgICAgIC8vIEJsb2NrcyBpbnRyb2R1Y2VkIGJ5IHRo
aXMgY29kZSBibG9jaywgd2hpY2ggbmVlZCBzdWNjZXNzb3IgbGlua2luZy4KLSAgICAgICAgLy8g
TWF5IGluY2x1ZGUgdXAgdG8gb25lIGJhc2ljIGJsb2NrIHRoYXQgaW5jbHVkZXMgdGhlIGNvbnRp
bnVhdGlvbiBhZnRlcgotICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW4gdGhlIGNhbGxlci4gVGhl
c2UgbXVzdCBiZSBhcHBlbmRlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5Ci0gICAgICAgIC8vIGFy
ZSBjcmVhdGVkLCBidXQgdGhlaXIgYnl0ZWNvZGVCZWdpbiB2YWx1ZXMgbmVlZCBub3QgYmUgaW4g
b3JkZXIgYXMgdGhleQotICAgICAgICAvLyBhcmUgaWdub3JlZC4KLSAgICAgICAgVmVjdG9yPFVu
bGlua2VkQmxvY2s+IG1fdW5saW5rZWRCbG9ja3M7CisgICAgICAgIC8vIFRoZXNlIGFyZSBibG9j
a3Mgd2hvc2UgdGVybWluYWwgaXMgYSBKdW1wLCBCcmFuY2ggb3IgU3dpdGNoLCBhbmQgd2hvc2Ug
dGFyZ2V0IGhhcyBub3QgeWV0IGJlZW4gbGlua2VkLgorICAgICAgICAvLyBUaGVpciB0ZXJtaW5h
bCBpbnN0ZWFkIHJlZmVycyB0byBhIGJ5dGVjb2RlIGluZGV4LCBhbmQgdGhlIHJpZ2h0IEJCIGNh
biBiZSBmb3VuZCBpbiBtX2Jsb2NrTGlua2luZ1RhcmdldHMuCisgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gbV91bmxpbmtlZEJsb2NrczsKICAgICAgICAgCiAgICAgICAgIC8vIFBvdGVudGlh
bCBibG9jayBsaW5raW5nIHRhcmdldHMuIE11c3QgYmUgc29ydGVkIGJ5IGJ5dGVjb2RlQmVnaW4s
IGFuZAogICAgICAgICAvLyBjYW5ub3QgaGF2ZSB0d28gYmxvY2tzIHRoYXQgaGF2ZSB0aGUgc2Ft
ZSBieXRlY29kZUJlZ2luLgogICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tMaW5r
aW5nVGFyZ2V0czsKIAotICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3
YXMgc3BsaXQgaW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCi0gICAgICAgIC8vIHRoZSBoZWFk
IG9mIHRoZSBjYWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRv
IHRoZQotICAgICAgICAvLyBtX3VubGlua2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkg
YXJvdW5kOiB0aGVyZSdzIG5vIHdheSBmb3IKLSAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3Vu
bGlua2VkQmxvY2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgIEJhc2lj
QmxvY2sqIG1fY2FsbHNpdGVCbG9ja0hlYWQ7Ci0gICAgICAgIAotICAgICAgICAvLyBEb2VzIHRo
ZSBjYWxsc2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8gVGhpcyBpcyB0eXBpY2FsbHkgdHJ1
ZQotICAgICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3IgdGhlIG1hY2hpbmUgY29kZSBibG9j
aydzIGlubGluZSBzdGFjayBlbnRyeQotICAgICAgICAvLyAoc2luY2UgdGhhdCBvbmUgaXMgbm90
IGlubGluZWQpIGFuZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW5saW5lIGNhbGxlZQotICAgICAgICAv
LyBkaWQgdGhlIGxpbmtpbmcgZm9yIHVzLgotICAgICAgICBib29sIG1fY2FsbHNpdGVCbG9ja0hl
YWROZWVkc0xpbmtpbmc7Ci0gICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNldCBieSBvcF9l
bnRlciBpbiBwYXJzZUJsb2NrKCksIGFuZCBpbmRpY2F0ZXMgdGhlIGZpcnN0IGJsb2NrIG9mIHRo
ZSBmdW5jdGlvbi4KKyAgICAgICAgQmFzaWNCbG9jayogbV9lbnRyeUJsb2NrOworCisgICAgICAg
IC8vIE9wdGlvbmFsOiBhIGNvbnRpbnVhdGlvbiBibG9jayBmb3IgcmV0dXJucyB0byBqdW1wIHRv
LiBJdCBpcyBzZXQgYnkgZWFybHkgcmV0dXJucyBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAgICAg
ICAgQmFzaWNCbG9jayogbV9jb250aW51YXRpb25CbG9jazsKKwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9yZXR1cm5WYWx1ZTsKICAgICAgICAgCiAgICAgICAgIC8vIFNwZWN1bGF0aW9ucyBh
Ym91dCB2YXJpYWJsZSB0eXBlcyBjb2xsZWN0ZWQgZnJvbSB0aGUgcHJvZmlsZWQgY29kZSBibG9j
aywKLSAgICAgICAgLy8gd2hpY2ggYXJlIGJhc2VkIG9uIE9TUiBleGl0IHByb2ZpbGVzIHRoYXQg
cGFzdCBERkcgY29tcGlsYXRpbnMgb2YgdGhpcworICAgICAgICAvLyB3aGljaCBhcmUgYmFzZWQg
b24gT1NSIGV4aXQgcHJvZmlsZXMgdGhhdCBwYXN0IERGRyBjb21waWxhdGlvbnMgb2YgdGhpcwog
ICAgICAgICAvLyBjb2RlIGJsb2NrIGhhZCBnYXRoZXJlZC4KICAgICAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVQYXJzZXIgbV9sYXp5T3BlcmFuZHM7CiAgICAgICAgIApAQCAtMTE0OSwxMyAr
MTE0Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFN0dWJJbmZvTWFwIG1fc3R1YkluZm9zOwogICAg
ICAgICBCeVZhbEluZm9NYXAgbV9ieVZhbEluZm9zOwogICAgICAgICAKLSAgICAgICAgLy8gRGlk
IHdlIHNlZSBhbnkgcmV0dXJucz8gV2UgbmVlZCB0byBoYW5kbGUgdGhlICh1bmNvbW1vbiBidXQg
bmVjZXNzYXJ5KQotICAgICAgICAvLyBjYXNlIHdoZXJlIGEgcHJvY2VkdXJlIHRoYXQgZG9lcyBu
b3QgcmV0dXJuIHdhcyBpbmxpbmVkLgotICAgICAgICBib29sIG1fZGlkUmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgLy8gRGlkIHdlIGhhdmUgYW55IGVhcmx5IHJldHVybnM/Ci0gICAgICAgIGJv
b2wgbV9kaWRFYXJseVJldHVybjsKLSAgICAgICAgCiAgICAgICAgIC8vIFBvaW50ZXJzIHRvIHRo
ZSBhcmd1bWVudCBwb3NpdGlvbiB0cmFja2VycyBmb3IgdGhpcyBzbGljZSBvZiBjb2RlLgogICAg
ICAgICBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAgICAg
ICAgIApAQCAtMTE2NSw3ICsxMTUyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEJ5dGVDb2Rl
UGFyc2VyKiwKICAgICAgICAgICAgIENvZGVCbG9jayosCiAgICAgICAgICAgICBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVh
ZCwKICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEg
Y2xvc3VyZSBjYWxsLgogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIs
CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0x
MjI0LDY3ICsxMjEwLDcyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxl
ZDsKIH07CiAKLS8vIFRoZSBpZGlvbToKLS8vICAgICBpZiAodHJ1ZSkgeyAuLi47IGdvdG8gbGFi
ZWw7IH0gZWxzZSBsYWJlbDogY29udGludWUKLS8vIEFsbG93cyB1c2luZyBORVhUX09QQ09ERSBh
cyBhIHN0YXRlbWVudCwgZXZlbiBpbiB1bmJyYWNlZCBpZitlbHNlLCB3aGlsZSBjb250YWluaW5n
IGEgYGNvbnRpbnVlYC4KLS8vIFRoZSBtb3JlIGNvbW1vbiBpZGlvbToKLS8vICAgICBkbyB7IC4u
LjsgfSB3aGlsZSAoZmFsc2UpCi0vLyBEb2Vzbid0IGFsbG93IHVzaW5nIGBjb250aW51ZWAuCi0j
ZGVmaW5lIE5FWFRfT1BDT0RFKG5hbWUpIFwKLSAgICBpZiAodHJ1ZSkgeyBcCi0gICAgICAgIG1f
Y3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKLSAgICAgICAgZ290byBXVEZf
Q09OQ0FUKE5FWFRfT1BDT0RFXywgX19MSU5FX18pOyAvKiBOZWVkIGEgdW5pcXVlIGxhYmVsOiB1
c2FibGUgbW9yZSB0aGFuIG9uY2UgcGVyIGZ1bmN0aW9uLiAqLyBcCi0gICAgfSBlbHNlIFwKLSAg
ICBXVEZfQ09OQ0FUKE5FWFRfT1BDT0RFXywgX19MSU5FX18pOiBcCi0gICAgICAgIGNvbnRpbnVl
CitCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2sodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBVSU5U
X01BWCk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Js
b2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAg
IEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CisgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChibG9ja1B0cik7CisgICAgbV9ncmFwaC5h
cHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIGJsb2NrUHRyOworfQogCi0v
LyBDaGFpbiBleHByZXNzaW9ucyB3aXRoIGNvbW1hLW9wZXJhdG9yIHNvIExBU1RfT1BDT0RFIGNh
biBiZSB1c2VkIGFzIGEgc3RhdGVtZW50LgotI2RlZmluZSBMQVNUX09QQ09ERShuYW1lKSBcCi0g
ICAgcmV0dXJuIFwKLSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChuYW1l
KSwgXAotICAgICAgICBtX2V4aXRPSyA9IGZhbHNlLCBcCi0gICAgICAgIHNob3VsZENvbnRpbnVl
UGFyc2luZworQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxl
QmxvY2soKQoreworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFz
aWNCbG9jayhVSU5UX01BWCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAg
QmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9jay5wdHIoKTsKKyAgICBtX2dyYXBoLmFwcGVuZEJs
b2NrKFdURk1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gYmxvY2tQdHI7Cit9CiAKLUJ5dGVDb2Rl
UGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnN0cnVjdGlv
biogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSkKK3ZvaWQgQnl0ZUNvZGVQYXJz
ZXI6Om1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RF
X0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsKLSAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
KSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbCkpOwotICAgIHJldHVybiBoYW5kbGVDYWxs
KAotICAgICAgICBwY1sxXS51Lm9wZXJhbmQsIG9wLCBjYWxsTW9kZSwgT1BDT0RFX0xFTkdUSChv
cF9jYWxsKSwKLSAgICAgICAgcGNbMl0udS5vcGVyYW5kLCBwY1szXS51Lm9wZXJhbmQsIC1wY1s0
XS51Lm9wZXJhbmQpOworICAgIEFTU0VSVChibG9jay0+Ynl0ZWNvZGVCZWdpbiA9PSBVSU5UX01B
WCk7CisgICAgYmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBieXRlY29kZUluZGV4OworICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQoYmxvY2spOwogfQogCi1C
eXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCi0g
ICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlLCB1bnNpZ25lZCBp
bnN0cnVjdGlvblNpemUsCi0gICAgaW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjptYWtlSnVt
cFRvKEJhc2ljQmxvY2sqIGJsb2NrKQogewotICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGNhbGxlZSkpOworICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2stPnRlcm1p
bmFsKCkpOworICAgIE5vZGUqIGp1bXBOb2RlID0gYWRkVG9HcmFwaChKdW1wKTsKKyAgICBqdW1w
Tm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrOworICAgIG1fY3VycmVudEJsb2NrLT5kaWRMaW5r
KCk7Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6Om1ha2VKdW1wVG8odW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKKyAg
ICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhieXRlY29kZUluZGV4KSk7CisgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworfQorCitC
eXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5z
dHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUpCit7CisgICAgc3Rh
dGljX2Fzc2VydChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29u
c3RydWN0KSwKKyAgICAgICAgIm9wX2NhbGwsIG9wX3RhaWxfY2FsbCBhbmQgb3BfY29uc3RydWN0
IHNob3VsZCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGwpLAor
ICAgICAgICAib3BfY2FsbCwgb3BfdGFpbF9jYWxsIGFuZCBvcF9jb25zdHJ1Y3Qgc2hvdWxkIGFs
d2F5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgIAorICAgIGludCByZXN1bHQgPSBwY1sx
XS51Lm9wZXJhbmQ7CisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIo
cGNbMl0udS5vcGVyYW5kKSk7CisgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
cGNbM10udS5vcGVyYW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1wY1s0XS51Lm9wZXJh
bmQ7CisKICAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ss
IGN1cnJlbnRDb2RlT3JpZ2luKCksCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExp
bmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7Ci0gICAgCi0gICAgcmV0dXJuIGhhbmRsZUNhbGwo
Ci0gICAgICAgIHJlc3VsdCwgb3AsIGNhbGxNb2RlLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJn
ZXQsCi0gICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwg
Y2FsbExpbmtTdGF0dXMpOwotfQotICAgIAotQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAotICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBD
YWxsTW9kZSBjYWxsTW9kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAotICAgIE5vZGUqIGNh
bGxUYXJnZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zm
c2V0LAotICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzKQotewotICAgIHJldHVybiBo
YW5kbGVDYWxsKAotICAgICAgICByZXN1bHQsIG9wLCBJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3Io
Y2FsbE1vZGUpLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLAotICAgICAgICByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMsIGdldFBy
ZWRpY3Rpb24oKSk7CisKKyAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCA9IElubGluZUNh
bGxGcmFtZTo6a2luZEZvcihjYWxsTW9kZSk7CisKKyAgICByZXR1cm4gaGFuZGxlQ2FsbChyZXN1
bHQsIG9wLCBraW5kLCBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsVGFyZ2V0LAorICAgICAg
ICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3Rh
dHVzLCBnZXRQcmVkaWN0aW9uKCkpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVT
dGF0aWNhbGx5KENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZSogY2FsbFRhcmdl
dCkKIHsKLSAgICBpZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkgeworICAgIGlmIChj
YWxsVGFyZ2V0LT5pc0NlbGxDb25zdGFudCgpKQogICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQ
cm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudChjYWxsVGFyZ2V0LT5hc0NlbGwoKSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQogfQogCiBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCkBAIC0xMjk2LDM5ICsxMjg3LDM3IEBAIEJ5dGVD
b2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKIAogICAg
IHJlZmluZVN0YXRpY2FsbHkoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXQpOwogICAgIAotICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCi0gICAgICAgIGRhdGFM
b2coIiAgICBIYW5kbGluZyBjYWxsIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNh
bGxMaW5rU3RhdHVzLCAiXG4iKTsKKyAgICBWRVJCT1NFX0xPRygiICAgIEhhbmRsaW5nIGNhbGwg
YXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIpOwog
ICAgIAotICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewotICAgICAgICAv
LyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGgg
Y2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKLSAgICAgICAg
Ly8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4KKyAgICAvLyBXZSBmaXJzdCBjaGVjayB0
aGF0IHdlIGhhdmUgcHJvZmlsaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY2FsbCwgYW5kIHRo
YXQgaXQgZGlkIG5vdCBiZWhhdmUgdG9vIHBvbHltb3JwaGljYWxseS4KKyAgICBpZiAoY2FsbExp
bmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0Fy
Z3VtZW50ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwog
Ci0gICAgICAgIE5vZGUqIGNhbGxOb2RlID0gYWRkQ2FsbChyZXN1bHQsIG9wLCBudWxscHRyLCBj
YWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHBy
ZWRpY3Rpb24pOwotICAgICAgICBpZiAoY2FsbE5vZGUtPm9wKCkgPT0gVGFpbENhbGwpCi0gICAg
ICAgICAgICByZXR1cm4gVGVybWluYWw7Ci0gICAgICAgIEFTU0VSVChjYWxsTm9kZS0+b3AoKSAh
PSBUYWlsQ2FsbFZhcmFyZ3MgJiYgY2FsbE5vZGUtPm9wKCkgIT0gVGFpbENhbGxGb3J3YXJkVmFy
YXJncyk7Ci0gICAgICAgIHJldHVybiBOb25UZXJtaW5hbDsKLSAgICB9Ci0gICAgCi0gICAgdW5z
aWduZWQgbmV4dE9mZnNldCA9IG1fY3VycmVudEluZGV4ICsgaW5zdHJ1Y3Rpb25TaXplOwotICAg
IAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3Rh
dHVzLCByZWdpc3Rlck9mZnNldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgewotICAgICAgICBpZiAoVU5M
SUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGls
YXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKLSAgICAgICAgcmV0dXJuIE5vblRlcm1pbmFs
OworICAgICAgICAvLyBJbmxpbmluZyBpcyBxdWl0ZSBjb21wbGV4LCBhbmQgbWFuYWdlZCBieSBh
IHBpcGVsaW5lIG9mIGZ1bmN0aW9uczoKKyAgICAgICAgLy8gaGFuZGxlKFZhcmFyZ3MpQ2FsbCAt
PiBoYW5kbGVJbmxpbmluZyAtPiBhdHRlbXB0VG9JbmxpbmVDYWxsIC0+IGlubGluZUNhbGwKKyAg
ICAgICAgLy8gLSBoYW5kbGVDYWxsIGFuZCBoYW5kbGVWYXJhcmdzQ2FsbCBkZWFsIHdpdGggdGhl
IGNhc2Ugd2hlcmUgbm8gaW5saW5pbmcgaGFwcGVucywgYW5kIGRvIHNvbWUgc2FuaXR5IGNoZWNr
cyBvbiB0aGVpciBhcmd1bWVudHMKKyAgICAgICAgLy8gLSBoYW5kbGVJbmxpbmluZyBjaGVja3Mg
d2hldGhlciB0aGUgY2FsbCBpcyBwb2x5bW9ycGhpYywgYW5kIGlmIHNvIGlzIHJlc3BvbnNpYmxl
IGZvciBpbnNlcnRpbmcgYSBzd2l0Y2ggb24gdGhlIGNhbGxlZQorICAgICAgICAvLyAtIGF0dGVt
cHRUb0lubGluZUNhbGwgZGVhbHMgd2l0aCBzcGVjaWFsIGNhc2VzIHN1Y2ggYXMgaW50cmluc2lj
cywgaXQgYWxzbyBjaGVja3MgdGhlIGlubGluaW5nIGhldXJpc3RpYyAodGhyb3VnaCBpbmxpbmlu
Z0Nvc3QpCisgICAgICAgIC8vIC0gaW5saW5lQ2FsbCBmaW5hbGx5IGRvZXMgdGhlIGFjdHVhbCBp
bmxpbmluZywgYWZ0ZXIgYSBjb21wbGljYXRlZCBwcm9jZWR1cmUgdG8gc2V0dXAgdGhlIHN0YWNr
IGNvcnJlY3RseQorICAgICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXgg
KyBpbnN0cnVjdGlvblNpemU7CisgICAgICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0
LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LCBW
aXJ0dWFsUmVnaXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZz
ZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkpCisgICAgICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICAgICAgcmV0dXJuIE5vblRlcm1pbmFs
OworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIE5vZGUqIGNhbGxOb2RlID0gYWRkQ2FsbChy
ZXN1bHQsIG9wLCBudWxscHRyLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwotICAgIGlmIChjYWxsTm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkKLSAgICAgICAgcmV0dXJuIFRlcm1pbmFsOwogICAgIEFTU0VSVChjYWxsTm9k
ZS0+b3AoKSAhPSBUYWlsQ2FsbFZhcmFyZ3MgJiYgY2FsbE5vZGUtPm9wKCkgIT0gVGFpbENhbGxG
b3J3YXJkVmFyYXJncyk7Ci0gICAgcmV0dXJuIE5vblRlcm1pbmFsOworICAgIHJldHVybiBjYWxs
Tm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCA/IFRlcm1pbmFsIDogTm9uVGVybWluYWw7CiB9CiAKIEJ5
dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0Nh
bGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7Ci0g
ICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RI
KG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7Ci0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2Fs
bF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbF92YXJhcmdzKSk7CisgICAg
c3RhdGljX2Fzc2VydChPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xF
TkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncyksCisgICAgICAgICJvcF9jYWxsX3ZhcmFyZ3MsIG9w
X3RhaWxfY2FsbF92YXJhcmdzIGFuZCBvcF9jb25zdHJ1Y3RfdmFyYXJncyBzaG91bGQgYWx3YXlz
IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7CisgICAgc3RhdGljX2Fzc2VydChPUENPREVfTEVOR1RI
KG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGxfdmFyYXJncyks
CisgICAgICAgICJvcF9jYWxsX3ZhcmFyZ3MsIG9wX3RhaWxfY2FsbF92YXJhcmdzIGFuZCBvcF9j
b25zdHJ1Y3RfdmFyYXJncyBzaG91bGQgYWx3YXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7CiAK
ICAgICBpbnQgcmVzdWx0ID0gcGNbMV0udS5vcGVyYW5kOwogICAgIGludCBjYWxsZWUgPSBwY1sy
XS51Lm9wZXJhbmQ7CkBAIC0xMzQ2LDggKzEzMzUsNyBAQCBCeXRlQ29kZVBhcnNlcjo6VGVybWlu
YWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywg
TgogICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRl
eHRNYXApOwogICAgIHJlZmluZVN0YXRpY2FsbHkoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXQp
OwogICAgIAotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCi0g
ICAgICAgIGRhdGFMb2coIiAgICBWYXJhcmdzIGNhbGwgbGluayBzdGF0dXMgYXQgIiwgY3VycmVu
dENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIpOworICAgIFZFUkJPU0Vf
TE9HKCIgICAgVmFyYXJncyBjYWxsIGxpbmsgc3RhdHVzIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKICAgICAKICAgICBpZiAoY2FsbExpbmtT
dGF0dXMuY2FuT3B0aW1pemUoKQogICAgICAgICAmJiBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0
LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0
aGlzUmVnKSwgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cyksIGZpcnN0VmFyQXJnT2Zmc2V0LCAw
LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgb3AsIElu
bGluZUNhbGxGcmFtZTo6dmFyYXJnc0tpbmRGb3IoY2FsbE1vZGUpLCBwcmVkaWN0aW9uKSkgewpA
QCAtMTQyNiwxOSArMTQxNCwxNiBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdD
b3N0KENhbGxWYXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogewogICAgIENh
bGxNb2RlIGNhbGxNb2RlID0gSW5saW5lQ2FsbEZyYW1lOjpjYWxsTW9kZUZvcihraW5kKTsKICAg
ICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IHNwZWNpYWxpemF0
aW9uS2luZEZvcihjYWxsTW9kZSk7Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6
OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGlubGluaW5nICIsIGNhbGxl
ZSwgIiBpbnRvICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOworICAgIFZFUkJPU0VfTE9H
KCJDb25zaWRlcmluZyBpbmxpbmluZyAiLCBjYWxsZWUsICIgaW50byAiLCBjdXJyZW50Q29kZU9y
aWdpbigpLCAiXG4iKTsKICAgICAKICAgICBpZiAobV9oYXNEZWJ1Z2dlckVuYWJsZWQpIHsKLSAg
ICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIHRoZSBkZWJ1Z2dlciBpcyBpbiB1c2UuXG4i
KTsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlIGRlYnVnZ2Vy
IGlzIGluIHVzZS5cbiIpOwogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgfQogCiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJs
ZSgpOwogICAgIGlmICghZXhlY3V0YWJsZSkgewotICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJz
ZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJl
Y2F1c2UgdGhlcmUgaXMgbm8gZnVuY3Rpb24gZXhlY3V0YWJsZS5cbiIpOworICAgICAgICBWRVJC
T1NFX0xPRygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiBleGVjdXRh
YmxlLlxuIik7CiAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAgICAgCkBAIC0xNDUx
LDMzICsxNDM2LDI4IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2Fs
bFZhcmlhbnQgY2FsbGVlLCBpbnQgYXJndW1lbnRDb3VudEluY2x1CiAgICAgLy8gaXQncyBhIHJh
cmUgY2FzZSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGFueSBob3QgY2FsbGVlcyB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiBjb21waWxlZC4KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1
dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYg
KCFjb2RlQmxvY2spIHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIG5vIGNvZGUg
YmxvY2sgYXZhaWxhYmxlLlxuIik7CisgICAgICAgIFZFUkJPU0VfTE9HKCIgICAgRmFpbGluZyBi
ZWNhdXNlIG5vIGNvZGUgYmxvY2sgYXZhaWxhYmxlLlxuIik7CiAgICAgICAgIHJldHVybiBVSU5U
X01BWDsKICAgICB9CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUFyaXR5Rml4dXBJbmxpbmluZygp
KSB7CiAgICAgICAgIGlmIChjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSB7Ci0gICAgICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRl
cm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNh
dXNlIG9mIGFyaXR5IG1pc21hdGNoLlxuIik7CisgICAgICAgICAgICBWRVJCT1NFX0xPRygiICAg
IEZhaWxpbmcgYmVjYXVzZSBvZiBhcml0eSBtaXNtYXRjaC5cbiIpOwogICAgICAgICAgICAgcmV0
dXJuIFVJTlRfTUFYOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQ2FwYWJpbGl0eUxldmVsIGNh
cGFiaWxpdHlMZXZlbCA9IGlubGluZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAogICAgICAg
ICBjb2RlQmxvY2ssIHNwZWNpYWxpemF0aW9uS2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSk7
Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAg
ZGF0YUxvZygiICAgIENhbGwgbW9kZTogIiwgY2FsbE1vZGUsICJcbiIpOwotICAgICAgICBkYXRh
TG9nKCIgICAgSXMgY2xvc3VyZSBjYWxsOiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4i
KTsKLSAgICAgICAgZGF0YUxvZygiICAgIENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlM
ZXZlbCwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rpb246
ICIsIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQp
LCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygiICAgIE1pZ2h0IGNvbXBpbGUgZnVuY3Rpb246ICIs
IG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yKGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5kKSwg
IlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5nOiAi
LCBpc1N1cHBvcnRlZEZvcklubGluaW5nKGNvZGVCbG9jayksICJcbiIpOwotICAgICAgICBkYXRh
TG9nKCIgICAgSXMgaW5saW5pbmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCksICJcbiIpOwotICAgIH0KKyAgICBW
RVJCT1NFX0xPRygiICAgIENhbGwgbW9kZTogIiwgY2FsbE1vZGUsICJcbiIpOworICAgIFZFUkJP
U0VfTE9HKCIgICAgSXMgY2xvc3VyZSBjYWxsOiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAi
XG4iKTsKKyAgICBWRVJCT1NFX0xPRygiICAgIENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxp
dHlMZXZlbCwgIlxuIik7CisgICAgVkVSQk9TRV9MT0coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rp
b246ICIsIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktp
bmQpLCAiXG4iKTsKKyAgICBWRVJCT1NFX0xPRygiICAgIE1pZ2h0IGNvbXBpbGUgZnVuY3Rpb246
ICIsIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yKGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5k
KSwgIlxuIik7CisgICAgVkVSQk9TRV9MT0coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5n
OiAiLCBpc1N1cHBvcnRlZEZvcklubGluaW5nKGNvZGVCbG9jayksICJcbiIpOworICAgIFZFUkJP
U0VfTE9HKCIgICAgSXMgaW5saW5pbmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCksICJcbiIpOwogICAgIGlmICgh
Y2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCkpIHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFy
c2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBi
ZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgaW5saW5lYWJsZS5cbiIpOworICAgICAgICBWRVJC
T1NFX0xPRygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGlubGluZWFi
bGUuXG4iKTsKICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgIH0KICAgICAKQEAgLTE0ODYs
OCArMTQ2Niw3IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZh
cmlhbnQgY2FsbGVlLCBpbnQgYXJndW1lbnRDb3VudEluY2x1CiAgICAgLy8gcHVycG9zZSBvZiB1
bnNldHRpbmcgU0FCSS4KICAgICBpZiAoIWlzU21hbGxFbm91Z2hUb0lubGluZUNvZGVJbnRvKG1f
Y29kZUJsb2NrKSkgewogICAgICAgICBjb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgY2FsbGVyIGlz
IHRvbyBsYXJnZS5cbiIpOworICAgICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcgYmVjYXVz
ZSB0aGUgY2FsbGVyIGlzIHRvbyBsYXJnZS5cbiIpOwogICAgICAgICByZXR1cm4gVUlOVF9NQVg7
CiAgICAgfQogICAgIApAQCAtMTUxMCwzMCArMTQ4OSwyNyBAQCB1bnNpZ25lZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdQogICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkgPSBtX2lubGluZVN0YWNrVG9w
OyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKICAgICAgICAgKytkZXB0aDsKICAg
ICAgICAgaWYgKGRlcHRoID49IE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRoKCkpIHsKLSAg
ICAgICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2UgZGVwdGggZXhjZWVkZWQuXG4i
KTsKKyAgICAgICAgICAgIFZFUkJPU0VfTE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIGRlcHRoIGV4
Y2VlZGVkLlxuIik7CiAgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmIChlbnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpIHsK
ICAgICAgICAgICAgICsrcmVjdXJzaW9uOwogICAgICAgICAgICAgaWYgKHJlY3Vyc2lvbiA+PSBP
cHRpb25zOjptYXhpbXVtSW5saW5pbmdSZWN1cnNpb24oKSkgewotICAgICAgICAgICAgICAgIGlm
IChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIHJlY3Vyc2lvbiBkZXRlY3RlZC5cbiIpOwor
ICAgICAgICAgICAgICAgIFZFUkJPU0VfTE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIHJlY3Vyc2lv
biBkZXRlY3RlZC5cbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJz
ZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiICAgIElubGluaW5nIHNob3Vs
ZCBiZSBwb3NzaWJsZS5cbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgSW5saW5pbmcgc2hvdWxk
IGJlIHBvc3NpYmxlLlxuIik7CiAgICAgCiAgICAgLy8gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8g
aW5saW5lLgogICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KLXZvaWQgQnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFy
aWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwg
Q2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3Im
IGluc2VydENoZWNrcykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBu
ZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgY29uc3QgQ2hlY2tzRnVuY3Rv
ciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7
CiAgICAgCkBAIC0xNTc4LDggKzE1NTQsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcgogICAg
ICAgICBjYWxsZWVWYXJpYWJsZS0+bWVyZ2VTaG91bGROZXZlclVuYm94KHRydWUpOwogICAgIH0K
IAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Tm9kZSosIFZpcnR1YWxSZWdpc3Rlcj4+IGRlbGF5ZWRB
cml0eVNldHM7Ci0KICAgICBpZiAoYXJpdHlGaXh1cENvdW50KSB7CiAgICAgICAgIC8vIE5vdGU6
IHdlIGRvIGFyaXR5IGZpeHVwIGluIHR3byBwaGFzZXM6CiAgICAgICAgIC8vIDEuIFdlIGdldCBh
bGwgdGhlIHZhbHVlcyB3ZSBuZWVkIGFuZCBNb3ZIaW50IHRoZW0gdG8gdGhlIGV4cGVjdGVkIGxv
Y2Fscy4KQEAgLTE2MzAsMTAgKzE2MDQsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcgogICAg
ICAgICAvLyBvdXIgY2FsbGVlJ3MgZnJhbWUuIFdlIGVtaXQgYW4gRXhpdE9LIGJlbG93IGZyb20g
dGhlIGNhbGxlZSdzIENvZGVPcmlnaW4uCiAgICAgfQogCi0gICAgSW5saW5lU3RhY2tFbnRyeSBp
bmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9n
cmFwaC5sYXN0QmxvY2soKSwgY2FsbGVlLmZ1bmN0aW9uKCksIHJlc3VsdFJlZywKKyAgICBJbmxp
bmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ss
IGNhbGxlZS5mdW5jdGlvbigpLCByZXN1bHRSZWcsCiAgICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIp
aW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsK
LSAgICAKKwogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkg
aGFwcGVucy4KICAgICB1bnNpZ25lZCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OwogICAgIG1f
Y3VycmVudEluZGV4ID0gMDsKQEAgLTE2NjQsMTE3ICsxNjM3LDM0IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5k
LCBDYWxsVmFyCiAgICAgCiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKICAgICBtX2V4
aXRPSyA9IGZhbHNlOworCisgICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKICAgICAK
LSAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tz
LCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4KLSAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5t
X2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubGFzdEJsb2NrKCkpIHsKLSAgICAgICAgCi0g
ICAgICAgIEFTU0VSVCghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHko
KSk7Ci0gICAgICAgIGlmIChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWROZWVk
c0xpbmtpbmcpCi0gICAgICAgICAgICBsaW5rQmxvY2soaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxz
aXRlQmxvY2tIZWFkLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNp
dGVCbG9ja0hlYWQtPmlzTGlua2VkKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsZXJMaW5r
YWJpbGl0eSA9PSBDYWxsZXJEb2VzTm9ybWFsTGlua2luZykKLSAgICAgICAgICAgIGNhbmNlbExp
bmtpbmdGb3JCbG9jayhpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLCBpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbHNpdGVCbG9ja0hlYWQpOwotICAgICAgICAKLSAgICAgICAgbGlua0Jsb2Nrcyhpbmxp
bmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xp
bmtpbmdUYXJnZXRzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50
cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOwotICAgIAotICAgIEJhc2ljQmxvY2sqIGxh
c3RCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7Ci0gICAgLy8gSWYgdGhlcmUgd2FzIGEgcmV0
dXJuLCBidXQgbm8gZWFybHkgcmV0dXJucywgdGhlbiB3ZSdyZSBkb25lLiBXZSBhbGxvdyBwYXJz
aW5nIG9mCi0gICAgLy8gdGhlIGNhbGxlciB0byBjb250aW51ZSBpbiB3aGF0ZXZlciBiYXNpYyBi
bG9jayB3ZSdyZSBpbiByaWdodCBub3cuCi0gICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fZGlk
RWFybHlSZXR1cm4gJiYgaW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikgewotICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQotICAgICAgICAgICAgZGF0
YUxvZygiICAgIEFsbG93aW5nIHBhcnNpbmcgdG8gY29udGludWUgaW4gbGFzdCBpbmxpbmVkIGJs
b2NrLlxuIik7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobGFzdEJsb2NrLT5pc0VtcHR5KCkg
fHwgIWxhc3RCbG9jay0+dGVybWluYWwoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBj
cmVhdGVkIG5ldyBibG9ja3MgdGhlbiB0aGUgbGFzdCBibG9jayBuZWVkcyBsaW5raW5nLCBidXQg
aW4gdGhlCi0gICAgICAgIC8vIGNhbGxlci4gSXQgZG9lc24ndCBuZWVkIHRvIGJlIGxpbmtlZCB0
bywgYnV0IGl0IG5lZWRzIG91dGdvaW5nIGxpbmtzLgotICAgICAgICBpZiAoIWlubGluZVN0YWNr
RW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEZvciBk
ZWJ1Z2dpbmcgcHVycG9zZXMsIHNldCB0aGUgYnl0ZWNvZGVCZWdpbi4gTm90ZSB0aGF0IHRoaXMg
ZG9lc24ndCBtYXR0ZXIKLSAgICAgICAgICAgIC8vIGZvciByZWxlYXNlIGJ1aWxkcyBiZWNhdXNl
IHRoaXMgYmxvY2sgd2lsbCBuZXZlciBzZXJ2ZSBhcyBhIHBvdGVudGlhbCB0YXJnZXQKLSAgICAg
ICAgICAgIC8vIGluIHRoZSBsaW5rZXIncyBiaW5hcnkgc2VhcmNoLgotICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICAgIFJlcHVycG9zaW5nIGxhc3QgYmxvY2sgZnJvbSAiLCBsYXN0QmxvY2st
PmJ5dGVjb2RlQmVnaW4sICIgdG8gIiwgbV9jdXJyZW50SW5kZXgsICJcbiIpOwotICAgICAgICAg
ICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgICAgICAg
ICBpZiAoY2FsbGVyTGlua2FiaWxpdHkgPT0gQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIHVubGlua2VkIGJsb2NrICIsIFJhd1Bv
aW50ZXIobV9ncmFwaC5sYXN0QmxvY2soKSksICIgKG9uZSByZXR1cm4pXG4iKTsKLSAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBl
bmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLmxhc3RCbG9jaygpKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5sYXN0
QmxvY2soKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIElmIHRoZSBjYWxsZWUgcmV0dXJuZWQg
YXQgbGVhc3Qgb25jZSwgaXQgcHJlcGFyZWQgYSBjb250aW51YXRpb24gYmxvY2sgZm9yIHVzLgor
ICAgIGlmIChpbmxpbmVTdGFja0VudHJ5Lm1fY29udGludWF0aW9uQmxvY2spCisgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gaW5saW5lU3RhY2tFbnRyeS5tX2NvbnRpbnVhdGlvbkJsb2NrOworICAg
IGVsc2UgeworICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGNhbGxlZSBu
ZXZlciByZXR1cm5zIChmb3IgZXhhbXBsZSBpdCBsb29wcyBmb3JldmVyKS4KKyAgICAgICAgLy8g
SW4gdGhhdCBjYXNlLCBhbGwgYmxvY2tzIHNob3VsZCBlbmQgaW4gYSB0ZXJtaW5hbC4KKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubGFzdEJsb2NrKCktPnRlcm1pbmFsKCkpOworICAgICAgICAvLyBX
ZSB0aGVuIGFsbG9jYXRlIGEgbmV3IGJsb2NrIHRvIGNvbnRpbnVlIGluLgorICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKG5leHRPZmZzZXQpOwogICAgIH0K
KyAgICBBU1NFUlQobV9jdXJyZW50QmxvY2spOworICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2st
PnRlcm1pbmFsKCkpOwogCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNp
bmcoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIENyZWF0aW5nIG5ldyBibG9jayBhZnRlciBpbmxp
bmluZy5cbiIpOwotCi0gICAgLy8gSWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQgdGhlbiBhbGwgYmxv
Y2tzIG11c3QgZW5kIGluIHNvbWUgc29ydCBvZiB0ZXJtaW5hbHMuCi0gICAgQVNTRVJUKGxhc3RC
bG9jay0+dGVybWluYWwoKSk7Ci0KLSAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBi
bG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBhdCB0aGUgY2FsbGVyLgotICAgIFJlZjxCYXNpY0Js
b2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFy
Z3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKLQotICAgIC8vIExpbmsgdGhlIGVhcmx5IHJldHVy
bnMgdG8gdGhlIGJhc2ljIGJsb2NrIHdlJ3JlIGFib3V0IHRvIGNyZWF0ZS4KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tp
XS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrVG9MaW5rID0gaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzW2ldLm1fYmxvY2s7Ci0gICAgICAgIEFTU0VSVCghYmxvY2tUb0xpbmstPmlzTGlua2Vk
KTsKLSAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrVG9MaW5rLT50ZXJtaW5hbCgpOwotICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKCFub2RlLT50YXJn
ZXRCbG9jaygpKTsKLSAgICAgICAgbm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrLnB0cigpOwot
ICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5
UmV0dXJuTGlua2luZyA9IGZhbHNlOwotICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRl
cm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIk1hcmtpbmcgIiwgUmF3UG9pbnRl
cihibG9ja1RvTGluayksICIgYXMgbGlua2VkIChqdW1wcyB0byByZXR1cm4pXG4iKTsKLSAgICAg
ICAgYmxvY2tUb0xpbmstPmRpZExpbmsoKTsKLSAgICB9Ci0gICAgCi0gICAgbV9jdXJyZW50Qmxv
Y2sgPSBibG9jay5wdHIoKTsKLSAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIt
Pm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gPCBuZXh0
T2Zmc2V0KTsKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZygiQWRkaW5nIHVubGlua2VkIGJsb2NrICIsIFJhd1BvaW50ZXIoYmxvY2su
cHRyKCkpLCAiIChtYW55IHJldHVybnMpXG4iKTsKLSAgICBpZiAoY2FsbGVyTGlua2FiaWxpdHkg
PT0gQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcpIHsKLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2soYmxvY2sucHRy
KCkpKTsKLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5n
VGFyZ2V0cy5hcHBlbmQoYmxvY2sucHRyKCkpOwotICAgIH0KLSAgICBtX2dyYXBoLmFwcGVuZEJs
b2NrKFdURk1vdmUoYmxvY2spKTsKICAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiB9CiAKLXZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxpbmVTdGFja0VudHJ5
KiBpbmxpbmVTdGFja0VudHJ5LCBCYXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICAvLyBJdCdzIHBv
c3NpYmxlIHRoYXQgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgaXMgbm90IG93bmVkIGJ5IHRoZSBj
YWxsZXIuCi0gICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5LT5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyBJdCdzIGRlZmluaXRlbHkgb3duZWQgYnkgdGhlIGNhbGxlciwg
YmVjYXVzZSB0aGUgY2FsbGVyIGNyZWF0ZWQgbmV3IGJsb2Nrcy4KLSAgICAgICAgLy8gQXNzZXJ0
IHRoYXQgdGhpcyBhbGwgYWRkcyB1cC4KLSAgICAgICAgQVNTRVJUX1VOVVNFRChibG9jaywgaW5s
aW5lU3RhY2tFbnRyeS0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9jayA9PSBibG9jayk7
Ci0gICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5LT5tX3VubGlua2VkQmxvY2tzLmxhc3Qo
KS5tX25lZWRzTm9ybWFsTGlua2luZyk7Ci0gICAgICAgIGlubGluZVN0YWNrRW50cnktPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBvd25lZCBieSB0aGUgY2FsbGVy
LiBUZWxsIHRoZSBjYWxsZXIgdGhhdCBoZSBkb2VzIG5vdAotICAgICAgICAvLyBuZWVkIHRvIGxp
bmsgaGlzIGNhbGxzaXRlIGJsb2NrIGhlYWQsIGJlY2F1c2Ugd2UgZGlkIGl0IGZvciBoaW0uCi0g
ICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5LT5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNM
aW5raW5nKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChibG9jaywgaW5saW5lU3RhY2tFbnRyeS0+
bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBibG9jayk7Ci0gICAgICAgIGlubGluZVN0YWNrRW50cnkt
Pm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKLSAgICB9Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Ci1ib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRl
bXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwg
Q2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
IGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBjb25zdCBDaGVja3NGdW5j
dG9yJiBpbnNlcnRDaGVja3MpCitib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQg
Y2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIGNvbnN0IENo
ZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5k
Rm9yKGtpbmQpOwogICAgIAogICAgIGlmICghaW5saW5pbmdCYWxhbmNlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIiAgICBDb25zaWRlcmluZyBjYWxsZWUgIiwgY2FsbGVlLCAi
XG4iKTsKKyAgICBWRVJCT1NFX0xPRygiICAgIENvbnNpZGVyaW5nIGNhbGxlZSAiLCBjYWxsZWUs
ICJcbiIpOwogICAgIAogICAgIC8vIEludHJpbnNpY3MgYW5kIGludGVybmFsIGZ1bmN0aW9ucyBj
YW4gb25seSBiZSBpbmxpbmVkIGlmIHdlJ3JlIG5vdCBkb2luZyB2YXJhcmdzLiBUaGlzIGlzIGJl
Y2F1c2UKICAgICAvLyB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBhbnkgd2F5IG9mIGdldHRpbmcg
cHJvZmlsaW5nIGluZm9ybWF0aW9uIGZvciBhcmd1bWVudHMgdG8gbm9uLUpTIHZhcmFyZ3MKQEAg
LTE4MzYsNyArMTcyNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNh
bGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEluc3RydWN0aW9uKiBzYXZlZEN1cnJlbnRJbnN0cnVjdGlvbiA9IG1f
Y3VycmVudEluc3RydWN0aW9uOwotICAgIGlubGluZUNhbGwoY2FsbFRhcmdldE5vZGUsIHJlc3Vs
dE9wZXJhbmQsIGNhbGxlZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBjYWxsZXJMaW5rYWJpbGl0eSwgaW5zZXJ0Q2hlY2tzKTsK
KyAgICBpbmxpbmVDYWxsKGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsZWUsIHJl
Z2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2lu
ZCwgaW5zZXJ0Q2hlY2tzKTsKICAgICBpbmxpbmluZ0JhbGFuY2UgLT0gbXlJbmxpbmluZ0Nvc3Q7
CiAgICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24gPSBzYXZlZEN1cnJlbnRJbnN0cnVjdGlvbjsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTE4NDgsMjIgKzE3MzgsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoCiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50
LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywKICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxG
cmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewotICAgIGlmIChE
RkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgIGRhdGFMb2coIkhh
bmRsaW5nIGlubGluaW5nLi4uXG4iKTsKLSAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJl
bnRDb2RlT3JpZ2luKCksICJcbiIpOwotICAgIH0KKyAgICBWRVJCT1NFX0xPRygiSGFuZGxpbmcg
aW5saW5pbmcuLi5cblN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFt
ZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIAogICAgIGlmICghY2FsbExpbmtT
dGF0dXMuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZy5cbiIpOworICAg
ICAgICBWRVJCT1NFX0xPRygiQmFpbGluZyBpbmxpbmluZy5cbiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAogICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhr
aW5kKQogICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSA+IE9wdGlv
bnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgewotICAgICAgICBpZiAoREZHQnl0ZUNv
ZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcg
aW5saW5pbmcgYmVjYXVzZSBvZiB2YXJhcmdzLlxuIik7CisgICAgICAgIFZFUkJPU0VfTE9HKCJC
YWlsaW5nIGlubGluaW5nIGJlY2F1c2Ugb2YgdmFyYXJncy5cbiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgICAgICAKQEAgLTE5MDgsNyArMTc5Myw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICAKICAgICAgICAgYm9vbCByZXN1bHQg
PSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3Vs
dE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKLSAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2Vz
Tm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBwcmVkaWN0aW9uLAogICAgICAgICAgICAgaW5s
aW5pbmdCYWxhbmNlLCBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwg
dGhpc0FyZ3VtZW50KTsKIApAQCAtMTk4MSwxMSArMTg2Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVy
bmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1w
bGUpLlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmln
aW4oKSwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJSZXN1bHQ6ICIsIHJlc3VsdCwgIlxu
Iik7Ci0gICAgICAgIH0KKyAgICAgICAgVkVSQk9TRV9MT0coIkRvbmUgaW5saW5pbmcgKHNpbXBs
ZSkuXG5TdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuUmVzdWx0OiAiLCByZXN1bHQs
ICJcbiIpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTE5OTcsMTAg
KzE4NzgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAvLyBh
bHNvLgogICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgfHwgIU9wdGlvbnM6OnVz
ZVBvbHltb3JwaGljQ2FsbElubGluaW5nKCkKICAgICAgICAgfHwgSW5saW5lQ2FsbEZyYW1lOjpp
c1ZhcmFyZ3Moa2luZCkpIHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6
OnZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKGhhcmQp
LlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4o
KSwgIlxuIik7Ci0gICAgICAgIH0KKyAgICAgICAgVkVSQk9TRV9MT0coIkJhaWxpbmcgaW5saW5p
bmcgKGhhcmQpLlxuU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMjAwOSwxNSArMTg4NywxMCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAvLyBpdCBoYXMgbm8gaWRlYS4K
ICAgICBpZiAoIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQ2FsbElubGluaW5nRm9yTm9uU3R1YlN0
YXR1cygpCiAgICAgICAgICYmICFjYWxsTGlua1N0YXR1cy5pc0Jhc2VkT25TdHViKCkpIHsKLSAg
ICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAg
ICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKG5vbi1zdHViIHBvbHltb3JwaGlzbSkuXG4i
KTsKLSAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
XG4iKTsKLSAgICAgICAgfQorICAgICAgICBWRVJCT1NFX0xPRygiQmFpbGluZyBpbmxpbmluZyAo
bm9uLXN0dWIgcG9seW1vcnBoaXNtKS5cblN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
XG4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBv
bGRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleDsKLSAgICAKKwogICAgIGJvb2wgYWxsQXJlQ2xvc3Vy
ZUNhbGxzID0gdHJ1ZTsKICAgICBib29sIGFsbEFyZURpcmVjdENhbGxzID0gdHJ1ZTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjYWxsTGlua1N0YXR1cy5zaXplKCk7IGktLTspIHsKQEAgLTIwMjYs
NyArMTg5OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBhbGxBcmVDbG9zdXJlQ2FsbHMgPSBmYWxzZTsKICAgICB9Ci0g
ICAgCisKICAgICBOb2RlKiB0aGluZ1RvU3dpdGNoT247CiAgICAgaWYgKGFsbEFyZURpcmVjdENh
bGxzKQogICAgICAgICB0aGluZ1RvU3dpdGNoT24gPSBjYWxsVGFyZ2V0Tm9kZTsKQEAgLTIwMzcs
MzAgKzE5MTAsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAg
ICAgIC8vIHdoZXJlIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwuIEl0IG1pZ2h0IGJlIGJlc3QgdG8g
aGFuZGxlIHRoZXNlIGNhc2VzIGFzIGlmIGFsbCBjYWxscyB3ZXJlCiAgICAgICAgIC8vIGNsb3N1
cmUgY2FsbHMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzYwMjAKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJv
c2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKG1peCkuXG4iKTsK
LSAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4i
KTsKLSAgICAgICAgfQorICAgICAgICBWRVJCT1NFX0xPRygiQmFpbGluZyBpbmxpbmluZyAobWl4
KS5cblN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6
dmVyYm9zZSkgewotICAgICAgICBkYXRhTG9nKCJEb2luZyBoYXJkIGlubGluaW5nLi4uXG4iKTsK
LSAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwot
ICAgIH0KLSAgICAKKworICAgIFZFUkJPU0VfTE9HKCJEb2luZyBoYXJkIGlubGluaW5nLi4uXG5T
dGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CisKICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOwotICAgIAorCiAgICAgLy8gVGhp
cyBtYWtlcyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0EgYWxsIHRoZSB0aW1lLiBXZSBuZWVk
IHRvIHBpY2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAgICAgLy8gc3RvcmUgdGhlIGNhbGxl
ZSBzbyB0aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBhbGwgb2YgdGhlIGJsb2NrcyB3ZSdy
ZSBhYm91dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3YXkgd2l0aCBkb2luZyBhbiBpbW1l
ZGlhdGUtc2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBoYXZlIHBlcmZvcm1lZCBhbnkgc2lk
ZSBlZmZlY3RzCiAgICAgLy8geWV0LgotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBvZmZzZXQ6ICIsIHJlZ2lzdGVy
T2Zmc2V0KTsKKyAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0OiAiLCByZWdpc3Rlck9m
ZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdpc3Rlck9mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBj
YWxsZWVSZWcsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUg
IiwgY2FsbGVlUmVnLCAiXG4iKTsKICAgICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0
Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKIAogICAgIC8vIEl0J3MgT0sgdG8gZXhpdCBy
aWdodCBub3csIGV2ZW4gdGhvdWdoIHdlIHNldCBzb21lIGxvY2Fscy4gVGhhdCdzIGJlY2F1c2Ug
dGhvc2UgbG9jYWxzIGFyZSBub3QKQEAgLTIwNzEsMTIgKzE5MzYsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1fZ3JhcGgu
bV9zd2l0Y2hEYXRhLmFkZCgpOwogICAgIGRhdGEua2luZCA9IFN3aXRjaENlbGw7CiAgICAgYWRk
VG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmZGF0YSksIHRoaW5nVG9Td2l0Y2hPbik7Ci0gICAgCi0g
ICAgQmFzaWNCbG9jayogb3JpZ2luQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBpZiAoREZH
Qnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiTWFya2lu
ZyAiLCBSYXdQb2ludGVyKG9yaWdpbkJsb2NrKSwgIiBhcyBsaW5rZWQgKG9yaWdpbiBvZiBwb2x5
IGlubGluZSlcbiIpOwotICAgIG9yaWdpbkJsb2NrLT5kaWRMaW5rKCk7Ci0gICAgY2FuY2VsTGlu
a2luZ0ZvckJsb2NrKG1faW5saW5lU3RhY2tUb3AsIG9yaWdpbkJsb2NrKTsKKyAgICBtX2N1cnJl
bnRCbG9jay0+ZGlkTGluaygpOwogICAgIAogICAgIC8vIEVhY2ggaW5saW5lZCBjYWxsZWUgd2ls
bCBoYXZlIGEgbGFuZGluZyBibG9jayB0aGF0IGl0IHJldHVybnMgYXQuIFRoZXkgc2hvdWxkIGFs
bCBoYXZlIGp1bXBzCiAgICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbiBibG9jaywgd2hpY2ggd2Ug
Y3JlYXRlIGxhc3QuCkBAIC0yMDg1LDMxICsxOTQ1LDMwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKAogICAgIC8vIFdlIG1heSBmb3JjZSB0aGlzIHRydWUgaWYgd2UgZ2l2
ZSB1cCBvbiBpbmxpbmluZyBhbnkgb2YgdGhlIGVkZ2VzLgogICAgIGJvb2wgY291bGRUYWtlU2xv
d1BhdGggPSBjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpOwogICAgIAotICAgIGlm
IChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJB
Ym91dCB0byBsb29wIG92ZXIgZnVuY3Rpb25zIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIu
XG4iKTsKLSAgICAKKyAgICBWRVJCT1NFX0xPRygiQWJvdXQgdG8gbG9vcCBvdmVyIGZ1bmN0aW9u
cyBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CisKKyAgICB1bnNpZ25lZCBvbGRP
ZmZzZXQgPSBtX2N1cnJlbnRJbmRleDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2Fs
bExpbmtTdGF0dXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRP
ZmZzZXQ7Ci0gICAgICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFz
aWNCbG9jayhVSU5UX01BWCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7Ci0gICAg
ICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2sucHRyKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5k
QmxvY2soYmxvY2suY29weVJlZigpKTsKKyAgICAgICAgQmFzaWNCbG9jayogY2FsbGVlRW50cnlC
bG9jayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBjYWxsZWVFbnRyeUJsb2NrOwogICAgICAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAg
ICAgICAgIAogICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0KGNhbGxl
ZVJlZyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRv
SW5saW5lQ2FsbCgKICAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQs
IGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKLSAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJMaW5rc01hbnVhbGx5
LCBwcmVkaWN0aW9uLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIHByZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2Us
IFsmXSAoQ29kZUJsb2NrKikgeyB9KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaW5saW5pbmdS
ZXN1bHQpIHsKICAgICAgICAgICAgIC8vIFRoYXQgZmFpbGVkIHNvIHdlIGxldCB0aGUgYmxvY2sg
ZGllLiBOb3RoaW5nIGludGVyZXN0aW5nIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgdG8KICAgICAg
ICAgICAgIC8vIHRoZSBibG9jay4gV2UgYWxzbyBnaXZlIHVwIG9uIGlubGluaW5nIGFueSBvZiB0
aGUgKGxlc3MgZnJlcXVlbnQpIGNhbGxlZXMuCi0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
QmxvY2sgPT0gYmxvY2sucHRyKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9ibG9j
a3MubGFzdCgpID09IGJsb2NrLnB0cigpKTsKLSAgICAgICAgICAgIG1fZ3JhcGgua2lsbEJsb2Nr
QW5kSXRzQ29udGVudHMoYmxvY2sucHRyKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV9ibG9ja3MubGFzdCgpID09IG1fY3VycmVudEJsb2NrKTsKKyAgICAgICAgICAgIG1fZ3JhcGgu
a2lsbEJsb2NrQW5kSXRzQ29udGVudHMobV9jdXJyZW50QmxvY2spOwogICAgICAgICAgICAgbV9n
cmFwaC5tX2Jsb2Nrcy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIFZF
UkJPU0VfTE9HKCJJbmxpbmluZyBvZiBhIHBvbHkgY2FsbCBmYWlsZWQsIHdlIHdpbGwgaGF2ZSB0
byBnbyB0aHJvdWdoIGEgc2xvdyBwYXRoXG4iKTsKKwogICAgICAgICAgICAgLy8gVGhlIGZhY3Qg
dGhhdCBpbmxpbmluZyBmYWlsZWQgbWVhbnMgd2UgbmVlZCBhIHNsb3cgcGF0aC4KICAgICAgICAg
ICAgIGNvdWxkVGFrZVNsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEy
Miw0NiArMTk4MSw0NiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAg
ICAgICAgICAgIEFTU0VSVChhbGxBcmVDbG9zdXJlQ2FsbHMpOwogICAgICAgICAgICAgdGhpbmdU
b0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmV4ZWN1dGFibGUoKTsKICAgICAgICAgfQotICAg
ICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fZ3JhcGguZnJlZXplKHRoaW5nVG9D
YXNlT24pLCBibG9jay5wdHIoKSkpOworICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hD
YXNlKG1fZ3JhcGguZnJlZXplKHRoaW5nVG9DYXNlT24pLCBjYWxsZWVFbnRyeUJsb2NrKSk7CiAg
ICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKICAgICAgICAgbV9leGl0T0sgPSB0
cnVlOwogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOyAvLyBUaGlzIG9ubHkgY29tZXMg
aW50byBwbGF5IGZvciBpbnRyaW5zaWNzLCBzaW5jZSBub3JtYWwgaW5saW5lZCBjb2RlIHdpbGwg
bGVhdmUgYW4gZW1wdHkgcXVldWUuCiAgICAgICAgIGlmIChOb2RlKiB0ZXJtaW5hbCA9IG1fY3Vy
cmVudEJsb2NrLT50ZXJtaW5hbCgpKQogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0ZXJtaW5h
bCwgdGVybWluYWwtPm9wKCkgPT0gVGFpbENhbGwgfHwgdGVybWluYWwtPm9wKCkgPT0gVGFpbENh
bGxWYXJhcmdzIHx8IHRlcm1pbmFsLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpOwog
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTI2IHdlIGNhbiBhdm9pZCB0aGlzIGluZGlyZWN0aW9u
IGluIHRoZSBjYXNlIG9mIG5vcm1hbCBpbmxpbmVkIGNhbGwKKyAgICAgICAgICAgIC8vIGJ5IHBh
c3NpbmcgdGhlIGNvbnRpbnVhdGlvbiBibG9jayBhbGwgdGhlIHdheSBpbnRvIGlubGluZVN0YWNr
RW50cnktPm1fY29udGludWF0aW9uQmxvY2sgaW4gaW5saW5lQ2FsbC4KKyAgICAgICAgICAgIC8v
IEl0IGlzIG5vdCB0cml2aWFsIGJlY2F1c2Ugb2YgdGhlIFNldExvY2FsUXVldWUgbWFuYWdlZCBi
eSBpbnRyaW5zaWNzLgogICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wKTsKICAgICAgICAgICAg
IGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgfQotICAgICAg
ICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2coIk1hcmtpbmcgIiwgUmF3UG9pbnRlcihtX2N1cnJlbnRCbG9jayksICIgYXMgbGlua2Vk
ICh0YWlsIG9mIHBvbHkgaW5saW5lZSlcbiIpOworICAgICAgICBWRVJCT1NFX0xPRygiTWFya2lu
ZyAiLCBSYXdQb2ludGVyKG1fY3VycmVudEJsb2NrKSwgIiBhcyBsaW5rZWQgKHRhaWwgb2YgcG9s
eSBpbmxpbmVlKVxuIik7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRMaW5rKCk7CiAKLSAg
ICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXSwgIiBhdCAi
LCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CisgICAgICAgIFZFUkJPU0VfTE9HKCJGaW5p
c2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXSwgIiBhdCAiLCBjdXJyZW50Q29kZU9y
aWdpbigpLCAiLlxuIik7CiAgICAgfQogICAgIAotICAgIFJlZjxCYXNpY0Jsb2NrPiBzbG93UGF0
aEJsb2NrID0gYWRvcHRSZWYoCi0gICAgICAgICpuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgQmFzaWNCbG9jayogc2xvd1BhdGhC
bG9jayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKICAgICBtX2N1cnJlbnRJbmRleCA9
IG9sZE9mZnNldDsKICAgICBtX2V4aXRPSyA9IHRydWU7Ci0gICAgZGF0YS5mYWxsVGhyb3VnaCA9
IEJyYW5jaFRhcmdldChzbG93UGF0aEJsb2NrLnB0cigpKTsKLSAgICBtX2dyYXBoLmFwcGVuZEJs
b2NrKHNsb3dQYXRoQmxvY2suY29weVJlZigpKTsKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiTWFya2luZyAiLCBSYXdQb2ludGVy
KHNsb3dQYXRoQmxvY2sucHRyKCkpLCAiIGFzIGxpbmtlZCAoc2xvdyBwYXRoIGJsb2NrKVxuIik7
CisgICAgZGF0YS5mYWxsVGhyb3VnaCA9IEJyYW5jaFRhcmdldChzbG93UGF0aEJsb2NrKTsKKyAg
ICBWRVJCT1NFX0xPRygiTWFya2luZyAiLCBSYXdQb2ludGVyKHNsb3dQYXRoQmxvY2spLCAiIGFz
IGxpbmtlZCAoc2xvdyBwYXRoIGJsb2NrKVxuIik7CiAgICAgc2xvd1BhdGhCbG9jay0+ZGlkTGlu
aygpOwogICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IHNs
b3dQYXRoQmxvY2sucHRyKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBzbG93UGF0aEJsb2NrOwog
ICAgIE5vZGUqIG15Q2FsbFRhcmdldE5vZGUgPSBnZXREaXJlY3QoY2FsbGVlUmVnKTsKICAgICBp
ZiAoY291bGRUYWtlU2xvd1BhdGgpIHsKICAgICAgICAgYWRkQ2FsbCgKICAgICAgICAgICAgIHJl
c3VsdE9wZXJhbmQsIGNhbGxPcCwgbnVsbHB0ciwgbXlDYWxsVGFyZ2V0Tm9kZSwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsCiAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlv
bik7CisgICAgICAgIFZFUkJPU0VfTE9HKCJXZSBhZGRlZCBhIGNhbGwgaW4gdGhlIHNsb3cgcGF0
aFxuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja0JhZENlbGwpOwog
ICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG15Q2FsbFRhcmdldE5vZGUpOwogICAgICAgICBl
bWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgYWRkVG9HcmFwaChCb3R0b21WYWx1ZSkpOworICAgICAgICBWRVJCT1NFX0xPRygiY291
bHRUYWtlU2xvd1BhdGggd2FzIHdyb25nXG4iKTsKICAgICB9CiAKICAgICBtX2N1cnJlbnRJbmRl
eCA9IG5leHRPZmZzZXQ7CkBAIC0yMTczLDI2ICsyMDMyLDIzIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICBhZGRUb0dyYXBoKEp1bXApOwogICAgICAgICBs
YW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CiAgICAgfQotICAgIAotICAgIFJl
ZjxCYXNpY0Jsb2NrPiBjb250aW51YXRpb25CbG9jayA9IGFkb3B0UmVmKAotICAgICAgICAqbmV3
IEJhc2ljQmxvY2soVUlOVF9NQVgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOwot
ICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soY29udGludWF0aW9uQmxvY2suY29weVJlZigpKTsKLSAg
ICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
ZygiQWRkaW5nIHVubGlua2VkIGJsb2NrICIsIFJhd1BvaW50ZXIoY29udGludWF0aW9uQmxvY2su
cHRyKCkpLCAiIChjb250aW51YXRpb24pXG4iKTsKLSAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Vu
bGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGNvbnRpbnVhdGlvbkJsb2NrLnB0cigp
KSk7CisKKyAgICAvLyBDb250aW51YXRpb24gYmxvY2sKKyAgICBtX2N1cnJlbnRCbG9jayA9IGFs
bG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKKyAgICBWRVJCT1NFX0xPRygiQWRkaW5nIHVudGFy
Z2V0YWJsZSBibG9jayAiLCBSYXdQb2ludGVyKG1fY3VycmVudEJsb2NrKSwgIiAoY29udGludWF0
aW9uKVxuIik7CiAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwotICAgIG1fY3VycmVudEJsb2Nr
ID0gY29udGludWF0aW9uQmxvY2sucHRyKCk7CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bGFuZGluZ0Jsb2Nrcy5zaXplKCk7IGktLTspCi0gICAgICAgIGxhbmRpbmdCbG9ja3NbaV0tPnRl
cm1pbmFsKCktPnRhcmdldEJsb2NrKCkgPSBjb250aW51YXRpb25CbG9jay5wdHIoKTsKKyAgICBm
b3IgKGF1dG8gJmxhbmRpbmdCbG9jayA6IGxhbmRpbmdCbG9ja3MpIHsKKyAgICAgICAgbGFuZGlu
Z0Jsb2NrLT50ZXJtaW5hbCgpLT50YXJnZXRCbG9jaygpID0gbV9jdXJyZW50QmxvY2s7CisgICAg
ICAgIGxhbmRpbmdCbG9jay0+ZGlkTGluaygpOworICAgICAgICBWRVJCT1NFX0xPRygiV2UgbGlu
a2VkICIsIFJhd1BvaW50ZXIobV9jdXJyZW50QmxvY2spLCAiIChsYW5kaW5nIGJsb2NrKSB0byB0
aGUgY29udGludWF0aW9uIGJsb2NrIFxuIik7CisKKyAgICB9CiAgICAgCiAgICAgbV9jdXJyZW50
SW5kZXggPSBvbGRPZmZzZXQ7CiAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgIAotICAgIGlmIChE
RkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgIGRhdGFMb2coIkRv
bmUgaW5saW5pbmcgKGhhcmQpLlxuIik7Ci0gICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKLSAgICB9CisgICAgVkVSQk9TRV9MT0coIkRvbmUgaW5s
aW5pbmcgKGhhcmQpLlxuU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0yMjI5LDggKzIwODUsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVn
aXN0ZXJPZgogdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IENoZWNr
c0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5
dGVDb2RlUGFyc2luZygpKQotICAgICAgICBkYXRhTG9nKCIgICAgICAgVGhlIGludHJpbnNpYyBp
cyAiLCBpbnRyaW5zaWMsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgICAgVGhlIGludHJp
bnNpYyBpcyAiLCBpbnRyaW5zaWMsICJcbiIpOwogICAgIAogICAgIC8vIEl0IHNvIGhhcHBlbnMg
dGhhdCB0aGUgY29kZSBiZWxvdyBkb2Vzbid0IGhhbmRsZSB0aGUgaW52YWxpZCByZXN1bHQgY2Fz
ZS4gV2UgY291bGQgZml4IHRoYXQsIGJ1dAogICAgIC8vIGl0IHdvdWxkIG9ubHkgYmVuZWZpdCBp
bnRyaW5zaWNzIGNhbGxlZCBhcyBzZXR0ZXJzLCBsaWtlIGlmIHlvdSBkbzoKQEAgLTMzMjMsOCAr
MzE3OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5j
dGlvbigKICAgICBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIEludGVy
bmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCiAgICAgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykK
IHsKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQotICAgICAg
ICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY29uc3RhbnQgaW50ZXJuYWwgZnVuY3Rpb24gIiwgSlNW
YWx1ZShmdW5jdGlvbiksICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgSGFuZGxpbmcgY29u
c3RhbnQgaW50ZXJuYWwgZnVuY3Rpb24gIiwgSlNWYWx1ZShmdW5jdGlvbiksICJcbiIpOwogICAg
IAogICAgIC8vIEl0IHNvIGhhcHBlbnMgdGhhdCB0aGUgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQg
dGhlIHJlc3VsdCBvcGVyYW5kIGlzIHZhbGlkLiBJdCdzIGV4dHJlbWVseQogICAgIC8vIHVubGlr
ZWx5IHRoYXQgdGhlIHJlc3VsdCBvcGVyYW5kIHdvdWxkIGJlIGludmFsaWQgLSB5b3UnZCBoYXZl
IHRvIGNhbGwgdGhpcyB2aWEgYSBzZXR0ZXIgY2FsbC4KQEAgLTM1NDEsOCArMzM5NSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6Om5lZWRzRHluYW1pY0xvb2t1cChSZXNvbHZlVHlwZSB0eXBlLCBP
cGNvZGVJRCBvcGNvZGUpCiAKIEdldEJ5T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFu
TG9hZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogewotICAgIGlm
IChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQ
bGFubmluZyBhIGxvYWQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgVkVSQk9TRV9MT0coIlBs
YW5uaW5nIGEgbG9hZDogIiwgY29uZGl0aW9uLCAiXG4iKTsKICAgICAKICAgICAvLyBXZSBtaWdo
dCBwcm9tb3RlIHRoaXMgdG8gRXF1aXZhbGVuY2UsIGFuZCBhIGxhdGVyIERGRyBwYXNzIG1pZ2h0
IGFsc28gZG8gc3VjaCBwcm9tb3Rpb24KICAgICAvLyBldmVuIGlmIHdlIGZhaWwsIGJ1dCBmb3Ig
c2ltcGxpY2l0eSB0aGlzIGNhbm5vdCBiZSBhc2tlZCB0byBsb2FkIGFuIGVxdWl2YWxlbmNlIGNv
bmRpdGlvbi4KQEAgLTM2NTEsOCArMzUwNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmNoZWNr
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiAKIEdldEJ5
T2Zmc2V0TWV0aG9kIEJ5dGVDb2RlUGFyc2VyOjpwbGFuTG9hZChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogewotICAgIGlmIChERkdCeXRlQ29kZVBhcnNl
ckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJjb25kaXRpb25TZXQgPSAiLCBj
b25kaXRpb25TZXQsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCJjb25kaXRpb25TZXQgPSAiLCBj
b25kaXRpb25TZXQsICJcbiIpOwogICAgIAogICAgIEdldEJ5T2Zmc2V0TWV0aG9kIHJlc3VsdDsK
ICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBjb25k
aXRpb25TZXQpIHsKQEAgLTQyMjAsNiArNDA3Miw0MSBAQCBzdGF0aWMgdWludDY0X3QgbWFrZUR5
bmFtaWNWYXJPcEluZm8odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgZ2V0UHV0
SQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaWRlbnRpZmllck51bWJlcikgfCAo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldFB1dEluZm8pIDw8IDMyKTsKIH0KIAorLy8gVGhlIGlk
aW9tOgorLy8gICAgIGlmICh0cnVlKSB7IC4uLjsgZ290byBsYWJlbDsgfSBlbHNlIGxhYmVsOiBj
b250aW51ZQorLy8gQWxsb3dzIHVzaW5nIE5FWFRfT1BDT0RFIGFzIGEgc3RhdGVtZW50LCBldmVu
IGluIHVuYnJhY2VkIGlmK2Vsc2UsIHdoaWxlIGNvbnRhaW5pbmcgYSBgY29udGludWVgLgorLy8g
VGhlIG1vcmUgY29tbW9uIGlkaW9tOgorLy8gICAgIGRvIHsgLi4uOyB9IHdoaWxlIChmYWxzZSkK
Ky8vIERvZXNuJ3QgYWxsb3cgdXNpbmcgYGNvbnRpbnVlYC4KKyNkZWZpbmUgTkVYVF9PUENPREUo
bmFtZSkgXAorICAgIGlmICh0cnVlKSB7IFwKKyAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BD
T0RFX0xFTkdUSChuYW1lKTsgXAorICAgICAgICBnb3RvIFdURl9DT05DQVQoTkVYVF9PUENPREVf
LCBfX0xJTkVfXyk7IC8qIE5lZWQgYSB1bmlxdWUgbGFiZWw6IHVzYWJsZSBtb3JlIHRoYW4gb25j
ZSBwZXIgZnVuY3Rpb24uICovIFwKKyAgICB9IGVsc2UgXAorICAgICAgICBXVEZfQ09OQ0FUKE5F
WFRfT1BDT0RFXywgX19MSU5FX18pOiBcCisgICAgY29udGludWUKKworI2RlZmluZSBMQVNUX09Q
Q09ERV9MSU5LRUQobmFtZSkgXAorICAgIHJldHVybiBcCisgICAgICAgIG1fY3VycmVudEluZGV4
ICs9IE9QQ09ERV9MRU5HVEgobmFtZSksIFwKKyAgICAgICAgbV9leGl0T0sgPSBmYWxzZSwgXAor
ICAgICAgICBzaG91bGRDb250aW51ZVBhcnNpbmcKKyNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkg
XAorICAgIGRvIHsgXAorICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkpIHsg
XAorICAgICAgICAgICAgc3dpdGNoIChtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKS0+b3AoKSkg
eyBcCisgICAgICAgICAgICAgICAgY2FzZSBKdW1wOiBcCisgICAgICAgICAgICAgICAgY2FzZSBC
cmFuY2g6IFwKKyAgICAgICAgICAgICAgICBjYXNlIFN3aXRjaDogXAorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0xpbmtlZCk7IFwKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQobV9jdXJyZW50
QmxvY2spOyBcCisgICAgICAgICAgICAgICAgICAgIGJyZWFrO1wKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBicmVhazsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgICAgICBM
QVNUX09QQ09ERV9MSU5LRUQobmFtZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwogYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBib29sIHNo
b3VsZENvbnRpbnVlUGFyc2luZyA9IHRydWU7CkBAIC00MjU0LDcgKzQxNDEsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgIH0KIAogICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0aGF0IHdlIGNhbiBl
eGl0CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYXQgYSBuZXcgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b24uIFNvIHdlIG9uY2UgYWdhaW4gaGF2ZSBhIHBsYWNlIHRoYXQgd2UgY2FuIGV4aXQKICAgICAg
ICAgLy8gdG8uCiAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgCkBAIC00MjY5LDEx
ICs0MTU2LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICAvLyBsb2dpYyByZWxpZXMgb24gZXZlcnkgYnl0ZWNvZGUgcmVzdWx0
aW5nIGluIG9uZSBvciBtb3JlIG5vZGVzLCB3aGljaCB3b3VsZAogICAgICAgICAgICAgLy8gYmUg
dHJ1ZSBhbnl3YXkgZXhjZXB0IGZvciBvcF9sb29wX2hpbnQsIHdoaWNoIGVtaXRzIGEgUGhhbnRv
bSB0byBmb3JjZSB0aGlzCiAgICAgICAgICAgICAvLyB0byBiZSB0cnVlLgotICAgICAgICAgICAg
Ly8gV2UgYWxzbyBkb24ndCBpbnNlcnQgYSBqdW1wIGlmIHRoZSBibG9jayBhbHJlYWR5IGhhcyBh
IHRlcm1pbmFsLAotICAgICAgICAgICAgLy8gd2hpY2ggY291bGQgaGFwcGVuIGFmdGVyIGEgdGFp
bCBjYWxsLgotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrLT5pc0VtcHR5KCkgfHwg
IW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2stPmlzRW1wdHkoKSkKKworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jay0+aXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+dGVybWlu
YWwoKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxv
Y2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDI4
Miw4ICs0MTcwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb247
IC8vIFNvbWUgbWV0aG9kcyB3YW50IHRvIHVzZSB0aGlzLCBhbmQgd2UnZCByYXRoZXIgbm90IHRo
cmVhZCBpdCB0aHJvdWdoIGNhbGxzLgogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IEludGVy
cHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCi0g
ICAgICAgICAgICBkYXRhTG9nKCIgICAgcGFyc2luZyAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
OiAiLCBvcGNvZGVJRCwgIlxuIik7CisgICAgICAgIFZFUkJPU0VfTE9HKCIgICAgcGFyc2luZyAi
LCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBvcGNvZGVJRCwgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkgewogICAgICAgICAg
ICAgYWRkVG9HcmFwaChDb3VudEV4ZWN1dGlvbiwgT3BJbmZvKG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+ZXhlY3V0aW9uQ291bnRlckZvcigKQEAgLTQyOTksNiArNDE4NiwxMSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gSW5p
dGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5lZC4KICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQog
ICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgdW5kZWZpbmVk
LCBJbW1lZGlhdGVOYWtlZFNldCk7CisKKyAgICAgICAgICAgIFZFUkJPU0VfTE9HKCJtX251bUFy
Z3VtZW50czogIiwgbV9udW1Bcmd1bWVudHMsICIsIG1fbnVtTG9jYWxzOiAiLCBtX251bUxvY2Fs
cywgIlxuIik7CisKKyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZW50cnlCbG9jayA9
IG1fY3VycmVudEJsb2NrOworCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTI3NiwzMyArNTE2OCwzOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgIGNhc2Ugb3Bf
cmV0OgogICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7Ci0g
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTaW1wbGUgY2FzZTogd2UgYXJl
IGp1c3QgcHJvZHVjaW5nIGEgcmV0dXJuCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1
cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkp
KTsKICAgICAgICAgICAgICAgICBmbHVzaEZvclJldHVybigpOwotICAgICAgICAgICAgICAgIGlm
IChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlh
dGVTZXRXaXRoRmx1c2gpOwotICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlk
UmV0dXJuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91
bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Un
cmUgcmV0dXJuaW5nIGZyb20gdGhlIGZpcnN0IGJsb2NrLCB0aGVuIHdlJ3JlIGRvbmUgcGFyc2lu
Zy4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbHNp
dGVCbG9ja0hlYWQgPT0gbV9ncmFwaC5sYXN0QmxvY2soKSk7CisgICAgICAgICAgICAgICAgTEFT
VF9PUENPREUob3BfcmV0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmx1c2hGb3JS
ZXR1cm4oKTsKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVl
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+
bV9yZXR1cm5WYWx1ZSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSksIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CisKKyAgICAgICAgICAgIGlmICgh
bV9pbmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jayAmJiBtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3BfcmV0KSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3Rh
Y2tUb3AtPm1fZW50cnlCbG9jayA9PSBtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgcmF0aGVyIHdlaXJkIGNhc2U6IHdlIGFyZSByZXR1cm5pbmcgZnJv
bSB0aGUgZmlyc3QgYmxvY2sgaW4gdGhlIGZ1bmN0aW9uLCBzbyBhbGwgdGhlIHJlc3Qgb2YgdGhl
IGZ1bmN0aW9uIGlzIGRlYWQgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gU28gd2UgdHJl
YXQgdGhpcyBhcyBhIG5vcm1hbCByZXR1cm4gaW5zdGVhZCBvZiBhbiBlYXJseSByZXR1cm4sIGFu
ZCBzaWduYWwgdG8gc2tpcCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5MjU6IGV2YWx1YXRlIHdoZXRoZXIgdGhhdCBvcHRpbWl6YXRpb24gaXMgdXNlZnVsLCBpdCBz
ZWVtcyBsaWtlIGEgcmVhbGx5IHdlaXJkIGNvcm5lciBjYXNlLgogICAgICAgICAgICAgICAgICAg
ICBzaG91bGRDb250aW51ZVBhcnNpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgTEFT
VF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBpbmxpbmluZyBjcmVhdGVkIGJsb2NrcywgYW5kIHdlJ3JlIGRvaW5nIGEg
cmV0dXJuLCB0aGVuIHdlIG5lZWQgc29tZQotICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFs
IGxpbmtpbmcuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5t
X3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrID09IG1fZ3JhcGgubGFzdEJsb2NrKCkpOwot
ICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxh
c3QoKS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX3JldCkg
IT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSB8
fCBtX2lubGluZVN0YWNrVG9wLT5tX2RpZEVhcmx5UmV0dXJuKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0KSA8PSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8oMCkpOwotICAgICAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX25lZWRz
RWFybHlSZXR1cm5MaW5raW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9kaWRFYXJseVJldHVybiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgYW4gZWFybHkgcmV0dXJuIGZyb20gYW4gaW5saW5lZCBmdW5jdGlvbiBhbmQgd2Ug
ZG8gbm90IGhhdmUgYSBjb250aW51YXRpb24gYmxvY2ssIHNvIHdlIG11c3QgYWxsb2NhdGUgb25l
LgorICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyB1bnRhcmdldGFibGUsIGJlY2F1c2Ugd2Ug
ZG8gbm90IGtub3cgdGhlIGFwcHJvcHJpYXRlIGluZGV4LgorICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGlzIGJsb2NrIHR1cm5zIG91dCB0byBiZSBhIGp1bXAgdGFyZ2V0LCBwYXJzZUNvZGVC
bG9jayB3aWxsIGZpeCBpdHMgYnl0ZWNvZGVJbmRleCBiZWZvcmUgcHV0dGluZyBpdCBpbiBtX2Js
b2NrTGlua2luZ1RhcmdldHMKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
bV9jb250aW51YXRpb25CbG9jayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7Ci0gICAgICAgICAgICBmbHVz
aEZvclJldHVybigpOwotICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKKworICAgICAg
ICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxvY2spCisgICAgICAg
ICAgICAgICAgbWFrZUp1bXBUbyhtX2lubGluZVN0YWNrVG9wLT5tX2NvbnRpbnVhdGlvbkJsb2Nr
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSByZXR1cm5p
bmcgZnJvbSBhbiBpbmxpbmVkIGZ1bmN0aW9uLCBhbmQgZG8gbm90IG5lZWQgdG8ganVtcCBhbnl3
aGVyZSwgc28gd2UganVzdCBrZWVwIHRoZSBjdXJyZW50IGJsb2NrCisgICAgICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jayA9IG1fY3VycmVudEJsb2NrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgTEFTVF9PUENPREVfTElOS0VEKG9wX3JldCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9lbmQ6CiAgICAgICAgICAgICBBU1NFUlQoIWlu
bGluZUNhbGxGcmFtZSgpKTsKQEAgLTU0NTAsNyArNTM0Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBUZXJtaW5hbGl0eSB0
ZXJtaW5hbGl0eSA9IGhhbmRsZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBUYWlsQ2FsbCwgQ2Fs
bE1vZGU6OlRhaWwpOwogICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2N1cnJlbnRJ
bnN0cnVjdGlvbiA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24sICJoYW5kbGVDYWxsLCB3aGljaCBtYXkg
aGF2ZSBpbmxpbmVkIHRoZSBjYWxsZWUsIHRyYXNoZWQgbV9jdXJyZW50SW5zdHJ1Y3Rpb24iKTsK
ICAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIHRlcm1pbmFsIHRoZW4gd2Ugc2hvdWxkIG5v
dCBwYXJzZSBhbnkgZnVydGhlciBieXRlY29kZXMgYXMgdGhlIFRhaWxDYWxsIHdpbGwgZXhpdCB0
aGUgZnVuY3Rpb24uCi0gICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBub3QgdGVybWluYWws
IGhvd2V2ZXIsIHRoZW4gd2Ugd2FudCB0aGUgc3Vic2VxdWVudCBvcF9yZXQvb3BfanVtcCB0byB1
cGRhdGUgbWV0YWRhdGEgYW5kIGNsZWFuCisgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBu
b3QgdGVybWluYWwsIGhvd2V2ZXIsIHRoZW4gd2Ugd2FudCB0aGUgc3Vic2VxdWVudCBvcF9yZXQv
b3Bfam1wIHRvIHVwZGF0ZSBtZXRhZGF0YSBhbmQgY2xlYW4KICAgICAgICAgICAgIC8vIHRoaW5n
cyB1cC4KICAgICAgICAgICAgIGlmICh0ZXJtaW5hbGl0eSA9PSBOb25UZXJtaW5hbCkKICAgICAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF90YWlsX2NhbGwpOwpAQCAtNTQ3NCw3ICs1MzcxLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAg
ICAgICAgIFRlcm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBUYWlsQ2FsbFZhcmFyZ3MsIENhbGxNb2RlOjpUYWlsKTsKICAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3VycmVudElu
c3RydWN0aW9uLCAiaGFuZGxlVmFyYXJnc0NhbGwsIHdoaWNoIG1heSBoYXZlIGlubGluZWQgdGhl
IGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlvbiIpOwogICAgICAgICAgICAgLy8g
SWYgdGhlIGNhbGwgaXMgdGVybWluYWwgdGhlbiB3ZSBzaG91bGQgbm90IHBhcnNlIGFueSBmdXJ0
aGVyIGJ5dGVjb2RlcyBhcyB0aGUgVGFpbENhbGwgd2lsbCBleGl0IHRoZSBmdW5jdGlvbi4KLSAg
ICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5hbCwgaG93ZXZlciwgdGhlbiB3
ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qdW1wIHRvIHVwZGF0ZSBtZXRhZGF0YSBh
bmQgY2xlYW4KKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5hbCwgaG93
ZXZlciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qbXAgdG8gdXBkYXRl
IG1ldGFkYXRhIGFuZCBjbGVhbgogICAgICAgICAgICAgLy8gdGhpbmdzIHVwLgogICAgICAgICAg
ICAgaWYgKHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFsKQogICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX3RhaWxfY2FsbF92YXJhcmdzKTsKQEAgLTU0OTAsMTIgKzUzODcsMTIgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IFRlcm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzLCBDYWxsTW9kZTo6VGFpbCk7CiAgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fY3VycmVudEluc3RydWN0aW9uID09IGN1cnJlbnRJ
bnN0cnVjdGlvbiwgImhhbmRsZVZhcmFyZ3NDYWxsLCB3aGljaCBtYXkgaGF2ZSBpbmxpbmVkIHRo
ZSBjYWxsZWUsIHRyYXNoZWQgbV9jdXJyZW50SW5zdHJ1Y3Rpb24iKTsKICAgICAgICAgICAgIC8v
IElmIHRoZSBjYWxsIGlzIHRlcm1pbmFsIHRoZW4gd2Ugc2hvdWxkIG5vdCBwYXJzZSBhbnkgZnVy
dGhlciBieXRlY29kZXMgYXMgdGhlIFRhaWxDYWxsIHdpbGwgZXhpdCB0aGUgZnVuY3Rpb24uCi0g
ICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBub3QgdGVybWluYWwsIGhvd2V2ZXIsIHRoZW4g
d2Ugd2FudCB0aGUgc3Vic2VxdWVudCBvcF9yZXQvb3BfanVtcCB0byB1cGRhdGUgbWV0YWRhdGEg
YW5kIGNsZWFuCisgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBub3QgdGVybWluYWwsIGhv
d2V2ZXIsIHRoZW4gd2Ugd2FudCB0aGUgc3Vic2VxdWVudCBvcF9yZXQvb3Bfam1wIHRvIHVwZGF0
ZSBtZXRhZGF0YSBhbmQgY2xlYW4KICAgICAgICAgICAgIC8vIHRoaW5ncyB1cC4KICAgICAgICAg
ICAgIGlmICh0ZXJtaW5hbGl0eSA9PSBOb25UZXJtaW5hbCkKLSAgICAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF90YWlsX2NhbGwpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgTEFTVF9PUENPREUob3BfdGFpbF9jYWxsKTsKKyAgICAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogewpAQCAtNjI0NCwyNSAr
NjE0MSwxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxv
Y2ssIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVAogICAgIH0KICAgICAgICAgCiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogICAgIAotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJNYXJraW5nICIsIFJhd1BvaW50ZXIoYmxvY2spLCAi
IGFzIGxpbmtlZCAoYWN0dWFsbHkgZGlkIGxpbmtpbmcpXG4iKTsKKyAgICBWRVJCT1NFX0xPRygi
TWFya2luZyAiLCBSYXdQb2ludGVyKGJsb2NrKSwgIiBhcyBsaW5rZWQgKGFjdHVhbGx5IGRpZCBs
aW5raW5nKVxuIik7CiAgICAgYmxvY2stPmRpZExpbmsoKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBh
cnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBW
ZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpsaW5rQmxvY2tzKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8
QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoREZHQnl0ZUNv
ZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRp
bmcgdG8gbGluayAiLCBSYXdQb2ludGVyKHVubGlua2VkQmxvY2tzW2ldLm1fYmxvY2spLCAiXG4i
KTsKLSAgICAgICAgaWYgKHVubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5nKSB7
Ci0gICAgICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRG9lcyBuZWVkIG5vcm1hbCBsaW5raW5nLlxuIik7
Ci0gICAgICAgICAgICBsaW5rQmxvY2sodW5saW5rZWRCbG9ja3NbaV0ubV9ibG9jaywgcG9zc2li
bGVUYXJnZXRzKTsKLSAgICAgICAgICAgIHVubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxM
aW5raW5nID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgVkVSQk9TRV9MT0coIkF0dGVtcHRp
bmcgdG8gbGluayAiLCBSYXdQb2ludGVyKHVubGlua2VkQmxvY2tzW2ldKSwgIlxuIik7CisgICAg
ICAgIGxpbmtCbG9jayh1bmxpbmtlZEJsb2Nrc1tpXSwgcG9zc2libGVUYXJnZXRzKTsKICAgICB9
CiB9CiAKQEAgLTYyNzAsNyArNjE2MCw2IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgIEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNl
ciwKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssCi0gICAgQmFzaWNCbG9jayogY2FsbHNpdGVCbG9ja0hlYWQsCiAgICAgSlNGdW5jdGlvbiog
Y2FsbGVlLCAvLyBOdWxsIGlmIHRoaXMgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgVmlydHVhbFJlZ2lzdGVyIGlubGluZUNhbGxGcmFt
ZVN0YXJ0LApAQCAtNjI3OSwxMCArNjE2OCw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFj
a0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgIDogbV9ieXRlQ29kZVBhcnNlcihieXRlQ29k
ZVBhcnNlcikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJvZmlsZWRC
bG9jayhwcm9maWxlZEJsb2NrKQotICAgICwgbV9jYWxsc2l0ZUJsb2NrSGVhZChjYWxsc2l0ZUJs
b2NrSGVhZCkKKyAgICAsIG1fY29udGludWF0aW9uQmxvY2sobnVsbHB0cikKICAgICAsIG1fcmV0
dXJuVmFsdWUocmV0dXJuVmFsdWVWUikKLSAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQotICAgICwg
bV9kaWRFYXJseVJldHVybihmYWxzZSkKICAgICAsIG1fY2FsbGVyKGJ5dGVDb2RlUGFyc2VyLT5t
X2lubGluZVN0YWNrVG9wKQogewogICAgIHsKQEAgLTYzMTIsNyArNjE5OSw2IEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAvLyBJ
bmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNWYWxp
ZCgpKTsKLSAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkKTsKICAgICAgICAgCiAgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9wbGFuLmlu
bGluZUNhbGxGcmFtZXMtPmFkZCgpOwogCkBAIC02MzU3LDE0ICs2MjQzLDEyIEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAgICAg
bV9zd2l0Y2hSZW1hcFtpXSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZT
d2l0Y2hKdW1wVGFibGVzKCk7CiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxv
Y2stPmFkZFN3aXRjaEp1bXBUYWJsZSgpID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoaSk7
CiAgICAgICAgIH0KLSAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IHRy
dWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFjaGluZSBjb2RlIGJsb2NrIGNhc2UuCiAg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsK
ICAgICAgICAgQVNTRVJUKCFjYWxsZWUpOwogICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlVlIu
aXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWVTdGFydC5pc1ZhbGlk
KCkpOwotICAgICAgICBBU1NFUlQoIWNhbGxzaXRlQmxvY2tIZWFkKTsKIAogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZSA9IDA7CiAKQEAgLTYzNzcsNyArNjI2MSw2IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAgICAgbV9jb25z
dGFudEJ1ZmZlclJlbWFwW2ldID0gaTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpOyArK2kpCiAgICAgICAgICAgICBt
X3N3aXRjaFJlbWFwW2ldID0gaTsKLSAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlu
a2luZyA9IGZhbHNlOwogICAgIH0KICAgICAKICAgICBieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVT
dGFja1RvcCA9IHRoaXM7CkBAIC02NDMyLDg1ICs2MzE1LDU1IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKCkKIAogICAgICAgICAvLyBMb29wIHVudGlsIHdlIHJlYWNoIHRo
ZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVtcCB0YXJnZXQpLgogICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAvLyBUaGVyZSBtYXkgYWxyZWFkeSBiZSBhIGN1cnJlbnRCbG9jayBpbiB0d28g
Y2FzZXM6CisgICAgICAgICAgICAvLyAtIHdlIG1heSBqdXN0IGhhdmUgYmVlbiBpbmxpbmVkLCBh
bmQgY2FsbGVkIGZyb20gaW5saW5lQ2FsbCgpCisgICAgICAgICAgICAvLyAtIHdlIG1heSBqdXN0
IGhhdmUgcmV0dXJuZWQgZnJvbSBhbiBpbmxpbmVkIGNhbGxlZSB0aGF0IGhhZCBzb21lIGVhcmx5
IHJldHVybnMgYW5kIHNvIGFsbG9jYXRlZCBhIGNvbnRpbnVhdGlvbiBibG9jaywgYW5kIHRoZSBp
bnN0cnVjdGlvbiBhZnRlciB0aGUgY2FsbCBpcyBhIGp1bXAgdGFyZ2V0LgorICAgICAgICAgICAg
Ly8gSW4gYm90aCBjYXNlcywgd2Ugd2FudCB0byBrZWVwIHVzaW5nIGl0LgogICAgICAgICAgICAg
aWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNh
biB1c2UgdGhlIGxhc3QgYmxvY2suCi0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubnVtQmxv
Y2tzKCkgJiYgbV9ncmFwaC5sYXN0QmxvY2soKS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGJsb2NrIGJlbG9uZ2luZyB0byB1cy4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFz
dCgpLm1fYmxvY2sgPT0gbV9ncmFwaC5sYXN0QmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIEVpdGhlciB0aGUgYmxvY2sgaXMgbGlua2FibGUgb3IgaXQgaXNuJ3QuIElmIGl0J3MgbGlu
a2FibGUgdGhlbiBpdCdzIHRoZSBsYXN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlu
IHRoZSBibG9ja0xpbmtpbmdUYXJnZXRzIGxpc3QuIElmIGl0J3Mgbm90IHRoZW4gdGhlIGxhc3Qg
YmxvY2sgd2lsbAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGEgbG93ZXIgYnl0ZWNvZGUg
aW5kZXggdGhhdCB0aGUgb25lIHdlJ3JlIGFib3V0IHRvIGdpdmUgdG8gdGhpcyBibG9jay4KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
Lmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTWFrZSB0aGUgYmxvY2sgbGlua2FibGUuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlz
RW1wdHkoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgp
LT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChtX2dyYXBo
Lmxhc3RCbG9jaygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAvLyBDaGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KLSAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9jaygpOwotICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwg
bV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gYmxvY2sucHRyKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
YXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgotICAgICAgICAgICAgICAgICAgICAvLyAxKSBJ
ZiB0aGUgYnl0ZWNvZGVCZWdpbiBpcyBncmVhdGVyIHRoYW4gY3VycmVudEluZGV4LCB0aGVuIHNv
bWV0aGluZyBoYXMgZ29uZQotICAgICAgICAgICAgICAgICAgICAvLyAgICBob3JyaWJseSB3cm9u
Zy4gU28sIHdlJ3JlIHByb2JhYmx5IGdlbmVyYXRpbmcgaW5jb3JyZWN0IGNvZGUuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlzIGVxdWFsIHRvIHRoZSBj
dXJyZW50SW5kZXgsIHRoZW4gd2UgZmFpbGVkIHRvIGRvCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgIGEgcGVlcGhvbGUgY29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGluIHRoZSBpZiBzdGF0ZW1l
bnQgYWJvdmUuIFNvLCB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyAgICBnZW5lcmF0aW5n
IHN1Ym9wdGltYWwgY29kZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9yIHRoZSBDRkcgc2ltcGxp
Zmllci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3VubGlu
a2VkQmxvY2tzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGFzdEJlZ2luID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrLT5ieXRlY29kZUJlZ2luOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0QmVnaW4sIGxhc3RCZWdpbiA9PSBVSU5UX01BWCB8fCBsYXN0QmVnaW4gPCBtX2N1
cnJlbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhi
bG9jay5wdHIoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Js
b2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrLnB0cigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGZpcnN0IGJsb2NrIGlzIGRlZmluaXRlbHkgYW4gT1NSIHRhcmdldC4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm51bUJsb2NrcygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBibG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX3Jvb3RzLmFwcGVuZChibG9jay5wdHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3Zl
KGJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKG1f
Y3VycmVudEluZGV4KTsKKworICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBibG9jayBpcyBk
ZWZpbml0ZWx5IGFuIE9TUiB0YXJnZXQuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubnVt
QmxvY2tzKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+aXNP
U1JUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcm9vdHMuYXBw
ZW5kKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29s
IHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHBhcnNlQmxvY2sobGltaXQpOwogCiAgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgbm90IGhhdmUgZ29uZSBiZXlvbmQgdGhlIGxpbWl0LgogICAgICAgICAg
ICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IGxpbWl0KTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgcGxhbnRlZCBhIHRlcm1pbmFsLCBvciB3ZSBqdXN0IGdh
dmUgdXAgYmVjYXVzZQotICAgICAgICAgICAgLy8gd2UgcmVhbGl6ZWQgdGhhdCB0aGUganVtcCB0
YXJnZXQgaW5mb3JtYXRpb24gaXMgaW1wcmVjaXNlLCBvciB3ZQotICAgICAgICAgICAgLy8gYXJl
IGF0IHRoZSBlbmQgb2YgYW4gaW5saW5lIGZ1bmN0aW9uLCBvciB3ZSByZWFsaXplZCB0aGF0IHdl
Ci0gICAgICAgICAgICAvLyBzaG91bGQgc3RvcCBwYXJzaW5nIGJlY2F1c2UgdGhlcmUgd2FzIGEg
cmV0dXJuIGluIHRoZSBmaXJzdAotICAgICAgICAgICAgLy8gYmFzaWMgYmxvY2suCi0gICAgICAg
ICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1cnJlbnRCbG9jay0+
dGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCkgJiYgaW5saW5lQ2FsbEZyYW1lKCkpIHx8ICFzaG91bGRDb250aW51ZVBhcnNpbmcp
OwogCiAgICAgICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlUGFyc2luZykgewotICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgcGFyc2luZyAiLCAqY29kZUJsb2NrLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBWRVJCT1NFX0xPRygiRG9uZSBwYXJzaW5nICIsICpjb2RlQmxvY2ss
ICJcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworCisgICAgICAgICAg
ICBpZiAobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIC8vIFRo
aXMgY2FzZSBvbmx5IGhhcHBlbnMgaWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gd2FzIGFuIGlubGlu
ZWQgY2FsbCB3aXRoIGVhcmx5IHJldHVybnMgb3IgcG9seW1vcnBoaWMgKGNyZWF0aW5nIGFuIGVt
cHR5IGNvbnRpbnVhdGlvbiBibG9jayksCisgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gd2Ug
aGl0IHRoZSBsaW1pdCBiZWZvcmUgcHV0dGluZyBhbnl0aGluZyBpbiB0aGUgY29udGludWF0aW9u
IGJsb2NrLgorICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBsaW1pdCk7
CisgICAgICAgICAgICAgICAgbWFrZUJsb2NrVGFyZ2V0YWJsZShtX2N1cnJlbnRCbG9jaywgbV9j
dXJyZW50SW5kZXgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICYmIGlubGluZUNhbGxGcmFtZSgpKSk7CisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICAgICAgfQogICAg
ICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKICAgICB9CiAKICAgICAvLyBT
aG91bGQgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGluc3RydWN0aW9ucy4KICAgICBBU1NF
UlQobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwog
ICAgIAotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCi0gICAg
ICAgIGRhdGFMb2coIkRvbmUgcGFyc2luZyAiLCAqY29kZUJsb2NrLCAiIChmZWxsIG9mZiBlbmQp
XG4iKTsKKyAgICBWRVJCT1NFX0xPRygiRG9uZSBwYXJzaW5nICIsICpjb2RlQmxvY2ssICIgKGZl
bGwgb2ZmIGVuZClcbiIpOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCit2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiB7CiAgICAgLy8gU2V0IGR1cmluZyBjb25zdHJ1Y3Rp
b24uCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRJbmRleCk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKLSAgICAgICAgZGF0YUxvZygiUGFyc2luZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCJQYXJzaW5nICIsICptX2Nv
ZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgbV9kZmdDb2RlQmxvY2sgPSBtX2dyYXBoLm1fcGxh
bi5wcm9maWxlZERGR0NvZGVCbG9jazsKICAgICBpZiAoaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSkgJiYgbV9kZmdDb2RlQmxvY2sKQEAgLTY1MjIsMTMgKzYzNzUsMTUgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2UoKQogICAgIH0KICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGlu
ZVN0YWNrRW50cnkoCi0gICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ss
IDAsIDAsIFZpcnR1YWxSZWdpc3RlcigpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwKKyAgICAgICAgdGhp
cywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgMCwgVmlydHVhbFJlZ2lzdGVyKCksIFZp
cnR1YWxSZWdpc3RlcigpLAogICAgICAgICBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBJ
bmxpbmVDYWxsRnJhbWU6OkNhbGwpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAgICAg
bGlua0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNr
RW50cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKIAogICAgIG1fZ3JhcGguZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmco
KSkKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVC
bG9ja3MoKTsKIAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpAQCAtNjU0MywxMyArNjM5OCwxMSBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1M
b2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsK
LQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHBhcnNlKEdyYXBoJiBncmFwaCkKK3ZvaWQg
cGFyc2UoR3JhcGgmIGdyYXBoKQogewotICAgIHJldHVybiBCeXRlQ29kZVBhcnNlcihncmFwaCku
cGFyc2UoKTsKKyAgICBCeXRlQ29kZVBhcnNlcihncmFwaCkucGFyc2UoKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5oCmluZGV4IDQwZDJhYmM3ODI2YzljYzY2NWM3MzliMjFiOTU0Y2UxZjYwYjhk
YWQuLjViNTA4YTFjNTAyMGFjNWQ1NzRkMmE3MzFhZjkxOWNhNGFkODQ5YjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgKQEAgLTMxLDcgKzMxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIAotYm9v
bCBwYXJzZShHcmFwaCYpOwordm9pZCBwYXJzZShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggNWJm
ZTUyN2UxNWNmYzg0ZGNjNmE0YjE0YjE1MDIxNGMzNjkwOGFiYi4uMGFiNjM3YzI2NjA5MTRjMjEy
NWNjNTE4N2E2MDRiYWM1YTA4OWY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKQEAgLTgxNyw3ICs4MTcsOCBAQCB2b2lkIEdyYXBoOjpraWxsVW5yZWFjaGFibGVCbG9j
a3MoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFi
bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCisKKyAgICAgICAgZGF0YUxvZ0lm
KE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSwgIkJhc2ljIGJsb2NrICMiLCBi
bG9ja0luZGV4LCAiIHdhcyBraWxsZWQgYmVjYXVzZSBpdCB3YXMgdW5yZWFjaGFibGVcbiIpOwog
ICAgICAgICBraWxsQmxvY2tBbmRJdHNDb250ZW50cyhibG9jayk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKaW5kZXggZjUxN2ZlOWVhZmRhNTY1M2U5NTU5NTE2
NDBkMTY1YmRkMjVjZWRkMC4uNWJmNGNkZTdiOGZlZmFmMmRlZjM4NTJhZjVmMjhiOTViNjg4MTNi
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCkBAIC0yNDcsMTEgKzI0Nyw3
IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKCkKICAg
ICB9CiAgICAgCiAgICAgR3JhcGggZGZnKCp2bSwgKnRoaXMpOwotICAgIAotICAgIGlmICghcGFy
c2UoZGZnKSkgewotICAgICAgICBmaW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZp
bmFsaXplcj4oKnRoaXMpOwotICAgICAgICByZXR1cm4gRmFpbFBhdGg7Ci0gICAgfQorICAgIHBh
cnNlKGRmZyk7CiAKICAgICBjb2RlQmxvY2stPnNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0
ZXJTZXQ6OmRmZ0NhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2FyZ3VtZW50cy1lbGltaW5hdGlvbi12YXJhcmdzLXRvby1tYW55LWFyZ3MtYXJnLWNv
dW50LmpzIGIvSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRzLWVsaW1pbmF0aW9uLXZhcmFyZ3MtdG9v
LW1hbnktYXJncy1hcmctY291bnQuanMKaW5kZXggYzJiNjg1OTU1MTgxOTJlOGExMmQ2ZTBmMzI1
YjVlZGM2ZmM5MGQ4Yy4uOWRkNmJjZDMxM2JiMDUxNTM0ZmNlNTdjZTA0OGFlOWM2YjIxOTQxOCAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRzLWVsaW1pbmF0aW9uLXZhcmFyZ3Mt
dG9vLW1hbnktYXJncy1hcmctY291bnQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRz
LWVsaW1pbmF0aW9uLXZhcmFyZ3MtdG9vLW1hbnktYXJncy1hcmctY291bnQuanMKQEAgLTIyLDkg
KzIyLDkgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewogICAgIHZhciByZXN1
bHQgPSBiYXooKTsKICAgICBpZiAocmVzdWx0LmZ0bCkgewogICAgICAgICBpZiAocmVzdWx0LnJl
c3VsdCAhPSA0KQotICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGluIGxvb3Ag
aW4gREZHOiAiICsgcmVzdWx0LnJlc3VsdDsKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCBpbiBsb29wIGluIERGRyAocmVzdWx0LmZ0bDogIiArIHJlc3VsdC5mdGwgKyAiKTog
IiArIHJlc3VsdC5yZXN1bHQgKyAiIGluIGl0ZXJhdGlvbiAiICsgaTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAocmVzdWx0LnJlc3VsdCAhPSAxKQotICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0IGluIGxvb3AgYmVmb3JlIERGRzogIiArIHJlc3VsdC5yZXN1bHQ7CisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgaW4gbG9vcCBiZWZvcmUgREZHIChyZXN1
bHQuZnRsOiAiICsgcmVzdWx0LmZ0bCArICIpOiAiICsgcmVzdWx0LnJlc3VsdCArICIgaW4gaXRl
cmF0aW9uICIgKyBpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323239</attachid>
            <date>2017-10-09 16:13:15 -0700</date>
            <delta_ts>2017-10-09 16:17:39 -0700</delta_ts>
            <desc>Applied Saam&apos;s suggestions + s/PARSER_ASSERT/RELEASE_ASSERT/g</desc>
            <filename>bug-177922-20171009161313.patch</filename>
            <type>text/plain</type>
            <size>85628</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmEzNmUzMDlhZjZmYzI4MmQ5M2U3OWQ3MDRkNjFmM2U4YzBjMzNlLi42ZjhkODkyZGNiZjI4NmJk
MWYwZGM2NTc4M2Q1ZGIzY2Q5Nzc4NzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAxNy0wOS0yNiAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBpbmxpbmVyIHRvIHNpbXBsaWZ5IGJsb2NrIGxp
bmtpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBiaWdnZXN0IHJlZmFjdG9yIGNoYW5nZXMgdGhlIHdheSBibG9ja3MgYXJlIGxpbmtlZC4gSW4g
REZHQnl0ZUNvZGVQYXJzZXIsIG1vc3QgdGVybWluYWxzIChzdWNoIGFzIEp1bXAgb3IgQnJhbmNo
KSBqdW1wIHRvIG51bGxwdHIgaW5pdGlhbGx5LCBhbmQgaGF2ZQorICAgICAgICBzb21lIG1ldGFk
YXRhIGluZGljYXRpbmcgdGhlIGJ5dGVjb2RlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlaXIg
dGFyZ2V0cy4gVGhleSBhcmUgbGF0ZXIgbGlua2VkIHRvIHRoZSByaWdodCBiYXNpYyBibG9jayB1
c2luZyB0d28gZmllbGRzIG9mIElubGluZVN0YWNrRW50cnk6CisgICAgICAgIC0gbV91bmxpbmtl
ZEJsb2NrcyBpcyBqdXN0IGEgd29ya2xpc3Qgb2YgYmxvY2tzIHdpdGggYSB0ZXJtaW5hbCB0aGF0
IG5lZWRzIHRvIGJlIGxpbmtlZAorICAgICAgICAtIG1fbGlua2luZ1RhcmdldHMgaXMgYSBkaWN0
aW9uYXJ5IGZyb20gYnl0ZWNvZGUgaW5kaWNlcyB0byBCYXNpY0Jsb2NrKgorICAgICAgICBCZWZv
cmUgcmVmYWN0b3JpbmcsIGV2ZXJ5IGJsb2NrIHdhcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGJv
dGggb2YgdGhlc2UgZmllbGRzLCBmb3IgdGhlIElubGluZVN0YWNrRW50cnkgb2Ygd2hhdGV2ZXIg
ZnVuY3Rpb24gYWxsb2NhdGVkIGl0LgorICAgICAgICBUaGlzIGNyZWF0ZWQgYSBzaWduaWZpY2Fu
dCBudW1iZXIgb2YgY29ybmVyIGNhc2VzLCBzdWNoIGFzIGJsb2NrcyBhbGxvY2F0ZWQgaW4gYSBj
YWxsZXIsIHdpdGggYSB0ZXJtaW5hbCB3cml0dGVuIGJ5IGFuIGlubGluZWQgY2FsbGVlIGFuZCBw
b2ludGluZyB0byBhIGJsb2NrIGluIHRoZSBjYWxsZWUsCisgICAgICAgIG9yIGJsb2NrcyBhbGxv
Y2F0ZWQgaW4gYW4gaW5saW5lIGNhbGxlZSwgd2l0aCBhIHRlcm1pbmFsIHdyaXR0ZW4gYnkgdGhl
IGNhbGxlciBhZnRlciBpdCByZXR1cm5zIGFuZCBwb2ludGluZyB0byBhIGJsb2NrIGluIHRoZSBj
YWxsZXIsIG9yIGJsb2NrcyB3aXRoIGEgbWFudWFsbHkgbGlua2VkCisgICAgICAgIHRlcm1pbmFs
IHRoYXQgbmVlZHMgdG8gYmUgdGFrZW4gb2ZmIG1fdW5saW5rZWRCbG9ja3MuCisgICAgICAgIEkg
Y2hhbmdlZCB0aGluZ3Mgc28gdGhhdCBibG9ja3MgYXJlIG9ubHkgYWRkZWQgdG8gbV91bmxpbmtl
ZEJsb2NrcyB3aGVuIHRoZWlyIHRlcm1pbmFsIGdldHMgd3JpdHRlbiAoc2VlIHRoZSBMQVNUX09Q
Q09ERSBtYWNybykgbWFraW5nIGl0IGEgbG90IGVhc2llciB0byBiZSBpbiB0aGUgInJpZ2h0IiBJ
bmxpbmVTdGFja0VudHJ5LAorICAgICAgICB0aGF0IGlzIHRoZSBvbmUgdGhhdCBob2xkcyB0aGVp
ciB0YXJnZXQgaW4gaXRzIG1fbGlua2luZ1RhcmdldHMgZmllbGQuCisKKyAgICAgICAgVGhlcmUg
YXJlIGEgZmV3IG11Y2ggc21hbGxlciByZWZhY3RvcnMgaW4gdGhpcyBwYXRjaDoKKyAgICAgICAg
LSBwYXJzZSgpIGlzIG5vdyBvZiB0eXBlIHZvaWQgaW5zdGVkIG9mIGJvb2wgKGl0IHdhcyBhbHdh
eXMgcmV0dXJuaW5nIHRydWUpCisgICAgICAgIC0gVGhlIDcgYW5kIDggYXJndW1lbnRzIG9mIGhh
bmRsZUNhbGwgd2VyZSBpbmxpbmVkIGluIGl0cyAzIGFyZ3VtZW50cyB2ZXJzaW9uIGZvciByZWFk
YWJpbGl0eQorICAgICAgICAtIFRoZSA5IGFyZ3VtZW50IHZlcnNpb24gd2FzIGNsZWFuZWQgdXAg
YW5kIHNpbXBsaWZpZWQKKyAgICAgICAgLSBJIG1hZGUgc2VwYXJhdGUgYWxsb2NhdGVCbG9jayBy
b3V0aW5lcyBiZWNhdXNlIHRoZSBsaXR0bGUgZGFuY2Ugd2l0aCBhZG9wdFJlZigqIG5ldyBCYXNp
Y0Jsb2NrKC4uLikpIHdhcyBiZWluZyByZXBlYXRlZCBpbiBsb3RzIG9mIHBsYWNlcywgYW5kIHR5
cG9zIGluIHRoYXQgd2VyZSBhIG1ham9yIHNvdXJjZSBvZiBidWdzIGR1cmluZyBvdGhlciByZWZh
Y3RvcmluZ3MKKyAgICAgICAgLSBKdW1wcyBhcmUgbm93IGNyZWF0ZWQgd2l0aCBleHBsaWNpdCBh
ZGRKdW1wVG8oKSBmdW5jdGlvbnMsIHByb3ZpZGluZyBzb21lIHNhbml0eSBjaGVja2luZyB0aHJv
dWdoIGFzc2VydHMgYW5kIGRpZExpbmsoKQorICAgICAgICAtIEJsb2NrcyBhcmUgb25seSBhZGRl
ZCB0byBtX3VubGlua2VkQmxvY2tzIGlmIHRoZXkgZW5kIGluIGEgdGVybWluYWwgdGhhdCBsaW5r
QmxvY2sgd29ya3Mgd2l0aCAoc2VlIExBU1RfT1BDT0RFKQorCisgICAgICAgICogZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRk
VG9HcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2Fs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpERkc6
OnBhcnNlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2FuY2VsTGlua2lu
Z0ZvckJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoK
KyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29t
cGlsZUluVGhyZWFkSW1wbCk6CisKIDIwMTctMTAtMDkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1x
dWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjMw
MTUgYW5kIHIyMjMwMjUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
CmluZGV4IDY0MDNlYWVlODliM2EwMDQ4NmU5NGExNzExY2JlM2ViNWQ5MzQ0Y2QuLjFlMjNlMzc2
MzdjNDMxZTE4YjY4NThmMTZiNjM0OTJkYzdhY2Y4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC0yNTEsMjEgKzI1MSw2IEBAIHByaXZhdGU6CiB9Owog
CiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0OwotCi1zdHJ1Y3QgVW5s
aW5rZWRCbG9jayB7Ci0gICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAgICBib29sIG1fbmVlZHNO
b3JtYWxMaW5raW5nOwotICAgIGJvb2wgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZzsKLSAgICAK
LSAgICBVbmxpbmtlZEJsb2NrKCkgeyB9Ci0gICAgCi0gICAgZXhwbGljaXQgVW5saW5rZWRCbG9j
ayhCYXNpY0Jsb2NrKiBibG9jaykKLSAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgICAgICAs
IG1fbmVlZHNOb3JtYWxMaW5raW5nKHRydWUpCi0gICAgICAgICwgbV9uZWVkc0Vhcmx5UmV0dXJu
TGlua2luZyhmYWxzZSkKLSAgICB7Ci0gICAgfQotfTsKICAgICAKIHN0YXRpYyBpbmxpbmUgdW5z
aWduZWQgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCAwYzgwYzM2MTBlMmRhYzA5ZmZmOGE0OTI1Zjg0ZjQ0YTBkYzYyYzE1Li40MDhhYjQ2YjQ2
YzdmOTk5NzY1OWVkODkyOTcxNDk4MjdiNjA1ZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNjgsMjAgKzY4LDE4IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotbmFtZXNwYWNlIHsKLQotI2RlZmluZSBQ
QVJTRVJfQVNTRVJUKGFzc2VydGlvbiwgLi4uKSBkbyB7ICAgICAgICAgIFwKLSAgICBpZiAoVU5M
SUtFTFkoIShhc3NlcnRpb24pKSkgeyBcCi0gICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1
cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsg
XAotICAgICAgICBDUkFTSF9XSVRIX0lORk8oX19WQV9BUkdTX18pOyBcCi0gICAgfSBcCi19IHdo
aWxlICgwKQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQogbmFtZXNwYWNlIERGR0J5dGVD
b2RlUGFyc2VySW50ZXJuYWwgeworI2lmZGVmIE5ERUJVRwogc3RhdGljIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwotfQorI2Vsc2UKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSB0cnVl
OworI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBERkdCeXRlQ29kZVBhcnNlckludGVybmFsCisKKyNk
ZWZpbmUgVkVSQk9TRV9MT0coLi4uKSBkbyB7IFwKK2lmIChERkdCeXRlQ29kZVBhcnNlckludGVy
bmFsOjp2ZXJib3NlICYmIE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlY29kZVBhcnNpbmcoKSkgXAor
ZGF0YUxvZyhfX1ZBX0FSR1NfXyk7IFwKK30gd2hpbGUgKGZhbHNlKQogCiBjbGFzcyBDb25zdGFu
dEJ1ZmZlcktleSB7CiBwdWJsaWM6CkBAIC0xODEsNyArMTc5LDcgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICAvLyBQYXJzZSBhIGZ1bGwgQ29kZUJsb2NrIG9mIGJ5dGVjb2RlLgotICAgIGJv
b2wgcGFyc2UoKTsKKyAgICB2b2lkIHBhcnNlKCk7CiAgICAgCiBwcml2YXRlOgogICAgIHN0cnVj
dCBJbmxpbmVTdGFja0VudHJ5OwpAQCAtMTkxLDYgKzE4OSw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQogICAgIHsKKyAgICAg
ICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVtTG9j
YWxzIGZyb20gIiwgbV9udW1Mb2NhbHMsICIgdG8gIiwgbmV3TnVtTG9jYWxzLCAiXG4iKTsKICAg
ICAgICAgaWYgKG5ld051bUxvY2FscyA8PSBtX251bUxvY2FscykKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7CkBAIC0yMDMsMTYgKzIwMiwy
MyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBO
b2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgCiAgICAgdm9p
ZCByZWZpbmVTdGF0aWNhbGx5KENhbGxMaW5rU3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCk7Cisg
ICAgLy8gQmxvY2tzIGNhbiBlaXRoZXIgYmUgdGFyZ2V0YWJsZSAoaS5lLiBpbiB0aGUgbV9ibG9j
a0xpbmtpbmdUYXJnZXRzIG9mIG9uZSBJbmxpbmVTdGFja0VudHJ5KSB3aXRoIGEgd2VsbC1kZWZp
bmVkIGJ5dGVjb2RlQmVnaW4sCisgICAgLy8gb3IgdGhleSBjYW4gYmUgdW50YXJnZXRhYmxlLCB3
aXRoIGJ5dGVjb2RlQmVnaW49PVVJTlRfTUFYLCB0byBiZSBtYW5hZ2VkIG1hbnVhbGx5IGFuZCBu
b3QgYnkgdGhlIGxpbmtCbG9jayBtYWNoaW5lcnkuCisgICAgLy8gVGhpcyBpcyB1c2VkIG1vc3Qg
bm90YWJseSB3aGVuIGRvaW5nIHBvbHl2YXJpYW50IGlubGluaW5nIChpdCByZXF1aXJlcyBhIGZh
aXIgYml0IG9mIGNvbnRyb2wtZmxvdyB3aXRoIG5vIGJ5dGVjb2RlIGFuYWxvZykuCisgICAgLy8g
SXQgaXMgYWxzbyB1c2VkIHdoZW4gZG9pbmcgYW4gZWFybHkgcmV0dXJuIGZyb20gYW4gaW5saW5l
ZCBjYWxsZWU6IGl0IGlzIGVhc2llciB0byBmaXggdGhlIGJ5dGVjb2RlIGluZGV4IGxhdGVyIG9u
IGlmIG5lZWRlZAorICAgIC8vIHRoYW4gdG8gbW92ZSB0aGUgcmlnaHQgaW5kZXggYWxsIHRoZSB3
YXkgdG8gdGhlIHRyZWF0bWVudCBvZiBvcF9yZXQuCisgICAgQmFzaWNCbG9jayogYWxsb2NhdGVU
YXJnZXRhYmxlQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgQmFzaWNCbG9jayog
YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOworICAgIC8vIEFuIHVudGFyZ2V0YWJsZSBibG9j
ayBjYW4gYmUgZ2l2ZW4gYSBieXRlY29kZUluZGV4IHRvIGJlIGxhdGVyIG1hbmFnZWQgYnkgbGlu
a0Jsb2NrLCBidXQgb25seSBvbmNlLCBhbmQgaXQgY2FuIG5ldmVyIGdvIGluIHRoZSBvdGhlciBk
aXJlY3Rpb24KKyAgICB2b2lkIG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayosIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIHZvaWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsKKyAg
ICB2b2lkIGFkZEp1bXBUbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAvLyBIYW5kbGUg
Y2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRy
aW5zaWNzLgogICAgIGVudW0gVGVybWluYWxpdHkgeyBUZXJtaW5hbCwgTm9uVGVybWluYWwgfTsK
ICAgICBUZXJtaW5hbGl0eSBoYW5kbGVDYWxsKAogICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlw
ZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCi0g
ICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBDYWxsTGlua1N0YXR1cywKKyAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzLAog
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBUZXJtaW5hbGl0eSBoYW5k
bGVDYWxsKAotICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUsIHVuc2ln
bmVkIGluc3RydWN0aW9uU2l6ZSwKLSAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ0Nv
dW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKLSAgICBUZXJtaW5hbGl0
eSBoYW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSwgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9m
ZnNldCk7CiAgICAgVGVybWluYWxpdHkgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVU
eXBlIG9wLCBDYWxsTW9kZSk7CiAgICAgVGVybWluYWxpdHkgaGFuZGxlVmFyYXJnc0NhbGwoSW5z
dHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUpOwogICAgIHZvaWQgZW1pdEZ1bmN0
aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc0FyZ3VtbnQpOwpAQCAtMjIxLDExICsyMjcsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25l
ZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgSW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90
IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEg
Y29zdCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3Vj
Y2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRs
ZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3Qg
Q2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlz
QXJndW1lbnQsIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJn
dW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5l
eHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVy
RG9lc05vcm1hbExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGVja3NGdW5jdG9yPgotICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4
dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hl
Y2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwo
Tm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVk
IG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgotICAgIHZv
aWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENh
bGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJM
aW5rYWJpbGl0eSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB2b2lk
IGlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxs
VmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgY29uc3QgQ2hl
Y2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9j
ayhJbmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhl
IGdpdmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQg
aW5saW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBS
ZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBj
YWxsLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CkBAIC0zMDEsNyArMzA2
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwogICAg
IC8vIExpbmsgYmxvY2sgc3VjY2Vzc29ycy4KICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2Nr
KiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKLSAgICB2b2lkIGxpbmtC
bG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJh
c2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxl
VGFyZ2V0cyk7CiAgICAgCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewpAQCAtNzUyLDggKzc1Nyw3IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlY29kZVBhcnNpbmcoKSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgYXBwZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BO
YW1lKG5vZGUtPm9wKCkpLCAiXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgICAgICAgYXBw
ZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCAiXG4iKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChub2RlKTsKICAgICAgICAgaWYgKGNsb2JiZXJz
RXhpdFN0YXRlKG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsK
QEAgLTExMTUsMzMgKzExMTksMjQgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPHVuc2lnbmVk
PiBtX2NvbnN0YW50QnVmZmVyUmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9zd2l0
Y2hSZW1hcDsKICAgICAgICAgCi0gICAgICAgIC8vIEJsb2NrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMg
Y29kZSBibG9jaywgd2hpY2ggbmVlZCBzdWNjZXNzb3IgbGlua2luZy4KLSAgICAgICAgLy8gTWF5
IGluY2x1ZGUgdXAgdG8gb25lIGJhc2ljIGJsb2NrIHRoYXQgaW5jbHVkZXMgdGhlIGNvbnRpbnVh
dGlvbiBhZnRlcgotICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW4gdGhlIGNhbGxlci4gVGhlc2Ug
bXVzdCBiZSBhcHBlbmRlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5Ci0gICAgICAgIC8vIGFyZSBj
cmVhdGVkLCBidXQgdGhlaXIgYnl0ZWNvZGVCZWdpbiB2YWx1ZXMgbmVlZCBub3QgYmUgaW4gb3Jk
ZXIgYXMgdGhleQotICAgICAgICAvLyBhcmUgaWdub3JlZC4KLSAgICAgICAgVmVjdG9yPFVubGlu
a2VkQmxvY2s+IG1fdW5saW5rZWRCbG9ja3M7CisgICAgICAgIC8vIFRoZXNlIGFyZSBibG9ja3Mg
d2hvc2UgdGVybWluYWwgaXMgYSBKdW1wLCBCcmFuY2ggb3IgU3dpdGNoLCBhbmQgd2hvc2UgdGFy
Z2V0IGhhcyBub3QgeWV0IGJlZW4gbGlua2VkLgorICAgICAgICAvLyBUaGVpciB0ZXJtaW5hbCBp
bnN0ZWFkIHJlZmVycyB0byBhIGJ5dGVjb2RlIGluZGV4LCBhbmQgdGhlIHJpZ2h0IEJCIGNhbiBi
ZSBmb3VuZCBpbiBtX2Jsb2NrTGlua2luZ1RhcmdldHMuCisgICAgICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gbV91bmxpbmtlZEJsb2NrczsKICAgICAgICAgCiAgICAgICAgIC8vIFBvdGVudGlhbCBi
bG9jayBsaW5raW5nIHRhcmdldHMuIE11c3QgYmUgc29ydGVkIGJ5IGJ5dGVjb2RlQmVnaW4sIGFu
ZAogICAgICAgICAvLyBjYW5ub3QgaGF2ZSB0d28gYmxvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSBi
eXRlY29kZUJlZ2luLgogICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tMaW5raW5n
VGFyZ2V0czsKIAotICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMg
c3BsaXQgaW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCi0gICAgICAgIC8vIHRoZSBoZWFkIG9m
IHRoZSBjYWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRo
ZQotICAgICAgICAvLyBtX3VubGlua2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJv
dW5kOiB0aGVyZSdzIG5vIHdheSBmb3IKLSAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlu
a2VkQmxvY2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgIEJhc2ljQmxv
Y2sqIG1fY2FsbHNpdGVCbG9ja0hlYWQ7Ci0gICAgICAgIAotICAgICAgICAvLyBEb2VzIHRoZSBj
YWxsc2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8gVGhpcyBpcyB0eXBpY2FsbHkgdHJ1ZQot
ICAgICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3IgdGhlIG1hY2hpbmUgY29kZSBibG9jaydz
IGlubGluZSBzdGFjayBlbnRyeQotICAgICAgICAvLyAoc2luY2UgdGhhdCBvbmUgaXMgbm90IGlu
bGluZWQpIGFuZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW5saW5lIGNhbGxlZQotICAgICAgICAvLyBk
aWQgdGhlIGxpbmtpbmcgZm9yIHVzLgotICAgICAgICBib29sIG1fY2FsbHNpdGVCbG9ja0hlYWRO
ZWVkc0xpbmtpbmc7Ci0gICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNldCBieSBvcF9lbnRl
ciBpbiBwYXJzZUJsb2NrKCksIGFuZCBpbmRpY2F0ZXMgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBm
dW5jdGlvbi4KKyAgICAgICAgQmFzaWNCbG9jayogbV9lbnRyeUJsb2NrOworCisgICAgICAgIC8v
IE9wdGlvbmFsOiBhIGNvbnRpbnVhdGlvbiBibG9jayBmb3IgcmV0dXJucyB0byBqdW1wIHRvLiBJ
dCBpcyBzZXQgYnkgZWFybHkgcmV0dXJucyBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAgICAgICAg
QmFzaWNCbG9jayogbV9jb250aW51YXRpb25CbG9jazsKKwogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9yZXR1cm5WYWx1ZTsKICAgICAgICAgCiAgICAgICAgIC8vIFNwZWN1bGF0aW9ucyBhYm91
dCB2YXJpYWJsZSB0eXBlcyBjb2xsZWN0ZWQgZnJvbSB0aGUgcHJvZmlsZWQgY29kZSBibG9jaywK
LSAgICAgICAgLy8gd2hpY2ggYXJlIGJhc2VkIG9uIE9TUiBleGl0IHByb2ZpbGVzIHRoYXQgcGFz
dCBERkcgY29tcGlsYXRpbnMgb2YgdGhpcworICAgICAgICAvLyB3aGljaCBhcmUgYmFzZWQgb24g
T1NSIGV4aXQgcHJvZmlsZXMgdGhhdCBwYXN0IERGRyBjb21waWxhdGlvbnMgb2YgdGhpcwogICAg
ICAgICAvLyBjb2RlIGJsb2NrIGhhZCBnYXRoZXJlZC4KICAgICAgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVQYXJzZXIgbV9sYXp5T3BlcmFuZHM7CiAgICAgICAgIApAQCAtMTE0OSwxMyArMTE0
NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIFN0dWJJbmZvTWFwIG1fc3R1YkluZm9zOwogICAgICAg
ICBCeVZhbEluZm9NYXAgbV9ieVZhbEluZm9zOwogICAgICAgICAKLSAgICAgICAgLy8gRGlkIHdl
IHNlZSBhbnkgcmV0dXJucz8gV2UgbmVlZCB0byBoYW5kbGUgdGhlICh1bmNvbW1vbiBidXQgbmVj
ZXNzYXJ5KQotICAgICAgICAvLyBjYXNlIHdoZXJlIGEgcHJvY2VkdXJlIHRoYXQgZG9lcyBub3Qg
cmV0dXJuIHdhcyBpbmxpbmVkLgotICAgICAgICBib29sIG1fZGlkUmV0dXJuOwotICAgICAgICAK
LSAgICAgICAgLy8gRGlkIHdlIGhhdmUgYW55IGVhcmx5IHJldHVybnM/Ci0gICAgICAgIGJvb2wg
bV9kaWRFYXJseVJldHVybjsKLSAgICAgICAgCiAgICAgICAgIC8vIFBvaW50ZXJzIHRvIHRoZSBh
cmd1bWVudCBwb3NpdGlvbiB0cmFja2VycyBmb3IgdGhpcyBzbGljZSBvZiBjb2RlLgogICAgICAg
ICBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAgICAgICAg
IApAQCAtMTE2NSw3ICsxMTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEJ5dGVDb2RlUGFy
c2VyKiwKICAgICAgICAgICAgIENvZGVCbG9jayosCiAgICAgICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVhZCwK
ICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xv
c3VyZSBjYWxsLgogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0xMjAz
LDcgKzExOTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAg
ICAgICAgICAgLCBtX3NldE1vZGUoc2V0TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgUEFS
U0VSX0FTU0VSVChvcGVyYW5kLmlzVmFsaWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChvcGVyYW5kLmlzVmFsaWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE5vZGUq
IGV4ZWN1dGUoQnl0ZUNvZGVQYXJzZXIqIHBhcnNlcikKQEAgLTEyMjQsNjcgKzEyMTEsNzIgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faGFzRGVidWdnZXJFbmFibGVkOwogfTsKIAotLy8gVGhlIGlk
aW9tOgotLy8gICAgIGlmICh0cnVlKSB7IC4uLjsgZ290byBsYWJlbDsgfSBlbHNlIGxhYmVsOiBj
b250aW51ZQotLy8gQWxsb3dzIHVzaW5nIE5FWFRfT1BDT0RFIGFzIGEgc3RhdGVtZW50LCBldmVu
IGluIHVuYnJhY2VkIGlmK2Vsc2UsIHdoaWxlIGNvbnRhaW5pbmcgYSBgY29udGludWVgLgotLy8g
VGhlIG1vcmUgY29tbW9uIGlkaW9tOgotLy8gICAgIGRvIHsgLi4uOyB9IHdoaWxlIChmYWxzZSkK
LS8vIERvZXNuJ3QgYWxsb3cgdXNpbmcgYGNvbnRpbnVlYC4KLSNkZWZpbmUgTkVYVF9PUENPREUo
bmFtZSkgXAotICAgIGlmICh0cnVlKSB7IFwKLSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BD
T0RFX0xFTkdUSChuYW1lKTsgXAotICAgICAgICBnb3RvIFdURl9DT05DQVQoTkVYVF9PUENPREVf
LCBfX0xJTkVfXyk7IC8qIE5lZWQgYSB1bmlxdWUgbGFiZWw6IHVzYWJsZSBtb3JlIHRoYW4gb25j
ZSBwZXIgZnVuY3Rpb24uICovIFwKLSAgICB9IGVsc2UgXAotICAgIFdURl9DT05DQVQoTkVYVF9P
UENPREVfLCBfX0xJTkVfXyk6IFwKLSAgICAgICAgY29udGludWUKK0Jhc2ljQmxvY2sqIEJ5dGVD
b2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayh1bnNpZ25lZCBieXRlY29kZUluZGV4
KQoreworICAgIEFTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKKyAgICBSZWY8QmFz
aWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwg
bV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgQmFzaWNCbG9jayogYmxvY2tQ
dHIgPSBibG9jay5wdHIoKTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMuYXBwZW5kKGJsb2NrUHRyKTsKKyAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUo
YmxvY2spKTsKKyAgICByZXR1cm4gYmxvY2tQdHI7Cit9CiAKLS8vIENoYWluIGV4cHJlc3Npb25z
IHdpdGggY29tbWEtb3BlcmF0b3Igc28gTEFTVF9PUENPREUgY2FuIGJlIHVzZWQgYXMgYSBzdGF0
ZW1lbnQuCi0jZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKLSAgICByZXR1cm4gXAotICAgICAg
ICBtX2N1cnJlbnRJbmRleCArPSBPUENPREVfTEVOR1RIKG5hbWUpLCBcCi0gICAgICAgIG1fZXhp
dE9LID0gZmFsc2UsIFwKLSAgICAgICAgc2hvdWxkQ29udGludWVQYXJzaW5nCitCYXNpY0Jsb2Nr
KiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCit7CisgICAgUmVm
PEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBCYXNpY0Jsb2NrKiBibG9ja1B0
ciA9IGJsb2NrLnB0cigpOworICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykp
OworICAgIHJldHVybiBibG9ja1B0cjsKK30KIAotQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3As
IENhbGxNb2RlIGNhbGxNb2RlKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bWFrZUJsb2NrVGFyZ2V0
YWJsZShCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBB
U1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVj
dCkpOwotICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgo
b3BfdGFpbF9jYWxsKSk7Ci0gICAgcmV0dXJuIGhhbmRsZUNhbGwoCi0gICAgICAgIHBjWzFdLnUu
b3BlcmFuZCwgb3AsIGNhbGxNb2RlLCBPUENPREVfTEVOR1RIKG9wX2NhbGwpLAotICAgICAgICBw
Y1syXS51Lm9wZXJhbmQsIHBjWzNdLnUub3BlcmFuZCwgLXBjWzRdLnUub3BlcmFuZCk7CisgICAg
QVNTRVJUKGJsb2NrLT5ieXRlY29kZUJlZ2luID09IFVJTlRfTUFYKTsKKyAgICBibG9jay0+Ynl0
ZWNvZGVCZWdpbiA9IGJ5dGVjb2RlSW5kZXg7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9j
a0xpbmtpbmdUYXJnZXRzLmFwcGVuZChibG9jayk7CiB9CiAKLUJ5dGVDb2RlUGFyc2VyOjpUZXJt
aW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAgICBpbnQgcmVzdWx0LCBOb2Rl
VHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKLSAg
ICBpbnQgY2FsbGVlLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGludCByZWdpc3Rl
ck9mZnNldCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFkZEp1bXBUbyhCYXNpY0Jsb2NrKiBibG9j
aykKIHsKLSAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUp
KTsKKyAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKKyAgICBOb2RlKiBq
dW1wTm9kZSA9IGFkZFRvR3JhcGgoSnVtcCk7CisgICAganVtcE5vZGUtPnRhcmdldEJsb2NrKCkg
PSBibG9jazsKKyAgICBtX2N1cnJlbnRCbG9jay0+ZGlkTGluaygpOworfQorCit2b2lkIEJ5dGVD
b2RlUGFyc2VyOjphZGRKdW1wVG8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKKyAgICBhZGRUb0dyYXBoKEp1bXAsIE9w
SW5mbyhieXRlY29kZUluZGV4KSk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworfQorCitCeXRlQ29kZVBhcnNlcjo6VGVybWlu
YWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlw
ZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUpCit7CisgICAgc3RhdGljX2Fzc2VydChPUENPREVfTEVO
R1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSwKKyAgICAgICAgIm9w
X2NhbGwsIG9wX3RhaWxfY2FsbCBhbmQgb3BfY29uc3RydWN0IHNob3VsZCBhbHdheXMgaGF2ZSB0
aGUgc2FtZSBsZW5ndGgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCkgPT0gT1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGwpLAorICAgICAgICAib3BfY2FsbCwgb3Bf
dGFpbF9jYWxsIGFuZCBvcF9jb25zdHJ1Y3Qgc2hvdWxkIGFsd2F5cyBoYXZlIHRoZSBzYW1lIGxl
bmd0aCIpOwogICAgIAorICAgIGludCByZXN1bHQgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgTm9k
ZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIocGNbMl0udS5vcGVyYW5kKSk7Cisg
ICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gcGNbM10udS5vcGVyYW5kOworICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1wY1s0XS51Lm9wZXJhbmQ7CisKICAgICBDYWxsTGlua1N0
YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCks
CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4
dE1hcCk7Ci0gICAgCi0gICAgcmV0dXJuIGhhbmRsZUNhbGwoCi0gICAgICAgIHJlc3VsdCwgb3As
IGNhbGxNb2RlLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCi0gICAgICAgIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMpOwotfQot
ICAgIAotQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
YWxsKAotICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSwgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25TaXplLAotICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAotICAgIENhbGxMaW5rU3Rh
dHVzIGNhbGxMaW5rU3RhdHVzKQotewotICAgIHJldHVybiBoYW5kbGVDYWxsKAotICAgICAgICBy
ZXN1bHQsIG9wLCBJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3IoY2FsbE1vZGUpLCBpbnN0cnVjdGlv
blNpemUsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgICAgICBy
ZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMsIGdldFByZWRpY3Rpb24oKSk7CisKKyAgICBJ
bmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCA9IElubGluZUNhbGxGcmFtZTo6a2luZEZvcihjYWxs
TW9kZSk7CisKKyAgICByZXR1cm4gaGFuZGxlQ2FsbChyZXN1bHQsIG9wLCBraW5kLCBPUENPREVf
TEVOR1RIKG9wX2NhbGwpLCBjYWxsVGFyZ2V0LAorICAgICAgICBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQcmVkaWN0aW9uKCkp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5KENhbGxMaW5rU3Rh
dHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZSogY2FsbFRhcmdldCkKIHsKLSAgICBpZiAoY2FsbFRh
cmdldC0+aXNDZWxsQ29uc3RhbnQoKSkgeworICAgIGlmIChjYWxsVGFyZ2V0LT5pc0NlbGxDb25z
dGFudCgpKQogICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxlZShD
YWxsVmFyaWFudChjYWxsVGFyZ2V0LT5hc0NlbGwoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQogfQogCiBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNhbGwoCkBAIC0xMjk2LDM5ICsxMjg4LDM3IEBAIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0
eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKIAogICAgIHJlZmluZVN0YXRpY2FsbHkoY2Fs
bExpbmtTdGF0dXMsIGNhbGxUYXJnZXQpOwogICAgIAotICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
REZHQnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjYWxs
IGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsK
KyAgICBWRVJCT1NFX0xPRygiICAgIEhhbmRsaW5nIGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmln
aW4oKSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIpOwogICAgIAotICAgIGlmICghY2FsbExp
bmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewotICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0
ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1
ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKLSAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0
aW1pemUgdGhlbS4KKyAgICAvLyBXZSBmaXJzdCBjaGVjayB0aGF0IHdlIGhhdmUgcHJvZmlsaW5n
IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY2FsbCwgYW5kIHRoYXQgaXQgZGlkIG5vdCBiZWhhdmUg
dG9vIHBvbHltb3JwaGljYWxseS4KKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50ID0gdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogCi0gICAgICAgIE5vZGUqIGNhbGxO
b2RlID0gYWRkQ2FsbChyZXN1bHQsIG9wLCBudWxscHRyLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwotICAgICAgICBp
ZiAoY2FsbE5vZGUtPm9wKCkgPT0gVGFpbENhbGwpCi0gICAgICAgICAgICByZXR1cm4gVGVybWlu
YWw7Ci0gICAgICAgIEFTU0VSVChjYWxsTm9kZS0+b3AoKSAhPSBUYWlsQ2FsbFZhcmFyZ3MgJiYg
Y2FsbE5vZGUtPm9wKCkgIT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7Ci0gICAgICAgIHJldHVy
biBOb25UZXJtaW5hbDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IG1f
Y3VycmVudEluZGV4ICsgaW5zdHJ1Y3Rpb25TaXplOwotICAgIAotICAgIGlmIChoYW5kbGVJbmxp
bmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBr
aW5kLCBwcmVkaWN0aW9uKSkgewotICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxh
dGlvbigpKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5l
ZENhbGwoKTsKLSAgICAgICAgcmV0dXJuIE5vblRlcm1pbmFsOworICAgICAgICAvLyBJbmxpbmlu
ZyBpcyBxdWl0ZSBjb21wbGV4LCBhbmQgbWFuYWdlZCBieSBhIHBpcGVsaW5lIG9mIGZ1bmN0aW9u
czoKKyAgICAgICAgLy8gaGFuZGxlKFZhcmFyZ3MpQ2FsbCAtPiBoYW5kbGVJbmxpbmluZyAtPiBh
dHRlbXB0VG9JbmxpbmVDYWxsIC0+IGlubGluZUNhbGwKKyAgICAgICAgLy8gLSBoYW5kbGVDYWxs
IGFuZCBoYW5kbGVWYXJhcmdzQ2FsbCBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgbm8gaW5saW5p
bmcgaGFwcGVucywgYW5kIGRvIHNvbWUgc2FuaXR5IGNoZWNrcyBvbiB0aGVpciBhcmd1bWVudHMK
KyAgICAgICAgLy8gLSBoYW5kbGVJbmxpbmluZyBjaGVja3Mgd2hldGhlciB0aGUgY2FsbCBpcyBw
b2x5bW9ycGhpYywgYW5kIGlmIHNvIGlzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBzd2l0
Y2ggb24gdGhlIGNhbGxlZQorICAgICAgICAvLyAtIGF0dGVtcHRUb0lubGluZUNhbGwgZGVhbHMg
d2l0aCBzcGVjaWFsIGNhc2VzIHN1Y2ggYXMgaW50cmluc2ljcywgaXQgYWxzbyBjaGVja3MgdGhl
IGlubGluaW5nIGhldXJpc3RpYyAodGhyb3VnaCBpbmxpbmluZ0Nvc3QpCisgICAgICAgIC8vIC0g
aW5saW5lQ2FsbCBmaW5hbGx5IGRvZXMgdGhlIGFjdHVhbCBpbmxpbmluZywgYWZ0ZXIgYSBjb21w
bGljYXRlZCBwcm9jZWR1cmUgdG8gc2V0dXAgdGhlIHN0YWNrIGNvcnJlY3RseQorICAgICAgICB1
bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBpbnN0cnVjdGlvblNpemU7Cisg
ICAgICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3Rh
dHVzLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgMCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0
aW9uKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkp
CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2Fs
bCgpOworICAgICAgICAgICAgcmV0dXJuIE5vblRlcm1pbmFsOworICAgICAgICB9CiAgICAgfQog
ICAgIAogICAgIE5vZGUqIGNhbGxOb2RlID0gYWRkQ2FsbChyZXN1bHQsIG9wLCBudWxscHRyLCBj
YWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHBy
ZWRpY3Rpb24pOwotICAgIGlmIChjYWxsTm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkKLSAgICAgICAg
cmV0dXJuIFRlcm1pbmFsOwogICAgIEFTU0VSVChjYWxsTm9kZS0+b3AoKSAhPSBUYWlsQ2FsbFZh
cmFyZ3MgJiYgY2FsbE5vZGUtPm9wKCkgIT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7Ci0gICAg
cmV0dXJuIE5vblRlcm1pbmFsOworICAgIHJldHVybiBjYWxsTm9kZS0+b3AoKSA9PSBUYWlsQ2Fs
bCA/IFRlcm1pbmFsIDogTm9uVGVybWluYWw7CiB9CiAKIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5h
bGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBO
b2RlVHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7Ci0gICAgQVNTRVJUKE9QQ09ERV9MRU5H
VEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdz
KSk7Ci0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVf
TEVOR1RIKG9wX3RhaWxfY2FsbF92YXJhcmdzKSk7CisgICAgc3RhdGljX2Fzc2VydChPUENPREVf
TEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFy
YXJncyksCisgICAgICAgICJvcF9jYWxsX3ZhcmFyZ3MsIG9wX3RhaWxfY2FsbF92YXJhcmdzIGFu
ZCBvcF9jb25zdHJ1Y3RfdmFyYXJncyBzaG91bGQgYWx3YXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3Ro
Iik7CisgICAgc3RhdGljX2Fzc2VydChPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0g
T1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGxfdmFyYXJncyksCisgICAgICAgICJvcF9jYWxsX3Zh
cmFyZ3MsIG9wX3RhaWxfY2FsbF92YXJhcmdzIGFuZCBvcF9jb25zdHJ1Y3RfdmFyYXJncyBzaG91
bGQgYWx3YXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7CiAKICAgICBpbnQgcmVzdWx0ID0gcGNb
MV0udS5vcGVyYW5kOwogICAgIGludCBjYWxsZWUgPSBwY1syXS51Lm9wZXJhbmQ7CkBAIC0xMzQ2
LDggKzEzMzYsNyBAQCBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTgogICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOwogICAgIHJlZmluZVN0
YXRpY2FsbHkoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXQpOwogICAgIAotICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgIGRhdGFMb2coIiAgICBW
YXJhcmdzIGNhbGwgbGluayBzdGF0dXMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwg
Y2FsbExpbmtTdGF0dXMsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgVmFyYXJncyBjYWxs
IGxpbmsgc3RhdHVzIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3Rh
dHVzLCAiXG4iKTsKICAgICAKICAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKQog
ICAgICAgICAmJiBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3Rh
dHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSwgVmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cyksIGZpcnN0VmFyQXJnT2Zmc2V0LCAwLCBtX2N1cnJlbnRJbmRleCArIE9Q
Q09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgb3AsIElubGluZUNhbGxGcmFtZTo6dmFyYXJn
c0tpbmRGb3IoY2FsbE1vZGUpLCBwcmVkaWN0aW9uKSkgewpAQCAtMTQyNiwxOSArMTQxNSwxNiBA
QCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50IGNhbGxl
ZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogewogICAgIENhbGxNb2RlIGNhbGxNb2RlID0gSW5s
aW5lQ2FsbEZyYW1lOjpjYWxsTW9kZUZvcihraW5kKTsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IHNwZWNpYWxpemF0aW9uS2luZEZvcihjYWxsTW9kZSk7
Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvbnNpZGVyaW5nIGlubGluaW5nICIsIGNhbGxlZSwgIiBpbnRvICIsIGN1cnJlbnRD
b2RlT3JpZ2luKCksICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCJDb25zaWRlcmluZyBpbmxpbmlu
ZyAiLCBjYWxsZWUsICIgaW50byAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKICAgICAK
ICAgICBpZiAobV9oYXNEZWJ1Z2dlckVuYWJsZWQpIHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2Rl
UGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGlu
ZyBiZWNhdXNlIHRoZSBkZWJ1Z2dlciBpcyBpbiB1c2UuXG4iKTsKKyAgICAgICAgVkVSQk9TRV9M
T0coIiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlIGRlYnVnZ2VyIGlzIGluIHVzZS5cbiIpOwogICAg
ICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogICAgIGlmICghZXhlY3V0
YWJsZSkgewotICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVu
Y3Rpb24gZXhlY3V0YWJsZS5cbiIpOworICAgICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcg
YmVjYXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiBleGVjdXRhYmxlLlxuIik7CiAgICAgICAgIHJl
dHVybiBVSU5UX01BWDsKICAgICB9CiAgICAgCkBAIC0xNDUxLDMzICsxNDM3LDI4IEBAIHVuc2ln
bmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQg
YXJndW1lbnRDb3VudEluY2x1CiAgICAgLy8gaXQncyBhIHJhcmUgY2FzZSBiZWNhdXNlIHdlIGV4
cGVjdCB0aGF0IGFueSBob3QgY2FsbGVlcyB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxl
ZC4KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJs
b2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKCFjb2RlQmxvY2spIHsKLSAgICAg
ICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIG5vIGNvZGUgYmxvY2sgYXZhaWxhYmxlLlxuIik7
CisgICAgICAgIFZFUkJPU0VfTE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIG5vIGNvZGUgYmxvY2sg
YXZhaWxhYmxlLlxuIik7CiAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAKICAgICBp
ZiAoIU9wdGlvbnM6OnVzZUFyaXR5Rml4dXBJbmxpbmluZygpKSB7CiAgICAgICAgIGlmIChjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7Ci0g
ICAgICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIG9mIGFyaXR5IG1pc21hdGNo
LlxuIik7CisgICAgICAgICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcgYmVjYXVzZSBvZiBh
cml0eSBtaXNtYXRjaC5cbiIpOwogICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCA9IGlubGlu
ZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAogICAgICAgICBjb2RlQmxvY2ssIHNwZWNpYWxp
emF0aW9uS2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSk7Ci0gICAgaWYgKERGR0J5dGVDb2Rl
UGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiICAgIENhbGwgbW9k
ZTogIiwgY2FsbE1vZGUsICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgSXMgY2xvc3VyZSBj
YWxsOiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygi
ICAgIENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlMZXZlbCwgIlxuIik7Ci0gICAgICAg
IGRhdGFMb2coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rpb246ICIsIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3IoY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQpLCAiXG4iKTsKLSAgICAgICAgZGF0
YUxvZygiICAgIE1pZ2h0IGNvbXBpbGUgZnVuY3Rpb246ICIsIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yKGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5kKSwgIlxuIik7Ci0gICAgICAgIGRhdGFM
b2coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5nOiAiLCBpc1N1cHBvcnRlZEZvcklubGlu
aW5nKGNvZGVCbG9jayksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcg
Y2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lubGlu
aW5nQ2FuZGlkYXRlKCksICJcbiIpOwotICAgIH0KKyAgICBWRVJCT1NFX0xPRygiICAgIENhbGwg
bW9kZTogIiwgY2FsbE1vZGUsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgSXMgY2xvc3Vy
ZSBjYWxsOiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4iKTsKKyAgICBWRVJCT1NFX0xP
RygiICAgIENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlMZXZlbCwgIlxuIik7CisgICAg
VkVSQk9TRV9MT0coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rpb246ICIsIG1pZ2h0SW5saW5lRnVu
Y3Rpb25Gb3IoY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQpLCAiXG4iKTsKKyAgICBWRVJC
T1NFX0xPRygiICAgIE1pZ2h0IGNvbXBpbGUgZnVuY3Rpb246ICIsIG1pZ2h0Q29tcGlsZUZ1bmN0
aW9uRm9yKGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5kKSwgIlxuIik7CisgICAgVkVSQk9T
RV9MT0coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5nOiAiLCBpc1N1cHBvcnRlZEZvcklu
bGluaW5nKGNvZGVCbG9jayksICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgSXMgaW5saW5p
bmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lu
bGluaW5nQ2FuZGlkYXRlKCksICJcbiIpOwogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlM
ZXZlbCkpIHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBp
cyBub3QgaW5saW5lYWJsZS5cbiIpOworICAgICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcg
YmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGlubGluZWFibGUuXG4iKTsKICAgICAgICAgcmV0
dXJuIFVJTlRfTUFYOwogICAgIH0KICAgICAKQEAgLTE0ODYsOCArMTQ2Nyw3IEBAIHVuc2lnbmVk
IEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1CiAgICAgLy8gcHVycG9zZSBvZiB1bnNldHRpbmcgU0FCSS4KICAgICBp
ZiAoIWlzU21hbGxFbm91Z2hUb0lubGluZUNvZGVJbnRvKG1fY29kZUJsb2NrKSkgewogICAgICAg
ICBjb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlm
IChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHRvbyBsYXJnZS5cbiIpOworICAg
ICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHRvbyBs
YXJnZS5cbiIpOwogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgfQogICAgIApAQCAtMTUx
MCwzMCArMTQ5MCwyNyBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENh
bGxWYXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogICAgIGZvciAoSW5saW5l
U3RhY2tFbnRyeSogZW50cnkgPSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRy
eS0+bV9jYWxsZXIpIHsKICAgICAgICAgKytkZXB0aDsKICAgICAgICAgaWYgKGRlcHRoID49IE9w
dGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRoKCkpIHsKLSAgICAgICAgICAgIGlmIChERkdCeXRl
Q29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBGYWlsaW5nIGJlY2F1c2UgZGVwdGggZXhjZWVkZWQuXG4iKTsKKyAgICAgICAgICAgIFZFUkJP
U0VfTE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIGRlcHRoIGV4Y2VlZGVkLlxuIik7CiAgICAgICAg
ICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChl
bnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpIHsKICAgICAgICAgICAgICsrcmVjdXJz
aW9uOwogICAgICAgICAgICAgaWYgKHJlY3Vyc2lvbiA+PSBPcHRpb25zOjptYXhpbXVtSW5saW5p
bmdSZWN1cnNpb24oKSkgewotICAgICAgICAgICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlcklu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGlu
ZyBiZWNhdXNlIHJlY3Vyc2lvbiBkZXRlY3RlZC5cbiIpOworICAgICAgICAgICAgICAgIFZFUkJP
U0VfTE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIHJlY3Vyc2lvbiBkZXRlY3RlZC5cbiIpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZygiICAgIElubGluaW5nIHNob3VsZCBiZSBwb3NzaWJsZS5cbiIpOwor
ICAgIFZFUkJPU0VfTE9HKCIgICAgSW5saW5pbmcgc2hvdWxkIGJlIHBvc3NpYmxlLlxuIik7CiAg
ICAgCiAgICAgLy8gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gaW5saW5lLgogICAgIHJldHVybiBj
b2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hl
Y2tzRnVuY3Rvcj4KLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2Fs
bGVyTGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKK3ZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1
bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQga2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewog
ICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2Fs
bEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgCkBAIC0xNTc4LDggKzE1
NTUsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcgogICAgICAgICBjYWxsZWVWYXJpYWJsZS0+
bWVyZ2VTaG91bGROZXZlclVuYm94KHRydWUpOwogICAgIH0KIAotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Tm9kZSosIFZpcnR1YWxSZWdpc3Rlcj4+IGRlbGF5ZWRBcml0eVNldHM7Ci0KICAgICBpZiAo
YXJpdHlGaXh1cENvdW50KSB7CiAgICAgICAgIC8vIE5vdGU6IHdlIGRvIGFyaXR5IGZpeHVwIGlu
IHR3byBwaGFzZXM6CiAgICAgICAgIC8vIDEuIFdlIGdldCBhbGwgdGhlIHZhbHVlcyB3ZSBuZWVk
IGFuZCBNb3ZIaW50IHRoZW0gdG8gdGhlIGV4cGVjdGVkIGxvY2Fscy4KQEAgLTE2MzAsMTAgKzE2
MDUsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcgogICAgICAgICAvLyBvdXIgY2FsbGVlJ3Mg
ZnJhbWUuIFdlIGVtaXQgYW4gRXhpdE9LIGJlbG93IGZyb20gdGhlIGNhbGxlZSdzIENvZGVPcmln
aW4uCiAgICAgfQogCi0gICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAg
ICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5sYXN0QmxvY2soKSwgY2Fs
bGVlLmZ1bmN0aW9uKCksIHJlc3VsdFJlZywKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0
YWNrRW50cnkodGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxlZS5mdW5jdGlvbigpLCBy
ZXN1bHRSZWcsCiAgICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsKLSAgICAKKwogICAgIC8vIFRoaXMg
aXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICB1bnNpZ25l
ZCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OwogICAgIG1fY3VycmVudEluZGV4ID0gMDsKQEAg
LTE2NDksMTEgKzE2MjMsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXIKICAgICBpbmxpbmVW
YXJpYWJsZURhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gYXJndW1lbnRQb3NpdGlvblN0YXJ0
OwogICAgIGlubGluZVZhcmlhYmxlRGF0YS5jYWxsZWVWYXJpYWJsZSA9IDA7CiAgICAgCi0gICAg
UEFSU0VSX0FTU0VSVCgKKyAgICBSRUxFQVNFX0FTU0VSVCgKICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgPT0gY2FsbGVl
LmlzQ2xvc3VyZUNhbGwoKSk7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKLSAg
ICAgICAgUEFSU0VSX0FTU0VSVChjYWxsZWVWYXJpYWJsZSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxlZVZhcmlhYmxlKTsKICAgICAgICAgaW5saW5lVmFyaWFibGVEYXRhLmNhbGxlZVZh
cmlhYmxlID0gY2FsbGVlVmFyaWFibGU7CiAgICAgfQogICAgIApAQCAtMTY2NCwxMTcgKzE2Mzgs
MzQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXIKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9
IG9sZEluZGV4OwogICAgIG1fZXhpdE9LID0gZmFsc2U7CisKKyAgICBsaW5rQmxvY2tzKGlubGlu
ZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlu
a2luZ1RhcmdldHMpOwogICAgIAotICAgIC8vIElmIHRoZSBpbmxpbmVkIGNvZGUgY3JlYXRlZCBz
b21lIG5ldyBiYXNpYyBibG9ja3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRvIGRvLgotICAgIGlm
IChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5sYXN0Qmxv
Y2soKSkgewotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5s
aW5rZWRCbG9ja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9j
YWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZykKLSAgICAgICAgICAgIGxpbmtCbG9jayhpbmxp
bmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQsIGlubGluZVN0YWNrRW50cnkubV9ibG9j
a0xpbmtpbmdUYXJnZXRzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKGlubGlu
ZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZC0+aXNMaW5rZWQpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGNhbGxlckxpbmthYmlsaXR5ID09IENhbGxlckRvZXNOb3JtYWxMaW5raW5nKQot
ICAgICAgICAgICAgY2FuY2VsTGlua2luZ0ZvckJsb2NrKGlubGluZVN0YWNrRW50cnkubV9jYWxs
ZXIsIGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7Ci0gICAgICAgIAotICAg
ICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5l
U3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1RhcmdldHMpOwotICAgIH0gZWxzZQotICAgICAgICBB
U1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7Ci0gICAg
Ci0gICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5sYXN0QmxvY2soKTsKLSAgICAv
LyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1cm5zLCB0aGVuIHdlJ3Jl
IGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKLSAgICAvLyB0aGUgY2FsbGVyIHRvIGNvbnRpbnVl
IGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5vdy4KLSAgICBpZiAoIWlu
bGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVTdGFja0VudHJ5Lm1fZGlk
UmV0dXJuKSB7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5n
KCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQWxsb3dpbmcgcGFyc2luZyB0byBjb250aW51
ZSBpbiBsYXN0IGlubGluZWQgYmxvY2suXG4iKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChs
YXN0QmxvY2stPmlzRW1wdHkoKSB8fCAhbGFzdEJsb2NrLT50ZXJtaW5hbCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIElmIHdlIGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2Nr
IG5lZWRzIGxpbmtpbmcsIGJ1dCBpbiB0aGUKLSAgICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0
IG5lZWQgdG8gYmUgbGlua2VkIHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcgbGlua3MuCi0gICAg
ICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgc2V0IHRoZSBieXRlY29kZUJl
Z2luLiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IG1hdHRlcgotICAgICAgICAgICAgLy8gZm9yIHJl
bGVhc2UgYnVpbGRzIGJlY2F1c2UgdGhpcyBibG9jayB3aWxsIG5ldmVyIHNlcnZlIGFzIGEgcG90
ZW50aWFsIHRhcmdldAotICAgICAgICAgICAgLy8gaW4gdGhlIGxpbmtlcidzIGJpbmFyeSBzZWFy
Y2guCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVjb2RlUGFyc2luZygp
KQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgUmVwdXJwb3NpbmcgbGFzdCBibG9j
ayBmcm9tICIsIGxhc3RCbG9jay0+Ynl0ZWNvZGVCZWdpbiwgIiB0byAiLCBtX2N1cnJlbnRJbmRl
eCwgIlxuIik7Ci0gICAgICAgICAgICBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJl
bnRJbmRleDsKLSAgICAgICAgICAgIGlmIChjYWxsZXJMaW5rYWJpbGl0eSA9PSBDYWxsZXJEb2Vz
Tm9ybWFsTGlua2luZykgewotICAgICAgICAgICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlcklu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgdW5s
aW5rZWQgYmxvY2sgIiwgUmF3UG9pbnRlcihtX2dyYXBoLmxhc3RCbG9jaygpKSwgIiAob25lIHJl
dHVybilcbiIpOwotICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5t
X3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubGFzdEJsb2NrKCkp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9jaygpOwotICAgICAgICByZXR1cm47CisgICAgLy8gSWYg
dGhlIGNhbGxlZSByZXR1cm5lZCBhdCBsZWFzdCBvbmNlLCBpdCBwcmVwYXJlZCBhIGNvbnRpbnVh
dGlvbiBibG9jayBmb3IgdXMuCisgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jb250aW51YXRp
b25CbG9jaykKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBpbmxpbmVTdGFja0VudHJ5Lm1fY29u
dGludWF0aW9uQmxvY2s7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGFyZSBpbiB0aGUgY2Fz
ZSB3aGVyZSB0aGUgY2FsbGVlIG5ldmVyIHJldHVybnMgKGZvciBleGFtcGxlIGl0IGxvb3BzIGZv
cmV2ZXIpLgorICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGFsbCBibG9ja3Mgc2hvdWxkIGVuZCBp
biBhIHRlcm1pbmFsLgorICAgICAgICBBU1NFUlQobV9ncmFwaC5sYXN0QmxvY2soKS0+dGVybWlu
YWwoKSk7CisgICAgICAgIC8vIFdlIHRoZW4gYWxsb2NhdGUgYSBuZXcgYmxvY2sgdG8gY29udGlu
dWUgaW4uCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2so
bmV4dE9mZnNldCk7CiAgICAgfQorICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayk7CisgICAgQVNT
RVJUKCFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CiAKLSAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZURGR0J5dGVjb2RlUGFyc2luZygpKQotICAgICAgICBkYXRhTG9nKCIgICAgQ3JlYXRpbmcg
bmV3IGJsb2NrIGFmdGVyIGlubGluaW5nLlxuIik7Ci0KLSAgICAvLyBJZiB3ZSBnZXQgdG8gdGhp
cyBwb2ludCB0aGVuIGFsbCBibG9ja3MgbXVzdCBlbmQgaW4gc29tZSBzb3J0IG9mIHRlcm1pbmFs
cy4KLSAgICBBU1NFUlQobGFzdEJsb2NrLT50ZXJtaW5hbCgpKTsKLQotICAgIC8vIE5lZWQgdG8g
Y3JlYXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29udGludWF0aW9uIGF0IHRoZSBjYWxs
ZXIuCi0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2Nr
KG5leHRPZmZzZXQsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOwotCi0gICAgLy8g
TGluayB0aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMgYmxvY2sgd2UncmUgYWJvdXQgdG8g
Y3JlYXRlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5saW5lU3RhY2tFbnRyeS5tX3Vu
bGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRy
eS5tX3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2tUb0xpbmsgPSBpbmxpbmVT
dGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9jazsKLSAgICAgICAgQVNTRVJUKCFi
bG9ja1RvTGluay0+aXNMaW5rZWQpOwotICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tUb0xpbmst
PnRlcm1pbmFsKCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOwotICAgICAg
ICBBU1NFUlQoIW5vZGUtPnRhcmdldEJsb2NrKCkpOwotICAgICAgICBub2RlLT50YXJnZXRCbG9j
aygpID0gYmxvY2sucHRyKCk7Ci0gICAgICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJs
b2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nID0gZmFsc2U7Ci0gICAgICAgIGlmIChE
RkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
TWFya2luZyAiLCBSYXdQb2ludGVyKGJsb2NrVG9MaW5rKSwgIiBhcyBsaW5rZWQgKGp1bXBzIHRv
IHJldHVybilcbiIpOwotICAgICAgICBibG9ja1RvTGluay0+ZGlkTGluaygpOwotICAgIH0KLSAg
ICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLnB0cigpOwotICAgIEFTU0VSVChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHkoKSB8fCBt
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+
Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOwotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlcklu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBZGRpbmcgdW5saW5rZWQgYmxvY2sg
IiwgUmF3UG9pbnRlcihibG9jay5wdHIoKSksICIgKG1hbnkgcmV0dXJucylcbiIpOwotICAgIGlm
IChjYWxsZXJMaW5rYWJpbGl0eSA9PSBDYWxsZXJEb2VzTm9ybWFsTGlua2luZykgewotICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5s
aW5rZWRCbG9jayhibG9jay5wdHIoKSkpOwotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Nh
bGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChibG9jay5wdHIoKSk7Ci0gICAgfQot
ICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHByZXBhcmVUb1Bh
cnNlQmxvY2soKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6Y2FuY2VsTGlua2luZ0ZvckJs
b2NrKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnksIEJhc2ljQmxvY2sqIGJsb2Nr
KQotewotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBp
cyBub3Qgb3duZWQgYnkgdGhlIGNhbGxlci4KLSAgICBpZiAoIWlubGluZVN0YWNrRW50cnktPm1f
dW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEl0J3MgZGVmaW5pdGVseSBv
d25lZCBieSB0aGUgY2FsbGVyLCBiZWNhdXNlIHRoZSBjYWxsZXIgY3JlYXRlZCBuZXcgYmxvY2tz
LgotICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGlzIGFsbCBhZGRzIHVwLgotICAgICAgICBBU1NF
UlRfVU5VU0VEKGJsb2NrLCBpbmxpbmVTdGFja0VudHJ5LT5tX3VubGlua2VkQmxvY2tzLmxhc3Qo
KS5tX2Jsb2NrID09IGJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnktPm1f
dW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nKTsKLSAgICAgICAgaW5s
aW5lU3RhY2tFbnRyeS0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtp
bmcgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJdCdzIGRlZmluaXRlbHkgbm90
IG93bmVkIGJ5IHRoZSBjYWxsZXIuIFRlbGwgdGhlIGNhbGxlciB0aGF0IGhlIGRvZXMgbm90Ci0g
ICAgICAgIC8vIG5lZWQgdG8gbGluayBoaXMgY2FsbHNpdGUgYmxvY2sgaGVhZCwgYmVjYXVzZSB3
ZSBkaWQgaXQgZm9yIGhpbS4KLSAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnktPm1fY2Fs
bHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGJsb2Nr
LCBpbmxpbmVTdGFja0VudHJ5LT5tX2NhbGxzaXRlQmxvY2tIZWFkID09IGJsb2NrKTsKLSAgICAg
ICAgaW5saW5lU3RhY2tFbnRyeS0+bV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IGZh
bHNlOwotICAgIH0KLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KLWJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUs
IGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJ
bmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2Fi
aWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFu
Y2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKK2Jvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGlu
aW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1l
OjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgCiAgICAgaWYgKCFpbmxpbmluZ0Jh
bGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQ
YXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiICAgIENvbnNpZGVyaW5n
IGNhbGxlZSAiLCBjYWxsZWUsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgQ29uc2lkZXJp
bmcgY2FsbGVlICIsIGNhbGxlZSwgIlxuIik7CiAgICAgCiAgICAgLy8gSW50cmluc2ljcyBhbmQg
aW50ZXJuYWwgZnVuY3Rpb25zIGNhbiBvbmx5IGJlIGlubGluZWQgaWYgd2UncmUgbm90IGRvaW5n
IHZhcmFyZ3MuIFRoaXMgaXMgYmVjYXVzZQogICAgIC8vIHdlIGN1cnJlbnRseSBkb24ndCBoYXZl
IGFueSB3YXkgb2YgZ2V0dGluZyBwcm9maWxpbmcgaW5mb3JtYXRpb24gZm9yIGFyZ3VtZW50cyB0
byBub24tSlMgdmFyYXJncwpAQCAtMTc5Myw0MCArMTY4NCw0MCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0
T3BlcmFuZAogICAgIAogICAgICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoaGFuZGxlQ29uc3Rh
bnRJbnRlcm5hbEZ1bmN0aW9uKGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBmdW5jdGlv
biwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXph
dGlvbktpbmQsIHByZWRpY3Rpb24sIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgewotICAg
ICAgICAgICAgICAgIFBBUlNFUl9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAgICAgICAgICAgIGVtaXRB
cmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyk7CiAgICAgICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQQVJTRVJfQVNTRVJUKCFk
aWRJbnNlcnRDaGVja3MpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENo
ZWNrcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAKICAgICAg
ICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNhbGxlZS5pbnRyaW5zaWNGb3Ioc3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykgewogICAgICAg
ICAgICAgaWYgKGhhbmRsZUludHJpbnNpY0NhbGwoY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJh
bmQsIGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBwcmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKLSAgICAgICAgICAg
ICAgICBQQVJTRVJfQVNTRVJUKGRpZEluc2VydENoZWNrcyk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGNhbGxUYXJnZXROb2RlKTsKICAgICAgICAgICAgICAgICBlbWl0QXJndW1lbnRQ
aGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAg
ICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBQQVJTRVJfQVNTRVJUKCFkaWRJbnNl
cnRDaGVja3MpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNrcyk7
CiAgICAgICAgICAgICAvLyBXZSBtaWdodCBzdGlsbCB0cnkgdG8gaW5saW5lIHRoZSBJbnRyaW5z
aWMgYmVjYXVzZSBpdCBtaWdodCBiZSBhIGJ1aWx0aW4gSlMgZnVuY3Rpb24uCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoT3B0aW9uczo6dXNlRE9NSklUKCkpIHsKICAgICAgICAgICAgIGlmIChj
b25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gY2FsbGVlLnNpZ25hdHVyZUZvcihz
cGVjaWFsaXphdGlvbktpbmQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZURPTUpJVENh
bGwoY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIHNpZ25hdHVyZSwgcmVnaXN0ZXJPZmZz
ZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBpbnNlcnRDaGVja3NX
aXRoQWNjb3VudGluZykpIHsKLSAgICAgICAgICAgICAgICAgICAgUEFSU0VSX0FTU0VSVChkaWRJ
bnNlcnRDaGVja3MpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNl
cnRDaGVja3MpOwogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxU
YXJnZXROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgICAgICAg
ICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQQVJTRVJfQVNTRVJUKCFkaWRJ
bnNlcnRDaGVja3MpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRD
aGVja3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTgzNiw3ICsxNzI3
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgSW5zdHJ1Y3Rpb24qIHNhdmVkQ3VycmVudEluc3RydWN0aW9uID0gbV9jdXJyZW50SW5zdHJ1
Y3Rpb247Ci0gICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2Fs
bGVlLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZz
ZXQsIGtpbmQsIGNhbGxlckxpbmthYmlsaXR5LCBpbnNlcnRDaGVja3MpOworICAgIGlubGluZUNh
bGwoY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxlZSwgcmVnaXN0ZXJPZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBpbnNlcnRDaGVj
a3MpOwogICAgIGlubGluaW5nQmFsYW5jZSAtPSBteUlubGluaW5nQ29zdDsKICAgICBtX2N1cnJl
bnRJbnN0cnVjdGlvbiA9IHNhdmVkQ3VycmVudEluc3RydWN0aW9uOwogICAgIHJldHVybiB0cnVl
OwpAQCAtMTg0OCwyMiArMTczOSwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZygKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFy
Z3VtZW50c09mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgIHVuc2ln
bmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtp
bmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFy
c2VySW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgaW5saW5p
bmcuLi5cbiIpOwotICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4o
KSwgIlxuIik7Ci0gICAgfQorICAgIFZFUkJPU0VfTE9HKCJIYW5kbGluZyBpbmxpbmluZy4uLlxu
U3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIENvZGVTcGVjaWFsaXph
dGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXph
dGlvbktpbmRGb3Ioa2luZCk7CiAgICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5zaXplKCkp
IHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nLlxuIik7CisgICAgICAgIFZFUkJPU0Vf
TE9HKCJCYWlsaW5nIGlubGluaW5nLlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCiAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpCiAgICAgICAg
ICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6bWF4aW11bVZh
cmFyZ3NGb3JJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNh
dXNlIG9mIHZhcmFyZ3MuXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIkJhaWxpbmcgaW5saW5p
bmcgYmVjYXVzZSBvZiB2YXJhcmdzLlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgICAgIApAQCAtMTkwOCw3ICsxNzk0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCiAgICAgICAgIAogICAgICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lu
bGluZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2Fs
bExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAotICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5n
LCBwcmVkaWN0aW9uLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIHByZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2Us
IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQp
OwogCkBAIC0xOTgxLDExICsxODY3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2Up
IHsKLSAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBsZSkuXG4iKTsKLSAg
ICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsK
LSAgICAgICAgICAgIGRhdGFMb2coIlJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKLSAgICAgICAg
fQorICAgICAgICBWRVJCT1NFX0xPRygiRG9uZSBpbmxpbmluZyAoc2ltcGxlKS5cblN0YWNrOiAi
LCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG5SZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTk5NywxMCArMTg3OSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIC8vIGFsc28uCiAgICAgaWYg
KCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWND
YWxsSW5saW5pbmcoKQogICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5k
KSkgewotICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkgewot
ICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG4iKTsKLSAgICAg
ICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKLSAg
ICAgICAgfQorICAgICAgICBWRVJCT1NFX0xPRygiQmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG5T
dGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCkBAIC0yMDA5LDE1ICsxODg4LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKAogICAgIC8vIGl0IGhhcyBubyBpZGVhLgogICAgIGlmICghT3B0
aW9uczo6dXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmdGb3JOb25TdHViU3RhdHVzKCkKICAgICAg
ICAgJiYgIWNhbGxMaW5rU3RhdHVzLmlzQmFzZWRPblN0dWIoKSkgewotICAgICAgICBpZiAoREZH
Qnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygi
QmFpbGluZyBpbmxpbmluZyAobm9uLXN0dWIgcG9seW1vcnBoaXNtKS5cbiIpOwotICAgICAgICAg
ICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwotICAgICAg
ICB9CisgICAgICAgIFZFUkJPU0VfTE9HKCJCYWlsaW5nIGlubGluaW5nIChub24tc3R1YiBwb2x5
bW9ycGhpc20pLlxuU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIHVuc2lnbmVkIG9sZE9mZnNldCA9IG1f
Y3VycmVudEluZGV4OwotICAgIAorCiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVl
OwogICAgIGJvb2wgYWxsQXJlRGlyZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQg
aSA9IGNhbGxMaW5rU3RhdHVzLnNpemUoKTsgaS0tOykgewpAQCAtMjAyNiw3ICsxOTAwLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGFsbEFyZUNsb3N1cmVDYWxscyA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIE5v
ZGUqIHRoaW5nVG9Td2l0Y2hPbjsKICAgICBpZiAoYWxsQXJlRGlyZWN0Q2FsbHMpCiAgICAgICAg
IHRoaW5nVG9Td2l0Y2hPbiA9IGNhbGxUYXJnZXROb2RlOwpAQCAtMjAzNywzMCArMTkxMSwyMiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAgICAgLy8gd2hlcmUg
aXQgd291bGQgYmUgYmVuZWZpY2lhbC4gSXQgbWlnaHQgYmUgYmVzdCB0byBoYW5kbGUgdGhlc2Ug
Y2FzZXMgYXMgaWYgYWxsIGNhbGxzIHdlcmUKICAgICAgICAgLy8gY2xvc3VyZSBjYWxscy4KICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAyMAot
ICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAg
ICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAobWl4KS5cbiIpOwotICAgICAgICAgICAg
ZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwotICAgICAgICB9
CisgICAgICAgIFZFUkJPU0VfTE9HKCJCYWlsaW5nIGlubGluaW5nIChtaXgpLlxuU3RhY2s6ICIs
IGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIAotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKSB7Ci0g
ICAgICAgIGRhdGFMb2coIkRvaW5nIGhhcmQgaW5saW5pbmcuLi5cbiIpOwotICAgICAgICBkYXRh
TG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7Ci0gICAgfQotICAgIAor
CisgICAgVkVSQk9TRV9MT0coIkRvaW5nIGhhcmQgaW5saW5pbmcuLi5cblN0YWNrOiAiLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKKwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IHJlZ2lz
dGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7Ci0gICAgCisKICAgICAvLyBUaGlzIG1ha2VzIG1lIHdp
c2ggdGhhdCB3ZSB3ZXJlIGluIFNTQSBhbGwgdGhlIHRpbWUuIFdlIG5lZWQgdG8gcGljayBhIHZh
cmlhYmxlIGludG8gd2hpY2ggdG8KICAgICAvLyBzdG9yZSB0aGUgY2FsbGVlIHNvIHRoYXQgaXQg
d2lsbCBiZSBhY2Nlc3NpYmxlIHRvIGFsbCBvZiB0aGUgYmxvY2tzIHdlJ3JlIGFib3V0IHRvIGNy
ZWF0ZS4gV2UKICAgICAvLyBnZXQgYXdheSB3aXRoIGRvaW5nIGFuIGltbWVkaWF0ZS1zZXQgaGVy
ZSBiZWNhdXNlIHdlIHdvdWxkbid0IGhhdmUgcGVyZm9ybWVkIGFueSBzaWRlIGVmZmVjdHMKICAg
ICAvLyB5ZXQuCi0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgIGRhdGFMb2coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0ZXJPZmZzZXQpOworICAg
IFZFUkJPU0VfTE9HKCJSZWdpc3RlciBvZmZzZXQ6ICIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlUmVnKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKTsKICAgICBjYWxsZWVSZWcgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
Y2FsbGVlUmVnKTsKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZygiQ2FsbGVlIGlzIGdvaW5nIHRvIGJlICIsIGNhbGxlZVJlZywgIlxu
Iik7CisgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcs
ICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlh
dGVTZXRXaXRoRmx1c2gpOwogCiAgICAgLy8gSXQncyBPSyB0byBleGl0IHJpZ2h0IG5vdywgZXZl
biB0aG91Z2ggd2Ugc2V0IHNvbWUgbG9jYWxzLiBUaGF0J3MgYmVjYXVzZSB0aG9zZSBsb2NhbHMg
YXJlIG5vdApAQCAtMjA3MSwxMiArMTkzNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKAogICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEu
YWRkKCk7CiAgICAgZGF0YS5raW5kID0gU3dpdGNoQ2VsbDsKICAgICBhZGRUb0dyYXBoKFN3aXRj
aCwgT3BJbmZvKCZkYXRhKSwgdGhpbmdUb1N3aXRjaE9uKTsKLSAgICAKLSAgICBCYXNpY0Jsb2Nr
KiBvcmlnaW5CbG9jayA9IG1fY3VycmVudEJsb2NrOwotICAgIGlmIChERkdCeXRlQ29kZVBhcnNl
ckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJNYXJraW5nICIsIFJhd1BvaW50
ZXIob3JpZ2luQmxvY2spLCAiIGFzIGxpbmtlZCAob3JpZ2luIG9mIHBvbHkgaW5saW5lKVxuIik7
Ci0gICAgb3JpZ2luQmxvY2stPmRpZExpbmsoKTsKLSAgICBjYW5jZWxMaW5raW5nRm9yQmxvY2so
bV9pbmxpbmVTdGFja1RvcCwgb3JpZ2luQmxvY2spOworICAgIG1fY3VycmVudEJsb2NrLT5kaWRM
aW5rKCk7CiAgICAgCiAgICAgLy8gRWFjaCBpbmxpbmVkIGNhbGxlZSB3aWxsIGhhdmUgYSBsYW5k
aW5nIGJsb2NrIHRoYXQgaXQgcmV0dXJucyBhdC4gVGhleSBzaG91bGQgYWxsIGhhdmUganVtcHMK
ICAgICAvLyB0byB0aGUgY29udGludWF0aW9uIGJsb2NrLCB3aGljaCB3ZSBjcmVhdGUgbGFzdC4K
QEAgLTIwODUsMzEgKzE5NDYsMzAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoCiAgICAgLy8gV2UgbWF5IGZvcmNlIHRoaXMgdHJ1ZSBpZiB3ZSBnaXZlIHVwIG9uIGlubGlu
aW5nIGFueSBvZiB0aGUgZWRnZXMuCiAgICAgYm9vbCBjb3VsZFRha2VTbG93UGF0aCA9IGNhbGxM
aW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCk7CiAgICAgCi0gICAgaWYgKERGR0J5dGVDb2Rl
UGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFib3V0IHRvIGxvb3Ag
b3ZlciBmdW5jdGlvbnMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIi5cbiIpOwotICAgIAor
ICAgIFZFUkJPU0VfTE9HKCJBYm91dCB0byBsb29wIG92ZXIgZnVuY3Rpb25zIGF0ICIsIGN1cnJl
bnRDb2RlT3JpZ2luKCksICIuXG4iKTsKKworICAgIHVuc2lnbmVkIG9sZE9mZnNldCA9IG1fY3Vy
cmVudEluZGV4OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsTGlua1N0YXR1cy5z
aXplKCk7ICsraSkgewogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNldDsKLSAgICAg
ICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKFVJTlRf
TUFYLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBibG9jay5wdHIoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhibG9jay5j
b3B5UmVmKCkpOworICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsZWVFbnRyeUJsb2NrID0gYWxsb2Nh
dGVVbnRhcmdldGFibGVCbG9jaygpOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNhbGxlZUVu
dHJ5QmxvY2s7CiAgICAgICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAgICAgCiAgICAg
ICAgIE5vZGUqIG15Q2FsbFRhcmdldE5vZGUgPSBnZXREaXJlY3QoY2FsbGVlUmVnKTsKICAgICAg
ICAgCiAgICAgICAgIGJvb2wgaW5saW5pbmdSZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAog
ICAgICAgICAgICAgbXlDYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0
dXNbaV0sIHJlZ2lzdGVyT2Zmc2V0LAotICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24s
CisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2lu
ZCwgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSwgWyZdIChDb2RlQmxv
Y2sqKSB7IH0pOwogICAgICAgICAKICAgICAgICAgaWYgKCFpbmxpbmluZ1Jlc3VsdCkgewogICAg
ICAgICAgICAgLy8gVGhhdCBmYWlsZWQgc28gd2UgbGV0IHRoZSBibG9jayBkaWUuIE5vdGhpbmcg
aW50ZXJlc3Rpbmcgc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCB0bwogICAgICAgICAgICAgLy8gdGhl
IGJsb2NrLiBXZSBhbHNvIGdpdmUgdXAgb24gaW5saW5pbmcgYW55IG9mIHRoZSAobGVzcyBmcmVx
dWVudCkgY2FsbGVlcy4KLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBibG9j
ay5wdHIoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkgPT0g
YmxvY2sucHRyKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2tBbmRJdHNDb250ZW50
cyhibG9jay5wdHIoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrcy5sYXN0
KCkgPT0gbV9jdXJyZW50QmxvY2spOworICAgICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2tBbmRJ
dHNDb250ZW50cyhtX2N1cnJlbnRCbG9jayk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tz
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgVkVSQk9TRV9MT0coIklu
bGluaW5nIG9mIGEgcG9seSBjYWxsIGZhaWxlZCwgd2Ugd2lsbCBoYXZlIHRvIGdvIHRocm91Z2gg
YSBzbG93IHBhdGhcbiIpOworCiAgICAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0IGlubGluaW5n
IGZhaWxlZCBtZWFucyB3ZSBuZWVkIGEgc2xvdyBwYXRoLgogICAgICAgICAgICAgY291bGRUYWtl
U2xvd1BhdGggPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTIyLDQ2ICsxOTgyLDQ2
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICAgICAgQVNT
RVJUKGFsbEFyZUNsb3N1cmVDYWxscyk7CiAgICAgICAgICAgICB0aGluZ1RvQ2FzZU9uID0gY2Fs
bExpbmtTdGF0dXNbaV0uZXhlY3V0YWJsZSgpOwogICAgICAgICB9Ci0gICAgICAgIGRhdGEuY2Fz
ZXMuYXBwZW5kKFN3aXRjaENhc2UobV9ncmFwaC5mcmVlemUodGhpbmdUb0Nhc2VPbiksIGJsb2Nr
LnB0cigpKSk7CisgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9ncmFwaC5m
cmVlemUodGhpbmdUb0Nhc2VPbiksIGNhbGxlZUVudHJ5QmxvY2spKTsKICAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBuZXh0T2Zmc2V0OwogICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAg
IHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7IC8vIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgZm9y
IGludHJpbnNpY3MsIHNpbmNlIG5vcm1hbCBpbmxpbmVkIGNvZGUgd2lsbCBsZWF2ZSBhbiBlbXB0
eSBxdWV1ZS4KICAgICAgICAgaWYgKE5vZGUqIHRlcm1pbmFsID0gbV9jdXJyZW50QmxvY2stPnRl
cm1pbmFsKCkpCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJtaW5hbC0+
b3AoKSA9PSBUYWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwg
dGVybWluYWwtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzc5MjYgd2UgY2FuIGF2b2lkIHRoaXMgaW5kaXJlY3Rpb24gaW4gdGhlIGNhc2Ug
b2Ygbm9ybWFsIGlubGluZWQgY2FsbAorICAgICAgICAgICAgLy8gYnkgcGFzc2luZyB0aGUgY29u
dGludWF0aW9uIGJsb2NrIGFsbCB0aGUgd2F5IGludG8gaW5saW5lU3RhY2tFbnRyeS0+bV9jb250
aW51YXRpb25CbG9jayBpbiBpbmxpbmVDYWxsLgorICAgICAgICAgICAgLy8gSXQgaXMgbm90IHRy
aXZpYWwgYmVjYXVzZSBvZiB0aGUgU2V0TG9jYWxRdWV1ZSBtYW5hZ2VkIGJ5IGludHJpbnNpY3Mu
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXApOwogICAgICAgICAgICAgbGFuZGluZ0Jsb2Nr
cy5hcHBlbmQobV9jdXJyZW50QmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdCeXRl
Q29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTWFya2lu
ZyAiLCBSYXdQb2ludGVyKG1fY3VycmVudEJsb2NrKSwgIiBhcyBsaW5rZWQgKHRhaWwgb2YgcG9s
eSBpbmxpbmVlKVxuIik7CisgICAgICAgIFZFUkJPU0VfTE9HKCJNYXJraW5nICIsIFJhd1BvaW50
ZXIobV9jdXJyZW50QmxvY2spLCAiIGFzIGxpbmtlZCAodGFpbCBvZiBwb2x5IGlubGluZWUpXG4i
KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZExpbmsoKTsKIAotICAgICAgICBpZiAoREZH
Qnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkZp
bmlzaGVkIGlubGluaW5nICIsIGNhbGxMaW5rU3RhdHVzW2ldLCAiIGF0ICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICIuXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIkZpbmlzaGVkIGlubGluaW5n
ICIsIGNhbGxMaW5rU3RhdHVzW2ldLCAiIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4i
KTsKICAgICB9CiAgICAgCi0gICAgUmVmPEJhc2ljQmxvY2s+IHNsb3dQYXRoQmxvY2sgPSBhZG9w
dFJlZigKLSAgICAgICAgKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBtX251bUFyZ3VtZW50cywg
bV9udW1Mb2NhbHMsIDEpKTsKKyAgICBCYXNpY0Jsb2NrKiBzbG93UGF0aEJsb2NrID0gYWxsb2Nh
dGVVbnRhcmdldGFibGVCbG9jaygpOwogICAgIG1fY3VycmVudEluZGV4ID0gb2xkT2Zmc2V0Owog
ICAgIG1fZXhpdE9LID0gdHJ1ZTsKLSAgICBkYXRhLmZhbGxUaHJvdWdoID0gQnJhbmNoVGFyZ2V0
KHNsb3dQYXRoQmxvY2sucHRyKCkpOwotICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soc2xvd1BhdGhC
bG9jay5jb3B5UmVmKCkpOwotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJNYXJraW5nICIsIFJhd1BvaW50ZXIoc2xvd1BhdGhCbG9j
ay5wdHIoKSksICIgYXMgbGlua2VkIChzbG93IHBhdGggYmxvY2spXG4iKTsKKyAgICBkYXRhLmZh
bGxUaHJvdWdoID0gQnJhbmNoVGFyZ2V0KHNsb3dQYXRoQmxvY2spOworICAgIFZFUkJPU0VfTE9H
KCJNYXJraW5nICIsIFJhd1BvaW50ZXIoc2xvd1BhdGhCbG9jayksICIgYXMgbGlua2VkIChzbG93
IHBhdGggYmxvY2spXG4iKTsKICAgICBzbG93UGF0aEJsb2NrLT5kaWRMaW5rKCk7CiAgICAgcHJl
cGFyZVRvUGFyc2VCbG9jaygpOwotICAgIG1fY3VycmVudEJsb2NrID0gc2xvd1BhdGhCbG9jay5w
dHIoKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IHNsb3dQYXRoQmxvY2s7CiAgICAgTm9kZSogbXlD
YWxsVGFyZ2V0Tm9kZSA9IGdldERpcmVjdChjYWxsZWVSZWcpOwogICAgIGlmIChjb3VsZFRha2VT
bG93UGF0aCkgewogICAgICAgICBhZGRDYWxsKAogICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCwg
Y2FsbE9wLCBudWxscHRyLCBteUNhbGxUYXJnZXROb2RlLCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywKICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKKyAgICAgICAg
VkVSQk9TRV9MT0coIldlIGFkZGVkIGEgY2FsbCBpbiB0aGUgc2xvdyBwYXRoXG4iKTsKICAgICB9
IGVsc2UgewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrQmFkQ2VsbCk7CiAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgbXlDYWxsVGFyZ2V0Tm9kZSk7CiAgICAgICAgIGVtaXRBcmd1bWVudFBo
YW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
ICAgIAogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dy
YXBoKEJvdHRvbVZhbHVlKSk7CisgICAgICAgIFZFUkJPU0VfTE9HKCJjb3VsdFRha2VTbG93UGF0
aCB3YXMgd3JvbmdcbiIpOwogICAgIH0KIAogICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNl
dDsKQEAgLTIxNzMsMjYgKzIwMzMsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoCiAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCk7CiAgICAgICAgIGxhbmRpbmdCbG9ja3Mu
YXBwZW5kKG1fY3VycmVudEJsb2NrKTsKICAgICB9Ci0gICAgCi0gICAgUmVmPEJhc2ljQmxvY2s+
IGNvbnRpbnVhdGlvbkJsb2NrID0gYWRvcHRSZWYoCi0gICAgICAgICpuZXcgQmFzaWNCbG9jayhV
SU5UX01BWCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7Ci0gICAgbV9ncmFwaC5h
cHBlbmRCbG9jayhjb250aW51YXRpb25CbG9jay5jb3B5UmVmKCkpOwotICAgIGlmIChERkdCeXRl
Q29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBZGRpbmcgdW5s
aW5rZWQgYmxvY2sgIiwgUmF3UG9pbnRlcihjb250aW51YXRpb25CbG9jay5wdHIoKSksICIgKGNv
bnRpbnVhdGlvbilcbiIpOwotICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3Mu
YXBwZW5kKFVubGlua2VkQmxvY2soY29udGludWF0aW9uQmxvY2sucHRyKCkpKTsKKworICAgIC8v
IENvbnRpbnVhdGlvbiBibG9jaworICAgIG1fY3VycmVudEJsb2NrID0gYWxsb2NhdGVVbnRhcmdl
dGFibGVCbG9jaygpOworICAgIFZFUkJPU0VfTE9HKCJBZGRpbmcgdW50YXJnZXRhYmxlIGJsb2Nr
ICIsIFJhd1BvaW50ZXIobV9jdXJyZW50QmxvY2spLCAiIChjb250aW51YXRpb24pXG4iKTsKICAg
ICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b25CbG9jay5wdHIoKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsYW5kaW5nQmxvY2tz
LnNpemUoKTsgaS0tOykKLSAgICAgICAgbGFuZGluZ0Jsb2Nrc1tpXS0+dGVybWluYWwoKS0+dGFy
Z2V0QmxvY2soKSA9IGNvbnRpbnVhdGlvbkJsb2NrLnB0cigpOworCisgICAgZm9yIChhdXRvICZs
YW5kaW5nQmxvY2sgOiBsYW5kaW5nQmxvY2tzKSB7CisgICAgICAgIGxhbmRpbmdCbG9jay0+dGVy
bWluYWwoKS0+dGFyZ2V0QmxvY2soKSA9IG1fY3VycmVudEJsb2NrOworICAgICAgICBsYW5kaW5n
QmxvY2stPmRpZExpbmsoKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIldlIGxpbmtlZCAiLCBSYXdQ
b2ludGVyKG1fY3VycmVudEJsb2NrKSwgIiAobGFuZGluZyBibG9jaykgdG8gdGhlIGNvbnRpbnVh
dGlvbiBibG9jayBcbiIpOworICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9m
ZnNldDsKICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgCi0gICAgaWYgKERGR0J5dGVDb2RlUGFy
c2VySW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiRG9uZSBpbmxpbmluZyAo
aGFyZCkuXG4iKTsKLSAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksICJcbiIpOwotICAgIH0KKyAgICBWRVJCT1NFX0xPRygiRG9uZSBpbmxpbmluZyAoaGFyZCku
XG5TdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTIyMjksOCArMjA4NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1p
bk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMg
aW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKQogewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5n
KCkpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICBUaGUgaW50cmluc2ljIGlzICIsIGludHJpbnNp
YywgIlxuIik7CisgICAgVkVSQk9TRV9MT0coIiAgICAgICBUaGUgaW50cmluc2ljIGlzICIsIGlu
dHJpbnNpYywgIlxuIik7CiAgICAgCiAgICAgLy8gSXQgc28gaGFwcGVucyB0aGF0IHRoZSBjb2Rl
IGJlbG93IGRvZXNuJ3QgaGFuZGxlIHRoZSBpbnZhbGlkIHJlc3VsdCBjYXNlLiBXZSBjb3VsZCBm
aXggdGhhdCwgYnV0CiAgICAgLy8gaXQgd291bGQgb25seSBiZW5lZml0IGludHJpbnNpY3MgY2Fs
bGVkIGFzIHNldHRlcnMsIGxpa2UgaWYgeW91IGRvOgpAQCAtMzMyMyw4ICszMTc4LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgIE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewotICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgIGRhdGFMb2coIiAg
ICBIYW5kbGluZyBjb25zdGFudCBpbnRlcm5hbCBmdW5jdGlvbiAiLCBKU1ZhbHVlKGZ1bmN0aW9u
KSwgIlxuIik7CisgICAgVkVSQk9TRV9MT0coIiAgICBIYW5kbGluZyBjb25zdGFudCBpbnRlcm5h
bCBmdW5jdGlvbiAiLCBKU1ZhbHVlKGZ1bmN0aW9uKSwgIlxuIik7CiAgICAgCiAgICAgLy8gSXQg
c28gaGFwcGVucyB0aGF0IHRoZSBjb2RlIGJlbG93IGFzc3VtZXMgdGhhdCB0aGUgcmVzdWx0IG9w
ZXJhbmQgaXMgdmFsaWQuIEl0J3MgZXh0cmVtZWx5CiAgICAgLy8gdW5saWtlbHkgdGhhdCB0aGUg
cmVzdWx0IG9wZXJhbmQgd291bGQgYmUgaW52YWxpZCAtIHlvdSdkIGhhdmUgdG8gY2FsbCB0aGlz
IHZpYSBhIHNldHRlciBjYWxsLgpAQCAtMzU0MSwxNCArMzM5NSwxMyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpuZWVkc0R5bmFtaWNMb29rdXAoUmVzb2x2ZVR5cGUgdHlwZSwgT3Bjb2RlSUQgb3Bj
b2RlKQogCiBHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQoY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKIHsKLSAgICBpZiAoREZHQnl0ZUNv
ZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUGxhbm5pbmcgYSBs
b2FkOiAiLCBjb25kaXRpb24sICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCJQbGFubmluZyBhIGxv
YWQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CiAgICAgCiAgICAgLy8gV2UgbWlnaHQgcHJvbW90ZSB0
aGlzIHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRlciBERkcgcGFzcyBtaWdodCBhbHNvIGRvIHN1
Y2ggcHJvbW90aW9uCiAgICAgLy8gZXZlbiBpZiB3ZSBmYWlsLCBidXQgZm9yIHNpbXBsaWNpdHkg
dGhpcyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24uCiAg
ICAgLy8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0aGlzIG1ldGhvZCB3aWxsIHJlcXVlc3QgYSBs
b2FkIG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbnl3YXksCiAgICAgLy8gYW5kIHN1cHBv
cnRpbmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUgaGV1cmlzdGljcyBiZWxvdy4KLSAgICBQQVJT
RVJfQVNTRVJUKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0
aW9uOjpQcmVzZW5jZSk7CiAgICAgCiAgICAgLy8gSGVyZSdzIHRoZSByYW5raW5nIG9mIGhvdyB0
byBoYW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFzdCBwcmVmZXJyZWQ6CiAg
ICAgLy8KQEAgLTM2NTEsMTQgKzM1MDQsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2so
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKIAogR2V0QnlP
ZmZzZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2Vy
SW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coImNvbmRpdGlvblNldCA9ICIsIGNv
bmRpdGlvblNldCwgIlxuIik7CisgICAgVkVSQk9TRV9MT0coImNvbmRpdGlvblNldCA9ICIsIGNv
bmRpdGlvblNldCwgIlxuIik7CiAgICAgCiAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0Owog
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRp
dGlvblNldCkgewogICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKICAgICAgICAg
Y2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6Ci0gICAgICAgICAgICBQQVJTRVJfQVNT
RVJUKCFyZXN1bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsgLy8gU2hvdWxkIG9ubHkgc2VlIGV4
YWN0bHkgb25lIG9mIHRoZXNlLgogICAgICAgICAgICAgcmVzdWx0ID0gcGxhbkxvYWQoY29uZGl0
aW9uKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBH
ZXRCeU9mZnNldE1ldGhvZCgpOwpAQCAtMzgzMyw3ICszNjg1LDcgQEAgTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmxvYWQoCiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSog
dmFsdWUpCiB7Ci0gICAgUEFSU0VSX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9n
cmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50
LnN0cnVjdHVyZSgpKTsKICAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRp
ZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSwgdmFsdWUpOwpA
QCAtNDIyMCw2ICs0MDcyLDQyIEBAIHN0YXRpYyB1aW50NjRfdCBtYWtlRHluYW1pY1Zhck9wSW5m
byh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCB1bnNpZ25lZCBnZXRQdXRJCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihpZGVudGlmaWVyTnVtYmVyKSB8IChzdGF0aWNfY2FzdDx1
aW50NjRfdD4oZ2V0UHV0SW5mbykgPDwgMzIpOwogfQogCisvLyBUaGUgaWRpb206CisvLyAgICAg
aWYgKHRydWUpIHsgLi4uOyBnb3RvIGxhYmVsOyB9IGVsc2UgbGFiZWw6IGNvbnRpbnVlCisvLyBB
bGxvd3MgdXNpbmcgTkVYVF9PUENPREUgYXMgYSBzdGF0ZW1lbnQsIGV2ZW4gaW4gdW5icmFjZWQg
aWYrZWxzZSwgd2hpbGUgY29udGFpbmluZyBhIGBjb250aW51ZWAuCisvLyBUaGUgbW9yZSBjb21t
b24gaWRpb206CisvLyAgICAgZG8geyAuLi47IH0gd2hpbGUgKGZhbHNlKQorLy8gRG9lc24ndCBh
bGxvdyB1c2luZyBgY29udGludWVgLgorI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCisgICAg
aWYgKHRydWUpIHsgXAorICAgICAgICBtX2N1cnJlbnRJbmRleCArPSBPUENPREVfTEVOR1RIKG5h
bWUpOyBcCisgICAgICAgIGdvdG8gV1RGX0NPTkNBVChORVhUX09QQ09ERV8sIF9fTElORV9fKTsg
LyogTmVlZCBhIHVuaXF1ZSBsYWJlbDogdXNhYmxlIG1vcmUgdGhhbiBvbmNlIHBlciBmdW5jdGlv
bi4gKi8gXAorICAgIH0gZWxzZSBcCisgICAgICAgIFdURl9DT05DQVQoTkVYVF9PUENPREVfLCBf
X0xJTkVfXyk6IFwKKyAgICBjb250aW51ZQorCisjZGVmaW5lIExBU1RfT1BDT0RFX0xJTktFRChu
YW1lKSBcCisgICAgcmV0dXJuIFwKKyAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xF
TkdUSChuYW1lKSwgXAorICAgICAgICBtX2V4aXRPSyA9IGZhbHNlLCBcCisgICAgICAgIHNob3Vs
ZENvbnRpbnVlUGFyc2luZworCisjZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKKyAgICBkbyB7
IFwKKyAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKSB7IFwKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCktPm9wKCkpIHsgXAorICAgICAg
ICAgICAgY2FzZSBKdW1wOiBcCisgICAgICAgICAgICBjYXNlIEJyYW5jaDogXAorICAgICAgICAg
ICAgY2FzZSBTd2l0Y2g6IFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2Nr
LT5pc0xpbmtlZCk7IFwKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlu
a2VkQmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7IFwKKyAgICAgICAgICAgICAgICBicmVh
aztcCisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsgXAorICAgICAgICAgICAgfSBcCisgICAg
ICAgIH0gXAorICAgICAgICBMQVNUX09QQ09ERV9MSU5LRUQobmFtZSk7IFwKKyAgICB9IHdoaWxl
IChmYWxzZSkKKwogYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKIHsKICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHRydWU7CkBAIC00MjMyLDcg
KzQxMjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRseS4KICAg
ICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5ibG9jaygwKSAmJiAhaW5saW5lQ2FsbEZy
YW1lKCkpIHsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2dyYXBoLm1fcm9vdFRvQXJndW1l
bnRzLmFkZChtX2N1cnJlbnRCbG9jaywgQXJndW1lbnRzVmVjdG9yKCkpOwotICAgICAgICBQQVJT
RVJfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGVudHJ5cG9p
bnRBcmd1bWVudHMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBlbnRyeXBv
aW50QXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAKQEAgLTQyNTQsNyArNDE0Miw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAg
fQogCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgLy8gV2UncmUgc3RhcmluZyBhIG5ldyBi
eXRlY29kZSBpbnN0cnVjdGlvbi4gSGVuY2UsIHdlIG9uY2UgYWdhaW4gaGF2ZSBhIHBsYWNlIHRo
YXQgd2UgY2FuIGV4aXQKKyAgICAgICAgLy8gV2UncmUgc3RhcmluZyBhdCBhIG5ldyBieXRlY29k
ZSBpbnN0cnVjdGlvbi4gU28gd2Ugb25jZSBhZ2FpbiBoYXZlIGEgcGxhY2UgdGhhdCB3ZSBjYW4g
ZXhpdAogICAgICAgICAvLyB0by4KICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAgICAK
QEAgLTQyNjksMTEgKzQxNTcsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gbG9naWMgcmVsaWVzIG9uIGV2ZXJ5IGJ5dGVj
b2RlIHJlc3VsdGluZyBpbiBvbmUgb3IgbW9yZSBub2Rlcywgd2hpY2ggd291bGQKICAgICAgICAg
ICAgIC8vIGJlIHRydWUgYW55d2F5IGV4Y2VwdCBmb3Igb3BfbG9vcF9oaW50LCB3aGljaCBlbWl0
cyBhIFBoYW50b20gdG8gZm9yY2UgdGhpcwogICAgICAgICAgICAgLy8gdG8gYmUgdHJ1ZS4KLSAg
ICAgICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgaW5zZXJ0IGEganVtcCBpZiB0aGUgYmxvY2sgYWxy
ZWFkeSBoYXMgYSB0ZXJtaW5hbCwKLSAgICAgICAgICAgIC8vIHdoaWNoIGNvdWxkIGhhcHBlbiBh
ZnRlciBhIHRhaWwgY2FsbC4KLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNF
bXB0eSgpIHx8ICFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CisKICAgICAgICAgICAgIGlm
ICghbV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOworICAgICAgICAgICAgICAgIGFkZEp1bXBU
byhtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQ29udGludWVQYXJz
aW5nOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDI4Miw4ICs0MTY4LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgbV9jdXJyZW50
SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb247IC8vIFNvbWUgbWV0aG9kcyB3YW50IHRv
IHVzZSB0aGlzLCBhbmQgd2UnZCByYXRoZXIgbm90IHRocmVhZCBpdCB0aHJvdWdoIGNhbGxzLgog
ICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAg
cGFyc2luZyAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBvcGNvZGVJRCwgIlxuIik7Cisg
ICAgICAgIFZFUkJPU0VfTE9HKCIgICAgcGFyc2luZyAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
OiAiLCBvcGNvZGVJRCwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBpZiAoVU5MSUtFTFkobV9n
cmFwaC5jb21waWxhdGlvbigpKSkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChDb3VudEV4ZWN1
dGlvbiwgT3BJbmZvKG1fZ3JhcGguY29tcGlsYXRpb24oKS0+ZXhlY3V0aW9uQ291bnRlckZvcigK
QEAgLTQyOTksNiArNDE4NCw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGFsbCBsb2NhbHMgdG8gdW5k
ZWZpbmVkLgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCiAgICAgICAgICAgICAgICAgc2V0KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKwor
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9lbnRyeUJsb2NrID0gbV9jdXJyZW50Qmxv
Y2s7CisKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCkBAIC01Mjc2LDMzICs1MTY0LDM4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAgICAgICAgY2FzZSBvcF9yZXQ6CiAgICAgICAg
ICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKLSAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUoKSkgeworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUo
KSkgeworICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBjYXNlOiB3ZSBhcmUganVzdCBwcm9kdWNp
bmcgYSByZXR1cm4KKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOwogICAgICAgICAg
ICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcmV0dXJuVmFsdWUuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICBzZXRE
aXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSksIEltbWVkaWF0ZVNldFdpdGhGbHVz
aCk7Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVl
OwotICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tz
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcg
ZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRoZW4gd2UncmUgZG9uZSBwYXJzaW5nLgotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9
PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsKKyAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9y
ZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmbHVzaEZvclJldHVybigpOworICAg
ICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVl
LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSwg
SW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKKworICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNr
VG9wLT5tX2NvbnRpbnVhdGlvbkJsb2NrICYmIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9yZXQpICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9lbnRy
eUJsb2NrID09IG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSByYXRoZXIgd2VpcmQgY2FzZTogd2UgYXJlIHJldHVybmluZyBmcm9tIHRoZSBmaXJzdCBi
bG9jayBpbiB0aGUgZnVuY3Rpb24sIHNvIGFsbCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gaXMg
ZGVhZCBjb2RlLgorICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSB0cmVhdCB0aGlzIGFzIGEg
bm9ybWFsIHJldHVybiBpbnN0ZWFkIG9mIGFuIGVhcmx5IHJldHVybiwgYW5kIHNpZ25hbCB0byBz
a2lwIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkyNTogZXZhbHVh
dGUgd2hldGhlciB0aGF0IG9wdGltaXphdGlvbiBpcyB1c2VmdWwsIGl0IHNlZW1zIGxpa2UgYSBy
ZWFsbHkgd2VpcmQgY29ybmVyIGNhc2UuCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRp
bnVlUGFyc2luZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9y
ZXQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElm
IGlubGluaW5nIGNyZWF0ZWQgYmxvY2tzLCBhbmQgd2UncmUgZG9pbmcgYSByZXR1cm4sIHRoZW4g
d2UgbmVlZCBzb21lCi0gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgbGlua2luZy4KLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9j
a3MubGFzdCgpLm1fYmxvY2sgPT0gbV9ncmFwaC5sYXN0QmxvY2soKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNO
b3JtYWxMaW5raW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0KSAhPSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIHx8IG1faW5saW5lU3Rh
Y2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpIDw9IG1faW5saW5lU3RhY2tUb3At
Pm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbygwKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNFYXJseVJldHVybkxp
bmtpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Rp
ZEVhcmx5UmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBl
YXJseSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGZ1bmN0aW9uIGFuZCB3ZSBkbyBub3QgaGF2ZSBh
IGNvbnRpbnVhdGlvbiBibG9jaywgc28gd2UgbXVzdCBhbGxvY2F0ZSBvbmUuCisgICAgICAgICAg
ICAgICAgICAgIC8vIEl0IGlzIHVudGFyZ2V0YWJsZSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyB0
aGUgYXBwcm9wcmlhdGUgaW5kZXguCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYmxv
Y2sgdHVybnMgb3V0IHRvIGJlIGEganVtcCB0YXJnZXQsIHBhcnNlQ29kZUJsb2NrIHdpbGwgZml4
IGl0cyBieXRlY29kZUluZGV4IGJlZm9yZSBwdXR0aW5nIGl0IGluIG1fYmxvY2tMaW5raW5nVGFy
Z2V0cworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NvbnRpbnVhdGlv
bkJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKLSAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7
Ci0gICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOworCisgICAgICAgICAgICBpZiAobV9p
bmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jaykKKyAgICAgICAgICAgICAgICBhZGRK
dW1wVG8obV9pbmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jayk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcmV0dXJuaW5nIGZyb20gYW4gaW5s
aW5lZCBmdW5jdGlvbiwgYW5kIGRvIG5vdCBuZWVkIHRvIGp1bXAgYW55d2hlcmUsIHNvIHdlIGp1
c3Qga2VlcCB0aGUgY3VycmVudCBibG9jaworICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fY29udGludWF0aW9uQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIExBU1RfT1BDT0RFX0xJTktFRChvcF9yZXQpOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3BfZW5kOgogICAgICAgICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWUo
KSk7CkBAIC01MzM0LDcgKzUyMjcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUEFSU0VSX0FTU0VSVCghbV9jdXJyZW50Qmxv
Y2stPnNpemUoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2st
PnNpemUoKSk7CiAKICAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1
ZmZlciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5wb2ludGVyKTsKIApAQCAtNTM1OSw4ICs1MjUyLDggQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbG9j
YWxQcmVkaWN0aW9ucy5hcHBlbmQocHJlZGljdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgUEFSU0VSX0FTU0VSVChvcGVyYW5kLmlzQXJn
dW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVJTRVJfQVNTRVJUKHN0YXRpY19j
YXN0PHVpbnQzMl90PihvcGVyYW5kLnRvQXJndW1lbnQoKSkgPCBhcmd1bWVudFByZWRpY3Rpb25z
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcGVyYW5k
LmlzQXJndW1lbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0aWNfY2FzdDx1aW50MzJfdD4ob3BlcmFuZC50b0FyZ3VtZW50KCkpIDwgYXJndW1lbnRQcmVk
aWN0aW9ucy5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25F
bmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkFyZ3VtZW50cy5hZGQo
b3BlcmFuZC50b0FyZ3VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRQ
cmVkaWN0aW9uc1tvcGVyYW5kLnRvQXJndW1lbnQoKV0gPSBwcmVkaWN0aW9uOwpAQCAtNTM2OSw3
ICs1MjYyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKIAogICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzOyArK2FyZ3VtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgUEFSU0VSX0FT
U0VSVChzZWVuQXJndW1lbnRzLmNvbnRhaW5zKGFyZ3VtZW50KSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzZWVuQXJndW1lbnRzLmNvbnRhaW5zKGFyZ3VtZW50KSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC01NDEwLDcgKzUzMDMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2dyYXBoLm1fcm9v
dFRvQXJndW1lbnRzLmFkZChtX2N1cnJlbnRCbG9jaywgQXJndW1lbnRzVmVjdG9yKCkpOwotICAg
ICAgICAgICAgICAgIFBBUlNFUl9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAg
ICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGVudHJ5cG9pbnRBcmd1bWVudHMgPSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRBcmd1bWVudHMucmVz
aXplKG1fbnVtQXJndW1lbnRzKTsKIApAQCAtNTQ1MCw3ICs1MzQzLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFRlcm1pbmFs
aXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxs
LCBDYWxsTW9kZTo6VGFpbCk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fY3Vy
cmVudEluc3RydWN0aW9uID09IGN1cnJlbnRJbnN0cnVjdGlvbiwgImhhbmRsZUNhbGwsIHdoaWNo
IG1heSBoYXZlIGlubGluZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlv
biIpOwogICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgdGVybWluYWwgdGhlbiB3ZSBzaG91
bGQgbm90IHBhcnNlIGFueSBmdXJ0aGVyIGJ5dGVjb2RlcyBhcyB0aGUgVGFpbENhbGwgd2lsbCBl
eGl0IHRoZSBmdW5jdGlvbi4KLSAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJt
aW5hbCwgaG93ZXZlciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qdW1w
IHRvIHVwZGF0ZSBtZXRhZGF0YSBhbmQgY2xlYW4KKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxs
IGlzIG5vdCB0ZXJtaW5hbCwgaG93ZXZlciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9w
X3JldC9vcF9qbXAgdG8gdXBkYXRlIG1ldGFkYXRhIGFuZCBjbGVhbgogICAgICAgICAgICAgLy8g
dGhpbmdzIHVwLgogICAgICAgICAgICAgaWYgKHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFsKQog
ICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RhaWxfY2FsbCk7CkBAIC01NDc0LDcgKzUz
NjcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICAgICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVWYXJhcmdzQ2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsVmFyYXJncywgQ2FsbE1vZGU6OlRhaWwpOwogICAg
ICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2N1cnJlbnRJbnN0cnVjdGlvbiA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24sICJoYW5kbGVWYXJhcmdzQ2FsbCwgd2hpY2ggbWF5IGhhdmUgaW5saW5l
ZCB0aGUgY2FsbGVlLCB0cmFzaGVkIG1fY3VycmVudEluc3RydWN0aW9uIik7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgY2FsbCBpcyB0ZXJtaW5hbCB0aGVuIHdlIHNob3VsZCBub3QgcGFyc2UgYW55
IGZ1cnRoZXIgYnl0ZWNvZGVzIGFzIHRoZSBUYWlsQ2FsbCB3aWxsIGV4aXQgdGhlIGZ1bmN0aW9u
LgotICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgbm90IHRlcm1pbmFsLCBob3dldmVyLCB0
aGVuIHdlIHdhbnQgdGhlIHN1YnNlcXVlbnQgb3BfcmV0L29wX2p1bXAgdG8gdXBkYXRlIG1ldGFk
YXRhIGFuZCBjbGVhbgorICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgbm90IHRlcm1pbmFs
LCBob3dldmVyLCB0aGVuIHdlIHdhbnQgdGhlIHN1YnNlcXVlbnQgb3BfcmV0L29wX2ptcCB0byB1
cGRhdGUgbWV0YWRhdGEgYW5kIGNsZWFuCiAgICAgICAgICAgICAvLyB0aGluZ3MgdXAuCiAgICAg
ICAgICAgICBpZiAodGVybWluYWxpdHkgPT0gTm9uVGVybWluYWwpCiAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOwpAQCAtNTQ5MCwxMiArNTM4MywxMiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MsIENhbGxNb2RlOjpUYWlsKTsKICAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3Vy
cmVudEluc3RydWN0aW9uLCAiaGFuZGxlVmFyYXJnc0NhbGwsIHdoaWNoIG1heSBoYXZlIGlubGlu
ZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlvbiIpOwogICAgICAgICAg
ICAgLy8gSWYgdGhlIGNhbGwgaXMgdGVybWluYWwgdGhlbiB3ZSBzaG91bGQgbm90IHBhcnNlIGFu
eSBmdXJ0aGVyIGJ5dGVjb2RlcyBhcyB0aGUgVGFpbENhbGwgd2lsbCBleGl0IHRoZSBmdW5jdGlv
bi4KLSAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5hbCwgaG93ZXZlciwg
dGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qdW1wIHRvIHVwZGF0ZSBtZXRh
ZGF0YSBhbmQgY2xlYW4KKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5h
bCwgaG93ZXZlciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qbXAgdG8g
dXBkYXRlIG1ldGFkYXRhIGFuZCBjbGVhbgogICAgICAgICAgICAgLy8gdGhpbmdzIHVwLgogICAg
ICAgICAgICAgaWYgKHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFsKQotICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3RhaWxfY2FsbCk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF90YWlsX2NhbGwpOworICAgICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CkBAIC01NTU1
LDggKzU0NDgsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
ICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKHJlc29sdmVUeXBlLCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jayk7Ci0gICAg
ICAgICAgICAgICAgUEFSU0VSX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgICAg
ICBQQVJTRVJfQVNTRVJUKHN0YXRpY19jYXN0PEpTU2NvcGUqPihjdXJyZW50SW5zdHJ1Y3Rpb25b
Nl0udS5wb2ludGVyKSA9PSBjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0aWNfY2FzdDxKU1Njb3BlKj4oY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9pbnRlcikgPT0g
Y29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3Qp
LCB3ZWFrSlNDb25zdGFudChjb25zdGFudFNjb3BlKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNTg5Nyw3ICs1NzkwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIC8vIEJhc2VsaW5lLT5ERkcgT1NS
IGp1bXBzIGJldHdlZW4gbG9vcCBoaW50cy4gVGhlIERGRyBhc3N1bWVzIHRoYXQgQmFzZWxpbmUt
PkRGRwogICAgICAgICAgICAgLy8gT1NSIGNhbiBvbmx5IGhhcHBlbiBhdCBiYXNpYyBibG9jayBi
b3VuZGFyaWVzLiBBc3NlcnQgdGhhdCB0aGVzZSB0d28gc3RhdGVtZW50cwogICAgICAgICAgICAg
Ly8gYXJlIGNvbXBhdGlibGUuCi0gICAgICAgICAgICBQQVJTRVJfQVNTRVJUKG1fY3VycmVudElu
ZGV4ID09IGJsb2NrQmVnaW4pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50
SW5kZXggPT0gYmxvY2tCZWdpbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIG5l
dmVyIGRvIE9TUiBpbnRvIGFuIGlubGluZWQgY29kZSBibG9jay4gVGhhdCBjb3VsZCBub3QgaGFw
cGVuLCBzaW5jZSBPU1IKICAgICAgICAgICAgIC8vIGxvb2tzIHVwIHRoZSBjb2RlIGJsb2NrIHRo
YXQgaXMgdGhlIHJlcGxhY2VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklUIGNvZGUKQEAgLTYyNDQs
MjUgKzYxMzcsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVQKICAgICB9CiAgICAgICAgIAog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiTWFya2luZyAiLCBSYXdQb2ludGVyKGJsb2Nr
KSwgIiBhcyBsaW5rZWQgKGFjdHVhbGx5IGRpZCBsaW5raW5nKVxuIik7CisgICAgVkVSQk9TRV9M
T0coIk1hcmtpbmcgIiwgUmF3UG9pbnRlcihibG9jayksICIgYXMgbGlua2VkIChhY3R1YWxseSBk
aWQgbGlua2luZylcbiIpOwogICAgIGJsb2NrLT5kaWRMaW5rKCk7CiB9CiAKLXZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2Nr
cywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29kZVBh
cnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2NrcywgVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKERGR0J5
dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdHRl
bXB0aW5nIHRvIGxpbmsgIiwgUmF3UG9pbnRlcih1bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrKSwg
IlxuIik7Ci0gICAgICAgIGlmICh1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2lu
ZykgewotICAgICAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERvZXMgbmVlZCBub3JtYWwgbGlua2luZy5c
biIpOwotICAgICAgICAgICAgbGlua0Jsb2NrKHVubGlua2VkQmxvY2tzW2ldLm1fYmxvY2ssIHBv
c3NpYmxlVGFyZ2V0cyk7Ci0gICAgICAgICAgICB1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9y
bWFsTGlua2luZyA9IGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFZFUkJPU0VfTE9HKCJBdHRl
bXB0aW5nIHRvIGxpbmsgIiwgUmF3UG9pbnRlcih1bmxpbmtlZEJsb2Nrc1tpXSksICJcbiIpOwor
ICAgICAgICBsaW5rQmxvY2sodW5saW5rZWRCbG9ja3NbaV0sIHBvc3NpYmxlVGFyZ2V0cyk7CiAg
ICAgfQogfQogCkBAIC02MjcwLDcgKzYxNTYsNiBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICBCeXRlQ29kZVBhcnNlciogYnl0ZUNvZGVQ
YXJzZXIsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLAotICAgIEJhc2ljQmxvY2sqIGNhbGxzaXRlQmxvY2tIZWFkLAogICAgIEpTRnVuY3Rp
b24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIFZpcnR1
YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxs
RnJhbWVTdGFydCwKQEAgLTYyNzksMTAgKzYxNjQsOCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0
ZUNvZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2Zp
bGVkQmxvY2socHJvZmlsZWRCbG9jaykKLSAgICAsIG1fY2FsbHNpdGVCbG9ja0hlYWQoY2FsbHNp
dGVCbG9ja0hlYWQpCisgICAgLCBtX2NvbnRpbnVhdGlvbkJsb2NrKG51bGxwdHIpCiAgICAgLCBt
X3JldHVyblZhbHVlKHJldHVyblZhbHVlVlIpCi0gICAgLCBtX2RpZFJldHVybihmYWxzZSkKLSAg
ICAsIG1fZGlkRWFybHlSZXR1cm4oZmFsc2UpCiAgICAgLCBtX2NhbGxlcihieXRlQ29kZVBhcnNl
ci0+bV9pbmxpbmVTdGFja1RvcCkKIHsKICAgICB7CkBAIC02MzEyLDcgKzYxOTUsNiBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAg
Ly8gSW5saW5lIGNhc2UuCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQYXJz
ZXItPm1fY29kZUJsb2NrKTsKICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0Lmlz
VmFsaWQoKSk7Ci0gICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCk7CiAgICAgICAgIAog
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fcGxh
bi5pbmxpbmVDYWxsRnJhbWVzLT5hZGQoKTsKIApAQCAtNjM1NywxNCArNjIzOSwxMiBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAg
ICAgIG1fc3dpdGNoUmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJl
ck9mU3dpdGNoSnVtcFRhYmxlcygpOwogICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29k
ZUJsb2NrLT5hZGRTd2l0Y2hKdW1wVGFibGUoKSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KGkpOwogICAgICAgICB9Ci0gICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcg
PSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNl
LgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9j
ayk7CiAgICAgICAgIEFTU0VSVCghY2FsbGVlKTsKICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1
ZVZSLmlzVmFsaWQoKSk7CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNW
YWxpZCgpKTsKLSAgICAgICAgQVNTRVJUKCFjYWxsc2l0ZUJsb2NrSGVhZCk7CiAKICAgICAgICAg
bV9pbmxpbmVDYWxsRnJhbWUgPSAwOwogCkBAIC02Mzc3LDcgKzYyNTcsNiBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAgIG1f
Y29uc3RhbnRCdWZmZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY29kZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKQogICAgICAgICAg
ICAgbV9zd2l0Y2hSZW1hcFtpXSA9IGk7Ci0gICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVk
c0xpbmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgYnl0ZUNvZGVQYXJzZXItPm1faW5s
aW5lU3RhY2tUb3AgPSB0aGlzOwpAQCAtNjQzMiw4NSArNjMxMSw1NyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAKICAgICAgICAgLy8gTG9vcCB1bnRpbCB3ZSByZWFj
aCB0aGUgY3VycmVudCBsaW1pdCAoaS5lLiBuZXh0IGp1bXAgdGFyZ2V0KS4KICAgICAgICAgZG8g
eworICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGFscmVhZHkgYmUgYSBjdXJyZW50QmxvY2sgaW4g
dHdvIGNhc2VzOgorICAgICAgICAgICAgLy8gLSB3ZSBtYXkgaGF2ZSBqdXN0IGVudGVyZWQgdGhl
IGxvb3AgZm9yIHRoZSBmaXJzdCB0aW1lCisgICAgICAgICAgICAvLyAtIHdlIG1heSBoYXZlIGp1
c3QgcmV0dXJuZWQgZnJvbSBhbiBpbmxpbmVkIGNhbGxlZSB0aGF0IGhhZCBzb21lIGVhcmx5IHJl
dHVybnMgYW5kCisgICAgICAgICAgICAvLyAgIHNvIGFsbG9jYXRlZCBhIGNvbnRpbnVhdGlvbiBi
bG9jaywgYW5kIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgY2FsbCBpcyBhIGp1bXAgdGFyZ2V0
LgorICAgICAgICAgICAgLy8gSW4gYm90aCBjYXNlcywgd2Ugd2FudCB0byBrZWVwIHVzaW5nIGl0
LgogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICAgICAgICAgIC8v
IENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGxhc3QgYmxvY2suCi0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubnVtQmxvY2tzKCkgJiYgbV9ncmFwaC5sYXN0QmxvY2soKS0+aXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGJsb2NrIGJlbG9uZ2luZyB0
byB1cy4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2sgPT0gbV9ncmFwaC5sYXN0QmxvY2soKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGUgYmxvY2sgaXMgbGlua2FibGUgb3IgaXQgaXNu
J3QuIElmIGl0J3MgbGlua2FibGUgdGhlbiBpdCdzIHRoZSBsYXN0Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIGJsb2NrIGluIHRoZSBibG9ja0xpbmtpbmdUYXJnZXRzIGxpc3QuIElmIGl0J3Mgbm90
IHRoZW4gdGhlIGxhc3QgYmxvY2sgd2lsbAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGEg
bG93ZXIgYnl0ZWNvZGUgaW5kZXggdGhhdCB0aGUgb25lIHdlJ3JlIGFib3V0IHRvIGdpdmUgdG8g
dGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1f
YmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9j
a0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgYmxvY2sgbGlua2FibGUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xp
bmtpbmdUYXJnZXRzLmlzRW1wdHkoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2lu
Z1RhcmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
LmFwcGVuZChtX2dyYXBoLmxhc3RCbG9jaygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51
ZS4KLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9j
aygpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9
IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayht
X2N1cnJlbnRJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2sucHRyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgotICAgICAgICAgICAg
ICAgICAgICAvLyAxKSBJZiB0aGUgYnl0ZWNvZGVCZWdpbiBpcyBncmVhdGVyIHRoYW4gY3VycmVu
dEluZGV4LCB0aGVuIHNvbWV0aGluZyBoYXMgZ29uZQotICAgICAgICAgICAgICAgICAgICAvLyAg
ICBob3JyaWJseSB3cm9uZy4gU28sIHdlJ3JlIHByb2JhYmx5IGdlbmVyYXRpbmcgaW5jb3JyZWN0
IGNvZGUuCi0gICAgICAgICAgICAgICAgICAgIC8vIDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlz
IGVxdWFsIHRvIHRoZSBjdXJyZW50SW5kZXgsIHRoZW4gd2UgZmFpbGVkIHRvIGRvCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgIGEgcGVlcGhvbGUgY29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGlu
IHRoZSBpZiBzdGF0ZW1lbnQgYWJvdmUuIFNvLCB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAv
LyAgICBnZW5lcmF0aW5nIHN1Ym9wdGltYWwgY29kZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9y
IHRoZSBDRkcgc2ltcGxpZmllci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0
YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbGFzdEJlZ2luID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrLT5ieXRlY29k
ZUJlZ2luOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0QmVnaW4sIGxhc3RCZWdpbiA9PSBVSU5UX01BWCB8fCBs
YXN0QmVnaW4gPCBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQo
VW5saW5rZWRCbG9jayhibG9jay5wdHIoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrLnB0cigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGJsb2NrIGlzIGRlZmluaXRlbHkgYW4gT1NS
IHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm51bUJsb2NrcygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Jvb3RzLmFwcGVuZChibG9jay5wdHIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBl
bmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXBhcmVUb1Bh
cnNlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGFsbG9jYXRlVGFy
Z2V0YWJsZUJsb2NrKG1fY3VycmVudEluZGV4KTsKKworICAgICAgICAgICAgICAgIC8vIFRoZSBm
aXJzdCBibG9jayBpcyBkZWZpbml0ZWx5IGFuIE9TUiB0YXJnZXQuCisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubnVtQmxvY2tzKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fcm9vdHMuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHBhcnNlQmxvY2sobGltaXQp
OwogCiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgZ29uZSBiZXlvbmQgdGhlIGxp
bWl0LgogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IGxpbWl0KTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgcGxhbnRlZCBhIHRlcm1pbmFs
LCBvciB3ZSBqdXN0IGdhdmUgdXAgYmVjYXVzZQotICAgICAgICAgICAgLy8gd2UgcmVhbGl6ZWQg
dGhhdCB0aGUganVtcCB0YXJnZXQgaW5mb3JtYXRpb24gaXMgaW1wcmVjaXNlLCBvciB3ZQotICAg
ICAgICAgICAgLy8gYXJlIGF0IHRoZSBlbmQgb2YgYW4gaW5saW5lIGZ1bmN0aW9uLCBvciB3ZSBy
ZWFsaXplZCB0aGF0IHdlCi0gICAgICAgICAgICAvLyBzaG91bGQgc3RvcCBwYXJzaW5nIGJlY2F1
c2UgdGhlcmUgd2FzIGEgcmV0dXJuIGluIHRoZSBmaXJzdAotICAgICAgICAgICAgLy8gYmFzaWMg
YmxvY2suCi0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBt
X2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgJiYgaW5saW5lQ2FsbEZyYW1lKCkpIHx8ICFzaG91bGRD
b250aW51ZVBhcnNpbmcpOwogCiAgICAgICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlUGFyc2lu
ZykgewotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJz
aW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgcGFyc2luZyAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBWRVJCT1NFX0xPRygiRG9uZSBwYXJzaW5n
ICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRy
OworCisgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgY2FzZSBvbmx5IGhhcHBlbnMgaWYgdGhlIGxhc3QgaW5zdHJ1Y3Rp
b24gd2FzIGFuIGlubGluZWQgY2FsbCB3aXRoIGVhcmx5IHJldHVybnMKKyAgICAgICAgICAgICAg
ICAvLyBvciBwb2x5bW9ycGhpYyAoY3JlYXRpbmcgYW4gZW1wdHkgY29udGludWF0aW9uIGJsb2Nr
KSwKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiB3ZSBoaXQgdGhlIGxpbWl0IGJlZm9yZSBw
dXR0aW5nIGFueXRoaW5nIGluIHRoZSBjb250aW51YXRpb24gYmxvY2suCisgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fY3VycmVudEluZGV4ID09IGxpbWl0KTsKKyAgICAgICAgICAgICAgICBtYWtl
QmxvY2tUYXJnZXRhYmxlKG1fY3VycmVudEJsb2NrLCBtX2N1cnJlbnRJbmRleCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+dGVy
bWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5z
aXplKCkgJiYgaW5saW5lQ2FsbEZyYW1lKCkpKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jayA9IG51bGxwdHI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKG1fY3VycmVu
dEluZGV4IDwgbGltaXQpOwogICAgIH0KIAogICAgIC8vIFNob3VsZCBoYXZlIHJlYWNoZWQgdGhl
IGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VERkdCeXRlY29kZVBhcnNpbmcoKSkKLSAgICAgICAgZGF0YUxvZygiRG9uZSBwYXJz
aW5nICIsICpjb2RlQmxvY2ssICIgKGZlbGwgb2ZmIGVuZClcbiIpOworICAgIFZFUkJPU0VfTE9H
KCJEb25lIHBhcnNpbmcgIiwgKmNvZGVCbG9jaywgIiAoZmVsbCBvZmYgZW5kKVxuIik7CiB9CiAK
LWJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
KCkKIHsKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KICAgICBBU1NFUlQoIW1fY3Vy
cmVudEluZGV4KTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVjb2RlUGFy
c2luZygpKQotICAgICAgICBkYXRhTG9nKCJQYXJzaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7
CisgICAgVkVSQk9TRV9MT0coIlBhcnNpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAK
ICAgICBtX2RmZ0NvZGVCbG9jayA9IG1fZ3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2Nr
OwogICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSAmJiBtX2RmZ0NvZGVCbG9jawpA
QCAtNjUyMiwxMyArNjM3MywxNSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAg
fQogICAgIAogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKLSAgICAgICAg
dGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgMCwgMCwgVmlydHVhbFJlZ2lzdGVy
KCksIFZpcnR1YWxSZWdpc3RlcigpLAorICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9m
aWxlZEJsb2NrLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCksCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIElubGluZUNhbGxGcmFtZTo6Q2FsbCk7
CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNr
RW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMpOwogCiAgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZURGR0J5dGVjb2RlUGFyc2luZygpKQorICAgICAgICBtX2dyYXBoLmR1
bXAoKTsKICAgICBtX2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwogCiAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07
KSB7CkBAIC02NTQzLDEzICs2Mzk2LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkK
IAogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1f
cGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwotCi0gICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgcGFyc2UoR3JhcGgmIGdyYXBoKQordm9pZCBwYXJzZShHcmFwaCYgZ3JhcGgpCiB7
Ci0gICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGdyYXBoKS5wYXJzZSgpOworICAgIEJ5dGVDb2Rl
UGFyc2VyKGdyYXBoKS5wYXJzZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgKaW5kZXggNDBk
MmFiYzc4MjZjOWNjNjY1YzczOWIyMWI5NTRjZTFmNjBiOGRhZC4uNWI1MDhhMWM1MDIwYWM1ZDU3
NGQyYTczMWFmOTE5Y2E0YWQ4NDliMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuaApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi1ib29sIHBhcnNlKEdyYXBoJik7Cit2b2lk
IHBhcnNlKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA1YmZlNTI3ZTE1Y2ZjODRkY2M2YTRiMTRi
MTUwMjE0YzM2OTA4YWJiLi4xNzNlYWVkYTYzY2ZmNjI5OWJhMzZiODQxNjk4NzJiZTFjYzNlMzA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtODE3LDcgKzgxNyw4
IEBAIHZvaWQgR3JhcGg6OmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgaWYgKGJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKKworICAgICAgICBkYXRhTG9nSWYoT3B0aW9uczo6dmVyYm9zZURGR0J5
dGVjb2RlUGFyc2luZygpLCAiQmFzaWMgYmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgd2FzIGtpbGxl
ZCBiZWNhdXNlIGl0IHdhcyB1bnJlYWNoYWJsZVxuIik7CiAgICAgICAgIGtpbGxCbG9ja0FuZEl0
c0NvbnRlbnRzKGJsb2NrKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAppbmRleCBmNTE3ZmU5ZWFmZGE1NjUzZTk1NTk1MTY0MGQxNjViZGQyNWNlZGQwLi41YmY0
Y2RlN2I4ZmVmYWYyZGVmMzg1MmFmNWYyOGI5NWI2ODgxM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAKQEAgLTI0NywxMSArMjQ3LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQogICAgIH0KICAgICAKICAgICBHcmFwaCBk
ZmcoKnZtLCAqdGhpcyk7Ci0gICAgCi0gICAgaWYgKCFwYXJzZShkZmcpKSB7Ci0gICAgICAgIGZp
bmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhpcyk7Ci0gICAg
ICAgIHJldHVybiBGYWlsUGF0aDsKLSAgICB9CisgICAgcGFyc2UoZGZnKTsKIAogICAgIGNvZGVC
bG9jay0+c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldDo6ZGZnQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323240</attachid>
            <date>2017-10-09 16:17:43 -0700</date>
            <delta_ts>2017-10-09 16:55:29 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-177922-20171009161741.patch</filename>
            <type>text/plain</type>
            <size>85625</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmEzNmUzMDlhZjZmYzI4MmQ5M2U3OWQ3MDRkNjFmM2U4YzBjMzNlLi4wNzQ0NThjMjdiYmZiZjFh
OGM2OTQ0ZTg4Mjc2NWJlODQ0YTFlMjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAxNy0wOS0yNiAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBpbmxpbmVyIHRvIHNpbXBsaWZ5IGJsb2NrIGxp
bmtpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIFRoZSBi
aWdnZXN0IHJlZmFjdG9yIGNoYW5nZXMgdGhlIHdheSBibG9ja3MgYXJlIGxpbmtlZC4gSW4gREZH
Qnl0ZUNvZGVQYXJzZXIsIG1vc3QgdGVybWluYWxzIChzdWNoIGFzIEp1bXAgb3IgQnJhbmNoKSBq
dW1wIHRvIG51bGxwdHIgaW5pdGlhbGx5LCBhbmQgaGF2ZQorICAgICAgICBzb21lIG1ldGFkYXRh
IGluZGljYXRpbmcgdGhlIGJ5dGVjb2RlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlaXIgdGFy
Z2V0cy4gVGhleSBhcmUgbGF0ZXIgbGlua2VkIHRvIHRoZSByaWdodCBiYXNpYyBibG9jayB1c2lu
ZyB0d28gZmllbGRzIG9mIElubGluZVN0YWNrRW50cnk6CisgICAgICAgIC0gbV91bmxpbmtlZEJs
b2NrcyBpcyBqdXN0IGEgd29ya2xpc3Qgb2YgYmxvY2tzIHdpdGggYSB0ZXJtaW5hbCB0aGF0IG5l
ZWRzIHRvIGJlIGxpbmtlZAorICAgICAgICAtIG1fbGlua2luZ1RhcmdldHMgaXMgYSBkaWN0aW9u
YXJ5IGZyb20gYnl0ZWNvZGUgaW5kaWNlcyB0byBCYXNpY0Jsb2NrKgorICAgICAgICBCZWZvcmUg
cmVmYWN0b3JpbmcsIGV2ZXJ5IGJsb2NrIHdhcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGJvdGgg
b2YgdGhlc2UgZmllbGRzLCBmb3IgdGhlIElubGluZVN0YWNrRW50cnkgb2Ygd2hhdGV2ZXIgZnVu
Y3Rpb24gYWxsb2NhdGVkIGl0LgorICAgICAgICBUaGlzIGNyZWF0ZWQgYSBzaWduaWZpY2FudCBu
dW1iZXIgb2YgY29ybmVyIGNhc2VzLCBzdWNoIGFzIGJsb2NrcyBhbGxvY2F0ZWQgaW4gYSBjYWxs
ZXIsIHdpdGggYSB0ZXJtaW5hbCB3cml0dGVuIGJ5IGFuIGlubGluZWQgY2FsbGVlIGFuZCBwb2lu
dGluZyB0byBhIGJsb2NrIGluIHRoZSBjYWxsZWUsCisgICAgICAgIG9yIGJsb2NrcyBhbGxvY2F0
ZWQgaW4gYW4gaW5saW5lIGNhbGxlZSwgd2l0aCBhIHRlcm1pbmFsIHdyaXR0ZW4gYnkgdGhlIGNh
bGxlciBhZnRlciBpdCByZXR1cm5zIGFuZCBwb2ludGluZyB0byBhIGJsb2NrIGluIHRoZSBjYWxs
ZXIsIG9yIGJsb2NrcyB3aXRoIGEgbWFudWFsbHkgbGlua2VkCisgICAgICAgIHRlcm1pbmFsIHRo
YXQgbmVlZHMgdG8gYmUgdGFrZW4gb2ZmIG1fdW5saW5rZWRCbG9ja3MuCisgICAgICAgIEkgY2hh
bmdlZCB0aGluZ3Mgc28gdGhhdCBibG9ja3MgYXJlIG9ubHkgYWRkZWQgdG8gbV91bmxpbmtlZEJs
b2NrcyB3aGVuIHRoZWlyIHRlcm1pbmFsIGdldHMgd3JpdHRlbiAoc2VlIHRoZSBMQVNUX09QQ09E
RSBtYWNybykgbWFraW5nIGl0IGEgbG90IGVhc2llciB0byBiZSBpbiB0aGUgInJpZ2h0IiBJbmxp
bmVTdGFja0VudHJ5LAorICAgICAgICB0aGF0IGlzIHRoZSBvbmUgdGhhdCBob2xkcyB0aGVpciB0
YXJnZXQgaW4gaXRzIG1fbGlua2luZ1RhcmdldHMgZmllbGQuCisKKyAgICAgICAgVGhlcmUgYXJl
IGEgZmV3IG11Y2ggc21hbGxlciByZWZhY3RvcnMgaW4gdGhpcyBwYXRjaDoKKyAgICAgICAgLSBw
YXJzZSgpIGlzIG5vdyBvZiB0eXBlIHZvaWQgaW5zdGVkIG9mIGJvb2wgKGl0IHdhcyBhbHdheXMg
cmV0dXJuaW5nIHRydWUpCisgICAgICAgIC0gVGhlIDcgYW5kIDggYXJndW1lbnRzIG9mIGhhbmRs
ZUNhbGwgd2VyZSBpbmxpbmVkIGluIGl0cyAzIGFyZ3VtZW50cyB2ZXJzaW9uIGZvciByZWFkYWJp
bGl0eQorICAgICAgICAtIFRoZSA5IGFyZ3VtZW50IHZlcnNpb24gd2FzIGNsZWFuZWQgdXAgYW5k
IHNpbXBsaWZpZWQKKyAgICAgICAgLSBJIG1hZGUgc2VwYXJhdGUgYWxsb2NhdGVCbG9jayByb3V0
aW5lcyBiZWNhdXNlIHRoZSBsaXR0bGUgZGFuY2Ugd2l0aCBhZG9wdFJlZigqIG5ldyBCYXNpY0Js
b2NrKC4uLikpIHdhcyBiZWluZyByZXBlYXRlZCBpbiBsb3RzIG9mIHBsYWNlcywgYW5kIHR5cG9z
IGluIHRoYXQgd2VyZSBhIG1ham9yIHNvdXJjZSBvZiBidWdzIGR1cmluZyBvdGhlciByZWZhY3Rv
cmluZ3MKKyAgICAgICAgLSBKdW1wcyBhcmUgbm93IGNyZWF0ZWQgd2l0aCBleHBsaWNpdCBhZGRK
dW1wVG8oKSBmdW5jdGlvbnMsIHByb3ZpZGluZyBzb21lIHNhbml0eSBjaGVja2luZyB0aHJvdWdo
IGFzc2VydHMgYW5kIGRpZExpbmsoKQorICAgICAgICAtIEJsb2NrcyBhcmUgb25seSBhZGRlZCB0
byBtX3VubGlua2VkQmxvY2tzIGlmIHRoZXkgZW5kIGluIGEgdGVybWluYWwgdGhhdCBsaW5rQmxv
Y2sgd29ya3Mgd2l0aCAoc2VlIExBU1RfT1BDT0RFKQorCisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBh
cnNlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2FuY2VsTGlua2luZ0Zv
ckJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGls
ZUluVGhyZWFkSW1wbCk6CisKIDIwMTctMTAtMDkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1
ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjMwMTUg
YW5kIHIyMjMwMjUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmlu
ZGV4IDY0MDNlYWVlODliM2EwMDQ4NmU5NGExNzExY2JlM2ViNWQ5MzQ0Y2QuLjFlMjNlMzc2Mzdj
NDMxZTE4YjY4NThmMTZiNjM0OTJkYzdhY2Y4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCkBAIC0yNTEsMjEgKzI1MSw2IEBAIHByaXZhdGU6CiB9OwogCiB0
eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0OwotCi1zdHJ1Y3QgVW5saW5r
ZWRCbG9jayB7Ci0gICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAgICBib29sIG1fbmVlZHNOb3Jt
YWxMaW5raW5nOwotICAgIGJvb2wgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZzsKLSAgICAKLSAg
ICBVbmxpbmtlZEJsb2NrKCkgeyB9Ci0gICAgCi0gICAgZXhwbGljaXQgVW5saW5rZWRCbG9jayhC
YXNpY0Jsb2NrKiBibG9jaykKLSAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgICAgICAsIG1f
bmVlZHNOb3JtYWxMaW5raW5nKHRydWUpCi0gICAgICAgICwgbV9uZWVkc0Vhcmx5UmV0dXJuTGlu
a2luZyhmYWxzZSkKLSAgICB7Ci0gICAgfQotfTsKICAgICAKIHN0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCAwYzgwYzM2MTBlMmRhYzA5ZmZmOGE0OTI1Zjg0ZjQ0YTBkYzYyYzE1Li40MDhhYjQ2YjQ2Yzdm
OTk5NzY1OWVkODkyOTcxNDk4MjdiNjA1ZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNjgsMjAgKzY4LDE4IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotbmFtZXNwYWNlIHsKLQotI2RlZmluZSBQQVJT
RVJfQVNTRVJUKGFzc2VydGlvbiwgLi4uKSBkbyB7ICAgICAgICAgIFwKLSAgICBpZiAoVU5MSUtF
TFkoIShhc3NlcnRpb24pKSkgeyBcCi0gICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUo
X19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAot
ICAgICAgICBDUkFTSF9XSVRIX0lORk8oX19WQV9BUkdTX18pOyBcCi0gICAgfSBcCi19IHdoaWxl
ICgwKQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQogbmFtZXNwYWNlIERGR0J5dGVDb2Rl
UGFyc2VySW50ZXJuYWwgeworI2lmZGVmIE5ERUJVRwogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotfQorI2Vsc2UKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSB0cnVlOwor
I2VuZGlmCit9IC8vIG5hbWVzcGFjZSBERkdCeXRlQ29kZVBhcnNlckludGVybmFsCisKKyNkZWZp
bmUgVkVSQk9TRV9MT0coLi4uKSBkbyB7IFwKK2lmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFs
Ojp2ZXJib3NlICYmIE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlY29kZVBhcnNpbmcoKSkgXAorZGF0
YUxvZyhfX1ZBX0FSR1NfXyk7IFwKK30gd2hpbGUgKGZhbHNlKQogCiBjbGFzcyBDb25zdGFudEJ1
ZmZlcktleSB7CiBwdWJsaWM6CkBAIC0xODEsNyArMTc5LDcgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICAgICAvLyBQYXJzZSBhIGZ1bGwgQ29kZUJsb2NrIG9mIGJ5dGVjb2RlLgotICAgIGJvb2wg
cGFyc2UoKTsKKyAgICB2b2lkIHBhcnNlKCk7CiAgICAgCiBwcml2YXRlOgogICAgIHN0cnVjdCBJ
bmxpbmVTdGFja0VudHJ5OwpAQCAtMTkxLDYgKzE4OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQogICAgIHsKKyAgICAgICAg
VkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVtTG9jYWxz
IGZyb20gIiwgbV9udW1Mb2NhbHMsICIgdG8gIiwgbmV3TnVtTG9jYWxzLCAiXG4iKTsKICAgICAg
ICAgaWYgKG5ld051bUxvY2FscyA8PSBtX251bUxvY2FscykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7CkBAIC0yMDMsMTYgKzIwMiwyMyBA
QCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2Rl
VHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgCiAgICAgdm9pZCBy
ZWZpbmVTdGF0aWNhbGx5KENhbGxMaW5rU3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCk7CisgICAg
Ly8gQmxvY2tzIGNhbiBlaXRoZXIgYmUgdGFyZ2V0YWJsZSAoaS5lLiBpbiB0aGUgbV9ibG9ja0xp
bmtpbmdUYXJnZXRzIG9mIG9uZSBJbmxpbmVTdGFja0VudHJ5KSB3aXRoIGEgd2VsbC1kZWZpbmVk
IGJ5dGVjb2RlQmVnaW4sCisgICAgLy8gb3IgdGhleSBjYW4gYmUgdW50YXJnZXRhYmxlLCB3aXRo
IGJ5dGVjb2RlQmVnaW49PVVJTlRfTUFYLCB0byBiZSBtYW5hZ2VkIG1hbnVhbGx5IGFuZCBub3Qg
YnkgdGhlIGxpbmtCbG9jayBtYWNoaW5lcnkuCisgICAgLy8gVGhpcyBpcyB1c2VkIG1vc3Qgbm90
YWJseSB3aGVuIGRvaW5nIHBvbHl2YXJpYW50IGlubGluaW5nIChpdCByZXF1aXJlcyBhIGZhaXIg
Yml0IG9mIGNvbnRyb2wtZmxvdyB3aXRoIG5vIGJ5dGVjb2RlIGFuYWxvZykuCisgICAgLy8gSXQg
aXMgYWxzbyB1c2VkIHdoZW4gZG9pbmcgYW4gZWFybHkgcmV0dXJuIGZyb20gYW4gaW5saW5lZCBj
YWxsZWU6IGl0IGlzIGVhc2llciB0byBmaXggdGhlIGJ5dGVjb2RlIGluZGV4IGxhdGVyIG9uIGlm
IG5lZWRlZAorICAgIC8vIHRoYW4gdG8gbW92ZSB0aGUgcmlnaHQgaW5kZXggYWxsIHRoZSB3YXkg
dG8gdGhlIHRyZWF0bWVudCBvZiBvcF9yZXQuCisgICAgQmFzaWNCbG9jayogYWxsb2NhdGVUYXJn
ZXRhYmxlQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgQmFzaWNCbG9jayogYWxs
b2NhdGVVbnRhcmdldGFibGVCbG9jaygpOworICAgIC8vIEFuIHVudGFyZ2V0YWJsZSBibG9jayBj
YW4gYmUgZ2l2ZW4gYSBieXRlY29kZUluZGV4IHRvIGJlIGxhdGVyIG1hbmFnZWQgYnkgbGlua0Js
b2NrLCBidXQgb25seSBvbmNlLCBhbmQgaXQgY2FuIG5ldmVyIGdvIGluIHRoZSBvdGhlciBkaXJl
Y3Rpb24KKyAgICB2b2lkIG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayosIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpOworICAgIHZvaWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsKKyAgICB2
b2lkIGFkZEp1bXBUbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAvLyBIYW5kbGUgY2Fs
bHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5z
aWNzLgogICAgIGVudW0gVGVybWluYWxpdHkgeyBUZXJtaW5hbCwgTm9uVGVybWluYWwgfTsKICAg
ICBUZXJtaW5hbGl0eSBoYW5kbGVDYWxsKAogICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBv
cCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCi0gICAg
ICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBD
YWxsTGlua1N0YXR1cywKKyAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzLAogICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBUZXJtaW5hbGl0eSBoYW5kbGVD
YWxsKAotICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUsIHVuc2lnbmVk
IGluc3RydWN0aW9uU2l6ZSwKLSAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ0NvdW50
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKLSAgICBUZXJtaW5hbGl0eSBo
YW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSwgdW5zaWduZWQgaW5z
dHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNl
dCk7CiAgICAgVGVybWluYWxpdHkgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBl
IG9wLCBDYWxsTW9kZSk7CiAgICAgVGVybWluYWxpdHkgaGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1
Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9u
Q2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c0FyZ3VtbnQpOwpAQCAtMjIxLDExICsyMjcsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBp
bmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFu
IGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29z
dCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2Vl
ZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUlu
bGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2Fs
bExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJn
dW1lbnQsIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1l
bnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRP
ZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uKTsKLSAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9l
c05vcm1hbExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGVja3NGdW5jdG9yPgotICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9m
ZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5l
eHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgotICAgIHZvaWQg
aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxW
YXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5r
YWJpbGl0eSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB2b2lkIGlu
bGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFy
aWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJ
bmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdp
dmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5s
aW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1
cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxs
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CkBAIC0zMDEsNyArMzA2LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwogICAgIC8v
IExpbmsgYmxvY2sgc3VjY2Vzc29ycy4KICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwg
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKLSAgICB2b2lkIGxpbmtCbG9j
a3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJhc2lj
QmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFy
Z2V0cyk7CiAgICAgCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewpAQCAtNzUyLDggKzc1Nyw3IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlY29kZVBhcnNpbmcoKSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAgICAgYXBwZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BOYW1l
KG5vZGUtPm9wKCkpLCAiXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgICAgICAgYXBwZW5k
ZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCAiXG4iKTsKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChub2RlKTsKICAgICAgICAgaWYgKGNsb2JiZXJzRXhp
dFN0YXRlKG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKQEAg
LTExMTUsMzMgKzExMTksMjQgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBt
X2NvbnN0YW50QnVmZmVyUmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9zd2l0Y2hS
ZW1hcDsKICAgICAgICAgCi0gICAgICAgIC8vIEJsb2NrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY29k
ZSBibG9jaywgd2hpY2ggbmVlZCBzdWNjZXNzb3IgbGlua2luZy4KLSAgICAgICAgLy8gTWF5IGlu
Y2x1ZGUgdXAgdG8gb25lIGJhc2ljIGJsb2NrIHRoYXQgaW5jbHVkZXMgdGhlIGNvbnRpbnVhdGlv
biBhZnRlcgotICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW4gdGhlIGNhbGxlci4gVGhlc2UgbXVz
dCBiZSBhcHBlbmRlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5Ci0gICAgICAgIC8vIGFyZSBjcmVh
dGVkLCBidXQgdGhlaXIgYnl0ZWNvZGVCZWdpbiB2YWx1ZXMgbmVlZCBub3QgYmUgaW4gb3JkZXIg
YXMgdGhleQotICAgICAgICAvLyBhcmUgaWdub3JlZC4KLSAgICAgICAgVmVjdG9yPFVubGlua2Vk
QmxvY2s+IG1fdW5saW5rZWRCbG9ja3M7CisgICAgICAgIC8vIFRoZXNlIGFyZSBibG9ja3Mgd2hv
c2UgdGVybWluYWwgaXMgYSBKdW1wLCBCcmFuY2ggb3IgU3dpdGNoLCBhbmQgd2hvc2UgdGFyZ2V0
IGhhcyBub3QgeWV0IGJlZW4gbGlua2VkLgorICAgICAgICAvLyBUaGVpciB0ZXJtaW5hbCBpbnN0
ZWFkIHJlZmVycyB0byBhIGJ5dGVjb2RlIGluZGV4LCBhbmQgdGhlIHJpZ2h0IEJCIGNhbiBiZSBm
b3VuZCBpbiBtX2Jsb2NrTGlua2luZ1RhcmdldHMuCisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gbV91bmxpbmtlZEJsb2NrczsKICAgICAgICAgCiAgICAgICAgIC8vIFBvdGVudGlhbCBibG9j
ayBsaW5raW5nIHRhcmdldHMuIE11c3QgYmUgc29ydGVkIGJ5IGJ5dGVjb2RlQmVnaW4sIGFuZAog
ICAgICAgICAvLyBjYW5ub3QgaGF2ZSB0d28gYmxvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSBieXRl
Y29kZUJlZ2luLgogICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tMaW5raW5nVGFy
Z2V0czsKIAotICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3Bs
aXQgaW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCi0gICAgICAgIC8vIHRoZSBoZWFkIG9mIHRo
ZSBjYWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQot
ICAgICAgICAvLyBtX3VubGlua2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5k
OiB0aGVyZSdzIG5vIHdheSBmb3IKLSAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2Vk
QmxvY2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgIEJhc2ljQmxvY2sq
IG1fY2FsbHNpdGVCbG9ja0hlYWQ7Ci0gICAgICAgIAotICAgICAgICAvLyBEb2VzIHRoZSBjYWxs
c2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8gVGhpcyBpcyB0eXBpY2FsbHkgdHJ1ZQotICAg
ICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3IgdGhlIG1hY2hpbmUgY29kZSBibG9jaydzIGlu
bGluZSBzdGFjayBlbnRyeQotICAgICAgICAvLyAoc2luY2UgdGhhdCBvbmUgaXMgbm90IGlubGlu
ZWQpIGFuZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW5saW5lIGNhbGxlZQotICAgICAgICAvLyBkaWQg
dGhlIGxpbmtpbmcgZm9yIHVzLgotICAgICAgICBib29sIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVk
c0xpbmtpbmc7Ci0gICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNldCBieSBvcF9lbnRlciBp
biBwYXJzZUJsb2NrKCksIGFuZCBpbmRpY2F0ZXMgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBmdW5j
dGlvbi4KKyAgICAgICAgQmFzaWNCbG9jayogbV9lbnRyeUJsb2NrOworCisgICAgICAgIC8vIE9w
dGlvbmFsOiBhIGNvbnRpbnVhdGlvbiBibG9jayBmb3IgcmV0dXJucyB0byBqdW1wIHRvLiBJdCBp
cyBzZXQgYnkgZWFybHkgcmV0dXJucyBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAgICAgICAgQmFz
aWNCbG9jayogbV9jb250aW51YXRpb25CbG9jazsKKwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9yZXR1cm5WYWx1ZTsKICAgICAgICAgCiAgICAgICAgIC8vIFNwZWN1bGF0aW9ucyBhYm91dCB2
YXJpYWJsZSB0eXBlcyBjb2xsZWN0ZWQgZnJvbSB0aGUgcHJvZmlsZWQgY29kZSBibG9jaywKLSAg
ICAgICAgLy8gd2hpY2ggYXJlIGJhc2VkIG9uIE9TUiBleGl0IHByb2ZpbGVzIHRoYXQgcGFzdCBE
RkcgY29tcGlsYXRpbnMgb2YgdGhpcworICAgICAgICAvLyB3aGljaCBhcmUgYmFzZWQgb24gT1NS
IGV4aXQgcHJvZmlsZXMgdGhhdCBwYXN0IERGRyBjb21waWxhdGlvbnMgb2YgdGhpcwogICAgICAg
ICAvLyBjb2RlIGJsb2NrIGhhZCBnYXRoZXJlZC4KICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVQYXJzZXIgbV9sYXp5T3BlcmFuZHM7CiAgICAgICAgIApAQCAtMTE0OSwxMyArMTE0NCw2
IEBAIHByaXZhdGU6CiAgICAgICAgIFN0dWJJbmZvTWFwIG1fc3R1YkluZm9zOwogICAgICAgICBC
eVZhbEluZm9NYXAgbV9ieVZhbEluZm9zOwogICAgICAgICAKLSAgICAgICAgLy8gRGlkIHdlIHNl
ZSBhbnkgcmV0dXJucz8gV2UgbmVlZCB0byBoYW5kbGUgdGhlICh1bmNvbW1vbiBidXQgbmVjZXNz
YXJ5KQotICAgICAgICAvLyBjYXNlIHdoZXJlIGEgcHJvY2VkdXJlIHRoYXQgZG9lcyBub3QgcmV0
dXJuIHdhcyBpbmxpbmVkLgotICAgICAgICBib29sIG1fZGlkUmV0dXJuOwotICAgICAgICAKLSAg
ICAgICAgLy8gRGlkIHdlIGhhdmUgYW55IGVhcmx5IHJldHVybnM/Ci0gICAgICAgIGJvb2wgbV9k
aWRFYXJseVJldHVybjsKLSAgICAgICAgCiAgICAgICAgIC8vIFBvaW50ZXJzIHRvIHRoZSBhcmd1
bWVudCBwb3NpdGlvbiB0cmFja2VycyBmb3IgdGhpcyBzbGljZSBvZiBjb2RlLgogICAgICAgICBW
ZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAgICAgICAgIApA
QCAtMTE2NSw3ICsxMTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEJ5dGVDb2RlUGFyc2Vy
KiwKICAgICAgICAgICAgIENvZGVCbG9jayosCiAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVhZCwKICAg
ICAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3Vy
ZSBjYWxsLgogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0xMjAzLDcg
KzExOTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAg
ICAgICAgLCBtX3NldE1vZGUoc2V0TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgUEFSU0VS
X0FTU0VSVChvcGVyYW5kLmlzVmFsaWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChv
cGVyYW5kLmlzVmFsaWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGV4
ZWN1dGUoQnl0ZUNvZGVQYXJzZXIqIHBhcnNlcikKQEAgLTEyMjQsNjcgKzEyMTEsNzIgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faGFzRGVidWdnZXJFbmFibGVkOwogfTsKIAotLy8gVGhlIGlkaW9t
OgotLy8gICAgIGlmICh0cnVlKSB7IC4uLjsgZ290byBsYWJlbDsgfSBlbHNlIGxhYmVsOiBjb250
aW51ZQotLy8gQWxsb3dzIHVzaW5nIE5FWFRfT1BDT0RFIGFzIGEgc3RhdGVtZW50LCBldmVuIGlu
IHVuYnJhY2VkIGlmK2Vsc2UsIHdoaWxlIGNvbnRhaW5pbmcgYSBgY29udGludWVgLgotLy8gVGhl
IG1vcmUgY29tbW9uIGlkaW9tOgotLy8gICAgIGRvIHsgLi4uOyB9IHdoaWxlIChmYWxzZSkKLS8v
IERvZXNuJ3QgYWxsb3cgdXNpbmcgYGNvbnRpbnVlYC4KLSNkZWZpbmUgTkVYVF9PUENPREUobmFt
ZSkgXAotICAgIGlmICh0cnVlKSB7IFwKLSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RF
X0xFTkdUSChuYW1lKTsgXAotICAgICAgICBnb3RvIFdURl9DT05DQVQoTkVYVF9PUENPREVfLCBf
X0xJTkVfXyk7IC8qIE5lZWQgYSB1bmlxdWUgbGFiZWw6IHVzYWJsZSBtb3JlIHRoYW4gb25jZSBw
ZXIgZnVuY3Rpb24uICovIFwKLSAgICB9IGVsc2UgXAotICAgIFdURl9DT05DQVQoTkVYVF9PUENP
REVfLCBfX0xJTkVfXyk6IFwKLSAgICAgICAgY29udGludWUKK0Jhc2ljQmxvY2sqIEJ5dGVDb2Rl
UGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayh1bnNpZ25lZCBieXRlY29kZUluZGV4KQor
eworICAgIEFTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKKyAgICBSZWY8QmFzaWNC
bG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgQmFzaWNCbG9jayogYmxvY2tQdHIg
PSBibG9jay5wdHIoKTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMuYXBwZW5kKGJsb2NrUHRyKTsKKyAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxv
Y2spKTsKKyAgICByZXR1cm4gYmxvY2tQdHI7Cit9CiAKLS8vIENoYWluIGV4cHJlc3Npb25zIHdp
dGggY29tbWEtb3BlcmF0b3Igc28gTEFTVF9PUENPREUgY2FuIGJlIHVzZWQgYXMgYSBzdGF0ZW1l
bnQuCi0jZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKLSAgICByZXR1cm4gXAotICAgICAgICBt
X2N1cnJlbnRJbmRleCArPSBPUENPREVfTEVOR1RIKG5hbWUpLCBcCi0gICAgICAgIG1fZXhpdE9L
ID0gZmFsc2UsIFwKLSAgICAgICAgc2hvdWxkQ29udGludWVQYXJzaW5nCitCYXNpY0Jsb2NrKiBC
eXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCit7CisgICAgUmVmPEJh
c2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBtX251
bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9
IGJsb2NrLnB0cigpOworICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwor
ICAgIHJldHVybiBibG9ja1B0cjsKK30KIAotQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENh
bGxNb2RlIGNhbGxNb2RlKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bWFrZUJsb2NrVGFyZ2V0YWJs
ZShCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NF
UlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCkp
OwotICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3Bf
dGFpbF9jYWxsKSk7Ci0gICAgcmV0dXJuIGhhbmRsZUNhbGwoCi0gICAgICAgIHBjWzFdLnUub3Bl
cmFuZCwgb3AsIGNhbGxNb2RlLCBPUENPREVfTEVOR1RIKG9wX2NhbGwpLAotICAgICAgICBwY1sy
XS51Lm9wZXJhbmQsIHBjWzNdLnUub3BlcmFuZCwgLXBjWzRdLnUub3BlcmFuZCk7CisgICAgQVNT
RVJUKGJsb2NrLT5ieXRlY29kZUJlZ2luID09IFVJTlRfTUFYKTsKKyAgICBibG9jay0+Ynl0ZWNv
ZGVCZWdpbiA9IGJ5dGVjb2RlSW5kZXg7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xp
bmtpbmdUYXJnZXRzLmFwcGVuZChibG9jayk7CiB9CiAKLUJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5h
bGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAgICBpbnQgcmVzdWx0LCBOb2RlVHlw
ZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKLSAgICBp
bnQgY2FsbGVlLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGludCByZWdpc3Rlck9m
ZnNldCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFkZEp1bXBUbyhCYXNpY0Jsb2NrKiBibG9jaykK
IHsKLSAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsK
KyAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKKyAgICBOb2RlKiBqdW1w
Tm9kZSA9IGFkZFRvR3JhcGgoSnVtcCk7CisgICAganVtcE5vZGUtPnRhcmdldEJsb2NrKCkgPSBi
bG9jazsKKyAgICBtX2N1cnJlbnRCbG9jay0+ZGlkTGluaygpOworfQorCit2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjphZGRKdW1wVG8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBBU1NFUlQo
IW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKKyAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5m
byhieXRlY29kZUluZGV4KSk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworfQorCitCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxp
dHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBv
cCwgQ2FsbE1vZGUgY2FsbE1vZGUpCit7CisgICAgc3RhdGljX2Fzc2VydChPUENPREVfTEVOR1RI
KG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSwKKyAgICAgICAgIm9wX2Nh
bGwsIG9wX3RhaWxfY2FsbCBhbmQgb3BfY29uc3RydWN0IHNob3VsZCBhbHdheXMgaGF2ZSB0aGUg
c2FtZSBsZW5ndGgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KE9QQ09ERV9MRU5HVEgob3BfY2FsbCkg
PT0gT1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGwpLAorICAgICAgICAib3BfY2FsbCwgb3BfdGFp
bF9jYWxsIGFuZCBvcF9jb25zdHJ1Y3Qgc2hvdWxkIGFsd2F5cyBoYXZlIHRoZSBzYW1lIGxlbmd0
aCIpOwogICAgIAorICAgIGludCByZXN1bHQgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgTm9kZSog
Y2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIocGNbMl0udS5vcGVyYW5kKSk7CisgICAg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gcGNbM10udS5vcGVyYW5kOworICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IC1wY1s0XS51Lm9wZXJhbmQ7CisKICAgICBDYWxsTGlua1N0YXR1
cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCiAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1h
cCk7Ci0gICAgCi0gICAgcmV0dXJuIGhhbmRsZUNhbGwoCi0gICAgICAgIHJlc3VsdCwgb3AsIGNh
bGxNb2RlLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCi0gICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMpOwotfQotICAg
IAotQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxs
KAotICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSwgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25TaXplLAotICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAotICAgIENhbGxMaW5rU3RhdHVz
IGNhbGxMaW5rU3RhdHVzKQotewotICAgIHJldHVybiBoYW5kbGVDYWxsKAotICAgICAgICByZXN1
bHQsIG9wLCBJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3IoY2FsbE1vZGUpLCBpbnN0cnVjdGlvblNp
emUsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgICAgICByZWdp
c3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMsIGdldFByZWRpY3Rpb24oKSk7CisKKyAgICBJbmxp
bmVDYWxsRnJhbWU6OktpbmQga2luZCA9IElubGluZUNhbGxGcmFtZTo6a2luZEZvcihjYWxsTW9k
ZSk7CisKKyAgICByZXR1cm4gaGFuZGxlQ2FsbChyZXN1bHQsIG9wLCBraW5kLCBPUENPREVfTEVO
R1RIKG9wX2NhbGwpLCBjYWxsVGFyZ2V0LAorICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQcmVkaWN0aW9uKCkpOwog
fQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5KENhbGxMaW5rU3RhdHVz
JiBjYWxsTGlua1N0YXR1cywgTm9kZSogY2FsbFRhcmdldCkKIHsKLSAgICBpZiAoY2FsbFRhcmdl
dC0+aXNDZWxsQ29uc3RhbnQoKSkgeworICAgIGlmIChjYWxsVGFyZ2V0LT5pc0NlbGxDb25zdGFu
dCgpKQogICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxs
VmFyaWFudChjYWxsVGFyZ2V0LT5hc0NlbGwoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQog
fQogCiBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNh
bGwoCkBAIC0xMjk2LDM5ICsxMjg4LDM3IEBAIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKIAogICAgIHJlZmluZVN0YXRpY2FsbHkoY2FsbExp
bmtTdGF0dXMsIGNhbGxUYXJnZXQpOwogICAgIAotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZH
Qnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjYWxsIGF0
ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKKyAg
ICBWRVJCT1NFX0xPRygiICAgIEhhbmRsaW5nIGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmlnaW4o
KSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIpOwogICAgIAotICAgIGlmICghY2FsbExpbmtT
dGF0dXMuY2FuT3B0aW1pemUoKSkgewotICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMg
Y2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZp
Y2llbnRseSBwb2x5bW9ycGhpY2FsbHkKLSAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1p
emUgdGhlbS4KKyAgICAvLyBXZSBmaXJzdCBjaGVjayB0aGF0IHdlIGhhdmUgcHJvZmlsaW5nIGlu
Zm9ybWF0aW9uIGFib3V0IHRoaXMgY2FsbCwgYW5kIHRoYXQgaXQgZGlkIG5vdCBiZWhhdmUgdG9v
IHBvbHltb3JwaGljYWxseS4KKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50ID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogCi0gICAgICAgIE5vZGUqIGNhbGxOb2Rl
ID0gYWRkQ2FsbChyZXN1bHQsIG9wLCBudWxscHRyLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwotICAgICAgICBpZiAo
Y2FsbE5vZGUtPm9wKCkgPT0gVGFpbENhbGwpCi0gICAgICAgICAgICByZXR1cm4gVGVybWluYWw7
Ci0gICAgICAgIEFTU0VSVChjYWxsTm9kZS0+b3AoKSAhPSBUYWlsQ2FsbFZhcmFyZ3MgJiYgY2Fs
bE5vZGUtPm9wKCkgIT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7Ci0gICAgICAgIHJldHVybiBO
b25UZXJtaW5hbDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IG1fY3Vy
cmVudEluZGV4ICsgaW5zdHJ1Y3Rpb25TaXplOwotICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmlu
ZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5k
LCBwcmVkaWN0aW9uKSkgewotICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlv
bigpKSkKLSAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENh
bGwoKTsKLSAgICAgICAgcmV0dXJuIE5vblRlcm1pbmFsOworICAgICAgICAvLyBJbmxpbmluZyBp
cyBxdWl0ZSBjb21wbGV4LCBhbmQgbWFuYWdlZCBieSBhIHBpcGVsaW5lIG9mIGZ1bmN0aW9uczoK
KyAgICAgICAgLy8gaGFuZGxlKFZhcmFyZ3MpQ2FsbCAtPiBoYW5kbGVJbmxpbmluZyAtPiBhdHRl
bXB0VG9JbmxpbmVDYWxsIC0+IGlubGluZUNhbGwKKyAgICAgICAgLy8gLSBoYW5kbGVDYWxsIGFu
ZCBoYW5kbGVWYXJhcmdzQ2FsbCBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgbm8gaW5saW5pbmcg
aGFwcGVucywgYW5kIGRvIHNvbWUgc2FuaXR5IGNoZWNrcyBvbiB0aGVpciBhcmd1bWVudHMKKyAg
ICAgICAgLy8gLSBoYW5kbGVJbmxpbmluZyBjaGVja3Mgd2hldGhlciB0aGUgY2FsbCBpcyBwb2x5
bW9ycGhpYywgYW5kIGlmIHNvIGlzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBzd2l0Y2gg
b24gdGhlIGNhbGxlZQorICAgICAgICAvLyAtIGF0dGVtcHRUb0lubGluZUNhbGwgZGVhbHMgd2l0
aCBzcGVjaWFsIGNhc2VzIHN1Y2ggYXMgaW50cmluc2ljcywgaXQgYWxzbyBjaGVja3MgdGhlIGlu
bGluaW5nIGhldXJpc3RpYyAodGhyb3VnaCBpbmxpbmluZ0Nvc3QpCisgICAgICAgIC8vIC0gaW5s
aW5lQ2FsbCBmaW5hbGx5IGRvZXMgdGhlIGFjdHVhbCBpbmxpbmluZywgYWZ0ZXIgYSBjb21wbGlj
YXRlZCBwcm9jZWR1cmUgdG8gc2V0dXAgdGhlIHN0YWNrIGNvcnJlY3RseQorICAgICAgICB1bnNp
Z25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBpbnN0cnVjdGlvblNpemU7CisgICAg
ICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVz
LCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgMCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9u
KSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgp
OworICAgICAgICAgICAgcmV0dXJuIE5vblRlcm1pbmFsOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIE5vZGUqIGNhbGxOb2RlID0gYWRkQ2FsbChyZXN1bHQsIG9wLCBudWxscHRyLCBjYWxs
VGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRp
Y3Rpb24pOwotICAgIGlmIChjYWxsTm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkKLSAgICAgICAgcmV0
dXJuIFRlcm1pbmFsOwogICAgIEFTU0VSVChjYWxsTm9kZS0+b3AoKSAhPSBUYWlsQ2FsbFZhcmFy
Z3MgJiYgY2FsbE5vZGUtPm9wKCkgIT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7Ci0gICAgcmV0
dXJuIE5vblRlcm1pbmFsOworICAgIHJldHVybiBjYWxsTm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCA/
IFRlcm1pbmFsIDogTm9uVGVybWluYWw7CiB9CiAKIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0
eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2Rl
VHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7Ci0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgo
b3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7
Ci0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVfTEVO
R1RIKG9wX3RhaWxfY2FsbF92YXJhcmdzKSk7CisgICAgc3RhdGljX2Fzc2VydChPUENPREVfTEVO
R1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJn
cyksCisgICAgICAgICJvcF9jYWxsX3ZhcmFyZ3MsIG9wX3RhaWxfY2FsbF92YXJhcmdzIGFuZCBv
cF9jb25zdHJ1Y3RfdmFyYXJncyBzaG91bGQgYWx3YXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7
CisgICAgc3RhdGljX2Fzc2VydChPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BD
T0RFX0xFTkdUSChvcF90YWlsX2NhbGxfdmFyYXJncyksCisgICAgICAgICJvcF9jYWxsX3ZhcmFy
Z3MsIG9wX3RhaWxfY2FsbF92YXJhcmdzIGFuZCBvcF9jb25zdHJ1Y3RfdmFyYXJncyBzaG91bGQg
YWx3YXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7CiAKICAgICBpbnQgcmVzdWx0ID0gcGNbMV0u
dS5vcGVyYW5kOwogICAgIGludCBjYWxsZWUgPSBwY1syXS51Lm9wZXJhbmQ7CkBAIC0xMzQ2LDgg
KzEzMzYsNyBAQCBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTgogICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOwogICAgIHJlZmluZVN0YXRp
Y2FsbHkoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXQpOwogICAgIAotICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgIGRhdGFMb2coIiAgICBWYXJh
cmdzIGNhbGwgbGluayBzdGF0dXMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2Fs
bExpbmtTdGF0dXMsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgVmFyYXJncyBjYWxsIGxp
bmsgc3RhdHVzIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVz
LCAiXG4iKTsKICAgICAKICAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKQogICAg
ICAgICAmJiBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVz
LCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSwgVmlydHVhbFJlZ2lzdGVy
KGFyZ3VtZW50cyksIGZpcnN0VmFyQXJnT2Zmc2V0LCAwLCBtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgb3AsIElubGluZUNhbGxGcmFtZTo6dmFyYXJnc0tp
bmRGb3IoY2FsbE1vZGUpLCBwcmVkaWN0aW9uKSkgewpAQCAtMTQyNiwxOSArMTQxNSwxNiBAQCB1
bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50IGNhbGxlZSwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdQogewogICAgIENhbGxNb2RlIGNhbGxNb2RlID0gSW5saW5l
Q2FsbEZyYW1lOjpjYWxsTW9kZUZvcihraW5kKTsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IHNwZWNpYWxpemF0aW9uS2luZCA9IHNwZWNpYWxpemF0aW9uS2luZEZvcihjYWxsTW9kZSk7Ci0g
ICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIkNvbnNpZGVyaW5nIGlubGluaW5nICIsIGNhbGxlZSwgIiBpbnRvICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCJDb25zaWRlcmluZyBpbmxpbmluZyAi
LCBjYWxsZWUsICIgaW50byAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKICAgICAKICAg
ICBpZiAobV9oYXNEZWJ1Z2dlckVuYWJsZWQpIHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFy
c2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBi
ZWNhdXNlIHRoZSBkZWJ1Z2dlciBpcyBpbiB1c2UuXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0co
IiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlIGRlYnVnZ2VyIGlzIGluIHVzZS5cbiIpOwogICAgICAg
ICByZXR1cm4gVUlOVF9NQVg7CiAgICAgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogICAgIGlmICghZXhlY3V0YWJs
ZSkgewotICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVuY3Rp
b24gZXhlY3V0YWJsZS5cbiIpOworICAgICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcgYmVj
YXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiBleGVjdXRhYmxlLlxuIik7CiAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKICAgICB9CiAgICAgCkBAIC0xNDUxLDMzICsxNDM3LDI4IEBAIHVuc2lnbmVk
IEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1CiAgICAgLy8gaXQncyBhIHJhcmUgY2FzZSBiZWNhdXNlIHdlIGV4cGVj
dCB0aGF0IGFueSBob3QgY2FsbGVlcyB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4K
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKCFjb2RlQmxvY2spIHsKLSAgICAgICAg
aWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIG5vIGNvZGUgYmxvY2sgYXZhaWxhYmxlLlxuIik7Cisg
ICAgICAgIFZFUkJPU0VfTE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIG5vIGNvZGUgYmxvY2sgYXZh
aWxhYmxlLlxuIik7CiAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAKICAgICBpZiAo
IU9wdGlvbnM6OnVzZUFyaXR5Rml4dXBJbmxpbmluZygpKSB7CiAgICAgICAgIGlmIChjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSA+IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7Ci0gICAg
ICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIG9mIGFyaXR5IG1pc21hdGNoLlxu
Iik7CisgICAgICAgICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcgYmVjYXVzZSBvZiBhcml0
eSBtaXNtYXRjaC5cbiIpOwogICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCA9IGlubGluZUZ1
bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAogICAgICAgICBjb2RlQmxvY2ssIHNwZWNpYWxpemF0
aW9uS2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSk7Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFy
c2VySW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiICAgIENhbGwgbW9kZTog
IiwgY2FsbE1vZGUsICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgSXMgY2xvc3VyZSBjYWxs
OiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygiICAg
IENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlMZXZlbCwgIlxuIik7Ci0gICAgICAgIGRh
dGFMb2coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rpb246ICIsIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3IoY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQpLCAiXG4iKTsKLSAgICAgICAgZGF0YUxv
ZygiICAgIE1pZ2h0IGNvbXBpbGUgZnVuY3Rpb246ICIsIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9y
KGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5kKSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2co
IiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5nOiAiLCBpc1N1cHBvcnRlZEZvcklubGluaW5n
KGNvZGVCbG9jayksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcgY2Fu
ZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lubGluaW5n
Q2FuZGlkYXRlKCksICJcbiIpOwotICAgIH0KKyAgICBWRVJCT1NFX0xPRygiICAgIENhbGwgbW9k
ZTogIiwgY2FsbE1vZGUsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgSXMgY2xvc3VyZSBj
YWxsOiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4iKTsKKyAgICBWRVJCT1NFX0xPRygi
ICAgIENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlMZXZlbCwgIlxuIik7CisgICAgVkVS
Qk9TRV9MT0coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rpb246ICIsIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3IoY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQpLCAiXG4iKTsKKyAgICBWRVJCT1NF
X0xPRygiICAgIE1pZ2h0IGNvbXBpbGUgZnVuY3Rpb246ICIsIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yKGNvZGVCbG9jaywgc3BlY2lhbGl6YXRpb25LaW5kKSwgIlxuIik7CisgICAgVkVSQk9TRV9M
T0coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5nOiAiLCBpc1N1cHBvcnRlZEZvcklubGlu
aW5nKGNvZGVCbG9jayksICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgSXMgaW5saW5pbmcg
Y2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lubGlu
aW5nQ2FuZGlkYXRlKCksICJcbiIpOwogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZl
bCkpIHsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBu
b3QgaW5saW5lYWJsZS5cbiIpOworICAgICAgICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcgYmVj
YXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGlubGluZWFibGUuXG4iKTsKICAgICAgICAgcmV0dXJu
IFVJTlRfTUFYOwogICAgIH0KICAgICAKQEAgLTE0ODYsOCArMTQ2Nyw3IEBAIHVuc2lnbmVkIEJ5
dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgYXJndW1l
bnRDb3VudEluY2x1CiAgICAgLy8gcHVycG9zZSBvZiB1bnNldHRpbmcgU0FCSS4KICAgICBpZiAo
IWlzU21hbGxFbm91Z2hUb0lubGluZUNvZGVJbnRvKG1fY29kZUJsb2NrKSkgewogICAgICAgICBj
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChE
RkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHRvbyBsYXJnZS5cbiIpOworICAgICAg
ICBWRVJCT1NFX0xPRygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHRvbyBsYXJn
ZS5cbiIpOwogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgfQogICAgIApAQCAtMTUxMCwz
MCArMTQ5MCwyNyBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxW
YXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogICAgIGZvciAoSW5saW5lU3Rh
Y2tFbnRyeSogZW50cnkgPSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+
bV9jYWxsZXIpIHsKICAgICAgICAgKytkZXB0aDsKICAgICAgICAgaWYgKGRlcHRoID49IE9wdGlv
bnM6Om1heGltdW1JbmxpbmluZ0RlcHRoKCkpIHsKLSAgICAgICAgICAgIGlmIChERkdCeXRlQ29k
ZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBG
YWlsaW5nIGJlY2F1c2UgZGVwdGggZXhjZWVkZWQuXG4iKTsKKyAgICAgICAgICAgIFZFUkJPU0Vf
TE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIGRlcHRoIGV4Y2VlZGVkLlxuIik7CiAgICAgICAgICAg
ICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChlbnRy
eS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpIHsKICAgICAgICAgICAgICsrcmVjdXJzaW9u
OwogICAgICAgICAgICAgaWYgKHJlY3Vyc2lvbiA+PSBPcHRpb25zOjptYXhpbXVtSW5saW5pbmdS
ZWN1cnNpb24oKSkgewotICAgICAgICAgICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBi
ZWNhdXNlIHJlY3Vyc2lvbiBkZXRlY3RlZC5cbiIpOworICAgICAgICAgICAgICAgIFZFUkJPU0Vf
TE9HKCIgICAgRmFpbGluZyBiZWNhdXNlIHJlY3Vyc2lvbiBkZXRlY3RlZC5cbiIpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZygiICAgIElubGluaW5nIHNob3VsZCBiZSBwb3NzaWJsZS5cbiIpOworICAg
IFZFUkJPU0VfTE9HKCIgICAgSW5saW5pbmcgc2hvdWxkIGJlIHBvc3NpYmxlLlxuIik7CiAgICAg
CiAgICAgLy8gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gaW5saW5lLgogICAgIHJldHVybiBjb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tz
RnVuY3Rvcj4KLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVy
TGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKK3ZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQga2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAg
IENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZy
YW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgCkBAIC0xNTc4LDggKzE1NTUs
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcgogICAgICAgICBjYWxsZWVWYXJpYWJsZS0+bWVy
Z2VTaG91bGROZXZlclVuYm94KHRydWUpOwogICAgIH0KIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Tm9kZSosIFZpcnR1YWxSZWdpc3Rlcj4+IGRlbGF5ZWRBcml0eVNldHM7Ci0KICAgICBpZiAoYXJp
dHlGaXh1cENvdW50KSB7CiAgICAgICAgIC8vIE5vdGU6IHdlIGRvIGFyaXR5IGZpeHVwIGluIHR3
byBwaGFzZXM6CiAgICAgICAgIC8vIDEuIFdlIGdldCBhbGwgdGhlIHZhbHVlcyB3ZSBuZWVkIGFu
ZCBNb3ZIaW50IHRoZW0gdG8gdGhlIGV4cGVjdGVkIGxvY2Fscy4KQEAgLTE2MzAsMTAgKzE2MDUs
OSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcgogICAgICAgICAvLyBvdXIgY2FsbGVlJ3MgZnJh
bWUuIFdlIGVtaXQgYW4gRXhpdE9LIGJlbG93IGZyb20gdGhlIGNhbGxlZSdzIENvZGVPcmlnaW4u
CiAgICAgfQogCi0gICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAg
ICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5sYXN0QmxvY2soKSwgY2FsbGVl
LmZ1bmN0aW9uKCksIHJlc3VsdFJlZywKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNr
RW50cnkodGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxlZS5mdW5jdGlvbigpLCByZXN1
bHRSZWcsCiAgICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsKLSAgICAKKwogICAgIC8vIFRoaXMgaXMg
d2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICB1bnNpZ25lZCBv
bGRJbmRleCA9IG1fY3VycmVudEluZGV4OwogICAgIG1fY3VycmVudEluZGV4ID0gMDsKQEAgLTE2
NDksMTEgKzE2MjMsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXIKICAgICBpbmxpbmVWYXJp
YWJsZURhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gYXJndW1lbnRQb3NpdGlvblN0YXJ0Owog
ICAgIGlubGluZVZhcmlhYmxlRGF0YS5jYWxsZWVWYXJpYWJsZSA9IDA7CiAgICAgCi0gICAgUEFS
U0VSX0FTU0VSVCgKKyAgICBSRUxFQVNFX0FTU0VSVCgKICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgPT0gY2FsbGVlLmlz
Q2xvc3VyZUNhbGwoKSk7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKLSAgICAg
ICAgUEFSU0VSX0FTU0VSVChjYWxsZWVWYXJpYWJsZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxlZVZhcmlhYmxlKTsKICAgICAgICAgaW5saW5lVmFyaWFibGVEYXRhLmNhbGxlZVZhcmlh
YmxlID0gY2FsbGVlVmFyaWFibGU7CiAgICAgfQogICAgIApAQCAtMTY2NCwxMTcgKzE2MzgsMzQg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
aW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXIKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9s
ZEluZGV4OwogICAgIG1fZXhpdE9LID0gZmFsc2U7CisKKyAgICBsaW5rQmxvY2tzKGlubGluZVN0
YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlua2lu
Z1RhcmdldHMpOwogICAgIAotICAgIC8vIElmIHRoZSBpbmxpbmVkIGNvZGUgY3JlYXRlZCBzb21l
IG5ldyBiYXNpYyBibG9ja3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRvIGRvLgotICAgIGlmIChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5sYXN0QmxvY2so
KSkgewotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxs
c2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZykKLSAgICAgICAgICAgIGxpbmtCbG9jayhpbmxpbmVT
dGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xp
bmtpbmdUYXJnZXRzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0
YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZC0+aXNMaW5rZWQpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKGNhbGxlckxpbmthYmlsaXR5ID09IENhbGxlckRvZXNOb3JtYWxMaW5raW5nKQotICAg
ICAgICAgICAgY2FuY2VsTGlua2luZ0ZvckJsb2NrKGlubGluZVN0YWNrRW50cnkubV9jYWxsZXIs
IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7Ci0gICAgICAgIAotICAgICAg
ICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3Rh
Y2tFbnRyeS5tX2Jsb2NrTGlua2luZ1RhcmdldHMpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NF
UlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7Ci0gICAgCi0g
ICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5sYXN0QmxvY2soKTsKLSAgICAvLyBJ
ZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRv
bmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKLSAgICAvLyB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGlu
IHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5vdy4KLSAgICBpZiAoIWlubGlu
ZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVTdGFja0VudHJ5Lm1fZGlkUmV0
dXJuKSB7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkp
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQWxsb3dpbmcgcGFyc2luZyB0byBjb250aW51ZSBp
biBsYXN0IGlubGluZWQgYmxvY2suXG4iKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChsYXN0
QmxvY2stPmlzRW1wdHkoKSB8fCAhbGFzdEJsb2NrLT50ZXJtaW5hbCgpKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIElmIHdlIGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2NrIG5l
ZWRzIGxpbmtpbmcsIGJ1dCBpbiB0aGUKLSAgICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0IG5l
ZWQgdG8gYmUgbGlua2VkIHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcgbGlua3MuCi0gICAgICAg
IGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgc2V0IHRoZSBieXRlY29kZUJlZ2lu
LiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IG1hdHRlcgotICAgICAgICAgICAgLy8gZm9yIHJlbGVh
c2UgYnVpbGRzIGJlY2F1c2UgdGhpcyBibG9jayB3aWxsIG5ldmVyIHNlcnZlIGFzIGEgcG90ZW50
aWFsIHRhcmdldAotICAgICAgICAgICAgLy8gaW4gdGhlIGxpbmtlcidzIGJpbmFyeSBzZWFyY2gu
Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVjb2RlUGFyc2luZygpKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgUmVwdXJwb3NpbmcgbGFzdCBibG9jayBm
cm9tICIsIGxhc3RCbG9jay0+Ynl0ZWNvZGVCZWdpbiwgIiB0byAiLCBtX2N1cnJlbnRJbmRleCwg
IlxuIik7Ci0gICAgICAgICAgICBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJ
bmRleDsKLSAgICAgICAgICAgIGlmIChjYWxsZXJMaW5rYWJpbGl0eSA9PSBDYWxsZXJEb2VzTm9y
bWFsTGlua2luZykgewotICAgICAgICAgICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgdW5saW5r
ZWQgYmxvY2sgIiwgUmF3UG9pbnRlcihtX2dyYXBoLmxhc3RCbG9jaygpKSwgIiAob25lIHJldHVy
bilcbiIpOwotICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3Vu
bGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubGFzdEJsb2NrKCkpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBtX2dyYXBoLmxhc3RCbG9jaygpOwotICAgICAgICByZXR1cm47CisgICAgLy8gSWYgdGhl
IGNhbGxlZSByZXR1cm5lZCBhdCBsZWFzdCBvbmNlLCBpdCBwcmVwYXJlZCBhIGNvbnRpbnVhdGlv
biBibG9jayBmb3IgdXMuCisgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jb250aW51YXRpb25C
bG9jaykKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBpbmxpbmVTdGFja0VudHJ5Lm1fY29udGlu
dWF0aW9uQmxvY2s7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGFyZSBpbiB0aGUgY2FzZSB3
aGVyZSB0aGUgY2FsbGVlIG5ldmVyIHJldHVybnMgKGZvciBleGFtcGxlIGl0IGxvb3BzIGZvcmV2
ZXIpLgorICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGFsbCBibG9ja3Mgc2hvdWxkIGVuZCBpbiBh
IHRlcm1pbmFsLgorICAgICAgICBBU1NFUlQobV9ncmFwaC5sYXN0QmxvY2soKS0+dGVybWluYWwo
KSk7CisgICAgICAgIC8vIFdlIHRoZW4gYWxsb2NhdGUgYSBuZXcgYmxvY2sgdG8gY29udGludWUg
aW4uCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2sobmV4
dE9mZnNldCk7CiAgICAgfQorICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayk7CisgICAgQVNTRVJU
KCFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CiAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZURGR0J5dGVjb2RlUGFyc2luZygpKQotICAgICAgICBkYXRhTG9nKCIgICAgQ3JlYXRpbmcgbmV3
IGJsb2NrIGFmdGVyIGlubGluaW5nLlxuIik7Ci0KLSAgICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBw
b2ludCB0aGVuIGFsbCBibG9ja3MgbXVzdCBlbmQgaW4gc29tZSBzb3J0IG9mIHRlcm1pbmFscy4K
LSAgICBBU1NFUlQobGFzdEJsb2NrLT50ZXJtaW5hbCgpKTsKLQotICAgIC8vIE5lZWQgdG8gY3Jl
YXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29udGludWF0aW9uIGF0IHRoZSBjYWxsZXIu
Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKG5l
eHRPZmZzZXQsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOwotCi0gICAgLy8gTGlu
ayB0aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMgYmxvY2sgd2UncmUgYWJvdXQgdG8gY3Jl
YXRlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlu
a2VkQmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5t
X3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2tUb0xpbmsgPSBpbmxpbmVTdGFj
a0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9jazsKLSAgICAgICAgQVNTRVJUKCFibG9j
a1RvTGluay0+aXNMaW5rZWQpOwotICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tUb0xpbmstPnRl
cm1pbmFsKCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOwotICAgICAgICBB
U1NFUlQoIW5vZGUtPnRhcmdldEJsb2NrKCkpOwotICAgICAgICBub2RlLT50YXJnZXRCbG9jaygp
ID0gYmxvY2sucHRyKCk7Ci0gICAgICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nr
c1tpXS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nID0gZmFsc2U7Ci0gICAgICAgIGlmIChERkdC
eXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTWFy
a2luZyAiLCBSYXdQb2ludGVyKGJsb2NrVG9MaW5rKSwgIiBhcyBsaW5rZWQgKGp1bXBzIHRvIHJl
dHVybilcbiIpOwotICAgICAgICBibG9ja1RvTGluay0+ZGlkTGluaygpOwotICAgIH0KLSAgICAK
LSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLnB0cigpOwotICAgIEFTU0VSVChtX2lubGluZVN0
YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHkoKSB8fCBtX2lu
bGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0
ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOwotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBZGRpbmcgdW5saW5rZWQgYmxvY2sgIiwg
UmF3UG9pbnRlcihibG9jay5wdHIoKSksICIgKG1hbnkgcmV0dXJucylcbiIpOwotICAgIGlmIChj
YWxsZXJMaW5rYWJpbGl0eSA9PSBDYWxsZXJEb2VzTm9ybWFsTGlua2luZykgewotICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5r
ZWRCbG9jayhibG9jay5wdHIoKSkpOwotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxl
ci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChibG9jay5wdHIoKSk7Ci0gICAgfQotICAg
IG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHByZXBhcmVUb1BhcnNl
QmxvY2soKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6Y2FuY2VsTGlua2luZ0ZvckJsb2Nr
KElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnksIEJhc2ljQmxvY2sqIGJsb2NrKQot
ewotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBpcyBu
b3Qgb3duZWQgYnkgdGhlIGNhbGxlci4KLSAgICBpZiAoIWlubGluZVN0YWNrRW50cnktPm1fdW5s
aW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEl0J3MgZGVmaW5pdGVseSBvd25l
ZCBieSB0aGUgY2FsbGVyLCBiZWNhdXNlIHRoZSBjYWxsZXIgY3JlYXRlZCBuZXcgYmxvY2tzLgot
ICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGlzIGFsbCBhZGRzIHVwLgotICAgICAgICBBU1NFUlRf
VU5VU0VEKGJsb2NrLCBpbmxpbmVTdGFja0VudHJ5LT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5t
X2Jsb2NrID09IGJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnktPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nKTsKLSAgICAgICAgaW5saW5l
U3RhY2tFbnRyeS0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcg
PSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJdCdzIGRlZmluaXRlbHkgbm90IG93
bmVkIGJ5IHRoZSBjYWxsZXIuIFRlbGwgdGhlIGNhbGxlciB0aGF0IGhlIGRvZXMgbm90Ci0gICAg
ICAgIC8vIG5lZWQgdG8gbGluayBoaXMgY2FsbHNpdGUgYmxvY2sgaGVhZCwgYmVjYXVzZSB3ZSBk
aWQgaXQgZm9yIGhpbS4KLSAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnktPm1fY2FsbHNp
dGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGJsb2NrLCBp
bmxpbmVTdGFja0VudHJ5LT5tX2NhbGxzaXRlQmxvY2tIZWFkID09IGJsb2NrKTsKLSAgICAgICAg
aW5saW5lU3RhY2tFbnRyeS0+bV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IGZhbHNl
OwotICAgIH0KLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KLWJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGlu
dCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxp
bmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxp
dHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2Us
IGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6
OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpz
cGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgCiAgICAgaWYgKCFpbmxpbmluZ0JhbGFu
Y2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJz
ZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiICAgIENvbnNpZGVyaW5nIGNh
bGxlZSAiLCBjYWxsZWUsICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCIgICAgQ29uc2lkZXJpbmcg
Y2FsbGVlICIsIGNhbGxlZSwgIlxuIik7CiAgICAgCiAgICAgLy8gSW50cmluc2ljcyBhbmQgaW50
ZXJuYWwgZnVuY3Rpb25zIGNhbiBvbmx5IGJlIGlubGluZWQgaWYgd2UncmUgbm90IGRvaW5nIHZh
cmFyZ3MuIFRoaXMgaXMgYmVjYXVzZQogICAgIC8vIHdlIGN1cnJlbnRseSBkb24ndCBoYXZlIGFu
eSB3YXkgb2YgZ2V0dGluZyBwcm9maWxpbmcgaW5mb3JtYXRpb24gZm9yIGFyZ3VtZW50cyB0byBu
b24tSlMgdmFyYXJncwpAQCAtMTc5Myw0MCArMTY4NCw0MCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZAogICAgIAogICAgICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxs
ZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJ
bnRlcm5hbEZ1bmN0aW9uKGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwg
cmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlv
bktpbmQsIHByZWRpY3Rpb24sIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgewotICAgICAg
ICAgICAgICAgIFBBUlNFUl9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAgICAgICAgICAgIGVtaXRBcmd1
bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAgICAgICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQQVJTRVJfQVNTRVJUKCFkaWRJ
bnNlcnRDaGVja3MpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNr
cyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAKICAgICAgICAg
SW50cmluc2ljIGludHJpbnNpYyA9IGNhbGxlZS5pbnRyaW5zaWNGb3Ioc3BlY2lhbGl6YXRpb25L
aW5kKTsKICAgICAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykgewogICAgICAgICAg
ICAgaWYgKGhhbmRsZUludHJpbnNpY0NhbGwoY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQs
IGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKLSAgICAgICAgICAgICAg
ICBQQVJTRVJfQVNTRVJUKGRpZEluc2VydENoZWNrcyk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGNhbGxUYXJnZXROb2RlKTsKICAgICAgICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFu
dG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAg
ICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBQQVJTRVJfQVNTRVJUKCFkaWRJbnNlcnRD
aGVja3MpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNrcyk7CiAg
ICAgICAgICAgICAvLyBXZSBtaWdodCBzdGlsbCB0cnkgdG8gaW5saW5lIHRoZSBJbnRyaW5zaWMg
YmVjYXVzZSBpdCBtaWdodCBiZSBhIGJ1aWx0aW4gSlMgZnVuY3Rpb24uCiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoT3B0aW9uczo6dXNlRE9NSklUKCkpIHsKICAgICAgICAgICAgIGlmIChjb25z
dCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gY2FsbGVlLnNpZ25hdHVyZUZvcihzcGVj
aWFsaXphdGlvbktpbmQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZURPTUpJVENhbGwo
Y2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIHNpZ25hdHVyZSwgcmVnaXN0ZXJPZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRo
QWNjb3VudGluZykpIHsKLSAgICAgICAgICAgICAgICAgICAgUEFSU0VSX0FTU0VSVChkaWRJbnNl
cnRDaGVja3MpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRD
aGVja3MpOwogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxUYXJn
ZXROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgICAgICAgICAg
ICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQQVJTRVJfQVNTRVJUKCFkaWRJbnNl
cnRDaGVja3MpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVj
a3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTgzNiw3ICsxNzI3LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
SW5zdHJ1Y3Rpb24qIHNhdmVkQ3VycmVudEluc3RydWN0aW9uID0gbV9jdXJyZW50SW5zdHJ1Y3Rp
b247Ci0gICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbGVl
LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQs
IGtpbmQsIGNhbGxlckxpbmthYmlsaXR5LCBpbnNlcnRDaGVja3MpOworICAgIGlubGluZUNhbGwo
Y2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxlZSwgcmVnaXN0ZXJPZmZzZXQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBpbnNlcnRDaGVja3Mp
OwogICAgIGlubGluaW5nQmFsYW5jZSAtPSBteUlubGluaW5nQ29zdDsKICAgICBtX2N1cnJlbnRJ
bnN0cnVjdGlvbiA9IHNhdmVkQ3VycmVudEluc3RydWN0aW9uOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMTg0OCwyMiArMTczOSwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZygKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFyZ3Vt
ZW50c09mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgIHVuc2lnbmVk
IG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQs
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2Vy
SW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgaW5saW5pbmcu
Li5cbiIpOwotICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwg
IlxuIik7Ci0gICAgfQorICAgIFZFUkJPU0VfTE9HKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuU3Rh
Y2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIENvZGVTcGVjaWFsaXphdGlv
bktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlv
bktpbmRGb3Ioa2luZCk7CiAgICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5zaXplKCkpIHsK
LSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nLlxuIik7CisgICAgICAgIFZFUkJPU0VfTE9H
KCJCYWlsaW5nIGlubGluaW5nLlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpCiAgICAgICAgICYm
IGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6bWF4aW11bVZhcmFy
Z3NGb3JJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNl
IG9mIHZhcmFyZ3MuXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIkJhaWxpbmcgaW5saW5pbmcg
YmVjYXVzZSBvZiB2YXJhcmdzLlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgICAgIApAQCAtMTkwOCw3ICsxNzk0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW5saW5pbmcoCiAgICAgICAgIAogICAgICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGlu
ZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExp
bmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAotICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBw
cmVkaWN0aW9uLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRP
ZmZzZXQsIGtpbmQsIHByZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UsIFsm
XSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25D
aGVja3MoY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwog
CkBAIC0xOTgxLDExICsxODY3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpIHsK
LSAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBsZSkuXG4iKTsKLSAgICAg
ICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKLSAg
ICAgICAgICAgIGRhdGFMb2coIlJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKLSAgICAgICAgfQor
ICAgICAgICBWRVJCT1NFX0xPRygiRG9uZSBpbmxpbmluZyAoc2ltcGxlKS5cblN0YWNrOiAiLCBj
dXJyZW50Q29kZU9yaWdpbigpLCAiXG5SZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTk5NywxMCArMTg3OSw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIC8vIGFsc28uCiAgICAgaWYgKCFp
c0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNDYWxs
SW5saW5pbmcoKQogICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkg
ewotICAgICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkgewotICAg
ICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG4iKTsKLSAgICAgICAg
ICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKLSAgICAg
ICAgfQorICAgICAgICBWRVJCT1NFX0xPRygiQmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG5TdGFj
azogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC0yMDA5LDE1ICsxODg4LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKAogICAgIC8vIGl0IGhhcyBubyBpZGVhLgogICAgIGlmICghT3B0aW9u
czo6dXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmdGb3JOb25TdHViU3RhdHVzKCkKICAgICAgICAg
JiYgIWNhbGxMaW5rU3RhdHVzLmlzQmFzZWRPblN0dWIoKSkgewotICAgICAgICBpZiAoREZHQnl0
ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygiQmFp
bGluZyBpbmxpbmluZyAobm9uLXN0dWIgcG9seW1vcnBoaXNtKS5cbiIpOwotICAgICAgICAgICAg
ZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwotICAgICAgICB9
CisgICAgICAgIFZFUkJPU0VfTE9HKCJCYWlsaW5nIGlubGluaW5nIChub24tc3R1YiBwb2x5bW9y
cGhpc20pLlxuU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIHVuc2lnbmVkIG9sZE9mZnNldCA9IG1fY3Vy
cmVudEluZGV4OwotICAgIAorCiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVlOwog
ICAgIGJvb2wgYWxsQXJlRGlyZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9
IGNhbGxMaW5rU3RhdHVzLnNpemUoKTsgaS0tOykgewpAQCAtMjAyNiw3ICsxOTAwLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGFsbEFyZUNsb3N1cmVDYWxscyA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIE5vZGUq
IHRoaW5nVG9Td2l0Y2hPbjsKICAgICBpZiAoYWxsQXJlRGlyZWN0Q2FsbHMpCiAgICAgICAgIHRo
aW5nVG9Td2l0Y2hPbiA9IGNhbGxUYXJnZXROb2RlOwpAQCAtMjAzNywzMCArMTkxMSwyMiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAgICAgLy8gd2hlcmUgaXQg
d291bGQgYmUgYmVuZWZpY2lhbC4gSXQgbWlnaHQgYmUgYmVzdCB0byBoYW5kbGUgdGhlc2UgY2Fz
ZXMgYXMgaWYgYWxsIGNhbGxzIHdlcmUKICAgICAgICAgLy8gY2xvc3VyZSBjYWxscy4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAyMAotICAg
ICAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAg
ICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAobWl4KS5cbiIpOwotICAgICAgICAgICAgZGF0
YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwotICAgICAgICB9Cisg
ICAgICAgIFZFUkJPU0VfTE9HKCJCYWlsaW5nIGlubGluaW5nIChtaXgpLlxuU3RhY2s6ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIAotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAg
ICAgIGRhdGFMb2coIkRvaW5nIGhhcmQgaW5saW5pbmcuLi5cbiIpOwotICAgICAgICBkYXRhTG9n
KCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7Ci0gICAgfQotICAgIAorCisg
ICAgVkVSQk9TRV9MT0coIkRvaW5nIGhhcmQgaW5saW5pbmcuLi5cblN0YWNrOiAiLCBjdXJyZW50
Q29kZU9yaWdpbigpLCAiXG4iKTsKKwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IHJlZ2lzdGVy
T2Zmc2V0T3JGaXJzdEZyZWVSZWc7Ci0gICAgCisKICAgICAvLyBUaGlzIG1ha2VzIG1lIHdpc2gg
dGhhdCB3ZSB3ZXJlIGluIFNTQSBhbGwgdGhlIHRpbWUuIFdlIG5lZWQgdG8gcGljayBhIHZhcmlh
YmxlIGludG8gd2hpY2ggdG8KICAgICAvLyBzdG9yZSB0aGUgY2FsbGVlIHNvIHRoYXQgaXQgd2ls
bCBiZSBhY2Nlc3NpYmxlIHRvIGFsbCBvZiB0aGUgYmxvY2tzIHdlJ3JlIGFib3V0IHRvIGNyZWF0
ZS4gV2UKICAgICAvLyBnZXQgYXdheSB3aXRoIGRvaW5nIGFuIGltbWVkaWF0ZS1zZXQgaGVyZSBi
ZWNhdXNlIHdlIHdvdWxkbid0IGhhdmUgcGVyZm9ybWVkIGFueSBzaWRlIGVmZmVjdHMKICAgICAv
LyB5ZXQuCi0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0ZXJPZmZzZXQpOworICAgIFZF
UkJPU0VfTE9HKCJSZWdpc3RlciBvZmZzZXQ6ICIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY2FsbGVlUmVnKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKTsKICAgICBjYWxsZWVSZWcgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2Fs
bGVlUmVnKTsKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZygiQ2FsbGVlIGlzIGdvaW5nIHRvIGJlICIsIGNhbGxlZVJlZywgIlxuIik7
CisgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcsICJc
biIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVT
ZXRXaXRoRmx1c2gpOwogCiAgICAgLy8gSXQncyBPSyB0byBleGl0IHJpZ2h0IG5vdywgZXZlbiB0
aG91Z2ggd2Ugc2V0IHNvbWUgbG9jYWxzLiBUaGF0J3MgYmVjYXVzZSB0aG9zZSBsb2NhbHMgYXJl
IG5vdApAQCAtMjA3MSwxMiArMTkzNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKAogICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRk
KCk7CiAgICAgZGF0YS5raW5kID0gU3dpdGNoQ2VsbDsKICAgICBhZGRUb0dyYXBoKFN3aXRjaCwg
T3BJbmZvKCZkYXRhKSwgdGhpbmdUb1N3aXRjaE9uKTsKLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBv
cmlnaW5CbG9jayA9IG1fY3VycmVudEJsb2NrOwotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlcklu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJNYXJraW5nICIsIFJhd1BvaW50ZXIo
b3JpZ2luQmxvY2spLCAiIGFzIGxpbmtlZCAob3JpZ2luIG9mIHBvbHkgaW5saW5lKVxuIik7Ci0g
ICAgb3JpZ2luQmxvY2stPmRpZExpbmsoKTsKLSAgICBjYW5jZWxMaW5raW5nRm9yQmxvY2sobV9p
bmxpbmVTdGFja1RvcCwgb3JpZ2luQmxvY2spOworICAgIG1fY3VycmVudEJsb2NrLT5kaWRMaW5r
KCk7CiAgICAgCiAgICAgLy8gRWFjaCBpbmxpbmVkIGNhbGxlZSB3aWxsIGhhdmUgYSBsYW5kaW5n
IGJsb2NrIHRoYXQgaXQgcmV0dXJucyBhdC4gVGhleSBzaG91bGQgYWxsIGhhdmUganVtcHMKICAg
ICAvLyB0byB0aGUgY29udGludWF0aW9uIGJsb2NrLCB3aGljaCB3ZSBjcmVhdGUgbGFzdC4KQEAg
LTIwODUsMzEgKzE5NDYsMzAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
CiAgICAgLy8gV2UgbWF5IGZvcmNlIHRoaXMgdHJ1ZSBpZiB3ZSBnaXZlIHVwIG9uIGlubGluaW5n
IGFueSBvZiB0aGUgZWRnZXMuCiAgICAgYm9vbCBjb3VsZFRha2VTbG93UGF0aCA9IGNhbGxMaW5r
U3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCk7CiAgICAgCi0gICAgaWYgKERGR0J5dGVDb2RlUGFy
c2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFib3V0IHRvIGxvb3Agb3Zl
ciBmdW5jdGlvbnMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIi5cbiIpOwotICAgIAorICAg
IFZFUkJPU0VfTE9HKCJBYm91dCB0byBsb29wIG92ZXIgZnVuY3Rpb25zIGF0ICIsIGN1cnJlbnRD
b2RlT3JpZ2luKCksICIuXG4iKTsKKworICAgIHVuc2lnbmVkIG9sZE9mZnNldCA9IG1fY3VycmVu
dEluZGV4OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsTGlua1N0YXR1cy5zaXpl
KCk7ICsraSkgewogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNldDsKLSAgICAgICAg
UmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFY
LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBibG9jay5wdHIoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhibG9jay5jb3B5
UmVmKCkpOworICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsZWVFbnRyeUJsb2NrID0gYWxsb2NhdGVV
bnRhcmdldGFibGVCbG9jaygpOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNhbGxlZUVudHJ5
QmxvY2s7CiAgICAgICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAgICAgCiAgICAgICAg
IE5vZGUqIG15Q2FsbFRhcmdldE5vZGUgPSBnZXREaXJlY3QoY2FsbGVlUmVnKTsKICAgICAgICAg
CiAgICAgICAgIGJvb2wgaW5saW5pbmdSZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAg
ICAgICAgICAgbXlDYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNb
aV0sIHJlZ2lzdGVyT2Zmc2V0LAotICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24sCisg
ICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwg
cHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sq
KSB7IH0pOwogICAgICAgICAKICAgICAgICAgaWYgKCFpbmxpbmluZ1Jlc3VsdCkgewogICAgICAg
ICAgICAgLy8gVGhhdCBmYWlsZWQgc28gd2UgbGV0IHRoZSBibG9jayBkaWUuIE5vdGhpbmcgaW50
ZXJlc3Rpbmcgc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCB0bwogICAgICAgICAgICAgLy8gdGhlIGJs
b2NrLiBXZSBhbHNvIGdpdmUgdXAgb24gaW5saW5pbmcgYW55IG9mIHRoZSAobGVzcyBmcmVxdWVu
dCkgY2FsbGVlcy4KLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9PSBibG9jay5w
dHIoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkgPT0gYmxv
Y2sucHRyKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2tBbmRJdHNDb250ZW50cyhi
bG9jay5wdHIoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkg
PT0gbV9jdXJyZW50QmxvY2spOworICAgICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2tBbmRJdHND
b250ZW50cyhtX2N1cnJlbnRCbG9jayk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLnJl
bW92ZUxhc3QoKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgVkVSQk9TRV9MT0coIklubGlu
aW5nIG9mIGEgcG9seSBjYWxsIGZhaWxlZCwgd2Ugd2lsbCBoYXZlIHRvIGdvIHRocm91Z2ggYSBz
bG93IHBhdGhcbiIpOworCiAgICAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0IGlubGluaW5nIGZh
aWxlZCBtZWFucyB3ZSBuZWVkIGEgc2xvdyBwYXRoLgogICAgICAgICAgICAgY291bGRUYWtlU2xv
d1BhdGggPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTIyLDQ2ICsxOTgyLDQ2IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICAgICAgQVNTRVJU
KGFsbEFyZUNsb3N1cmVDYWxscyk7CiAgICAgICAgICAgICB0aGluZ1RvQ2FzZU9uID0gY2FsbExp
bmtTdGF0dXNbaV0uZXhlY3V0YWJsZSgpOwogICAgICAgICB9Ci0gICAgICAgIGRhdGEuY2FzZXMu
YXBwZW5kKFN3aXRjaENhc2UobV9ncmFwaC5mcmVlemUodGhpbmdUb0Nhc2VPbiksIGJsb2NrLnB0
cigpKSk7CisgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9ncmFwaC5mcmVl
emUodGhpbmdUb0Nhc2VPbiksIGNhbGxlZUVudHJ5QmxvY2spKTsKICAgICAgICAgbV9jdXJyZW50
SW5kZXggPSBuZXh0T2Zmc2V0OwogICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgIHBy
b2Nlc3NTZXRMb2NhbFF1ZXVlKCk7IC8vIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIGlu
dHJpbnNpY3MsIHNpbmNlIG5vcm1hbCBpbmxpbmVkIGNvZGUgd2lsbCBsZWF2ZSBhbiBlbXB0eSBx
dWV1ZS4KICAgICAgICAgaWYgKE5vZGUqIHRlcm1pbmFsID0gbV9jdXJyZW50QmxvY2stPnRlcm1p
bmFsKCkpCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJtaW5hbC0+b3Ao
KSA9PSBUYWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgdGVy
bWluYWwtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc5MjYgd2UgY2FuIGF2b2lkIHRoaXMgaW5kaXJlY3Rpb24gaW4gdGhlIGNhc2Ugb2Yg
bm9ybWFsIGlubGluZWQgY2FsbAorICAgICAgICAgICAgLy8gYnkgcGFzc2luZyB0aGUgY29udGlu
dWF0aW9uIGJsb2NrIGFsbCB0aGUgd2F5IGludG8gaW5saW5lU3RhY2tFbnRyeS0+bV9jb250aW51
YXRpb25CbG9jayBpbiBpbmxpbmVDYWxsLgorICAgICAgICAgICAgLy8gSXQgaXMgbm90IHRyaXZp
YWwgYmVjYXVzZSBvZiB0aGUgU2V0TG9jYWxRdWV1ZSBtYW5hZ2VkIGJ5IGludHJpbnNpY3MuCiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXApOwogICAgICAgICAgICAgbGFuZGluZ0Jsb2Nrcy5h
cHBlbmQobV9jdXJyZW50QmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdCeXRlQ29k
ZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTWFya2luZyAi
LCBSYXdQb2ludGVyKG1fY3VycmVudEJsb2NrKSwgIiBhcyBsaW5rZWQgKHRhaWwgb2YgcG9seSBp
bmxpbmVlKVxuIik7CisgICAgICAgIFZFUkJPU0VfTE9HKCJNYXJraW5nICIsIFJhd1BvaW50ZXIo
bV9jdXJyZW50QmxvY2spLCAiIGFzIGxpbmtlZCAodGFpbCBvZiBwb2x5IGlubGluZWUpXG4iKTsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZExpbmsoKTsKIAotICAgICAgICBpZiAoREZHQnl0
ZUNvZGVQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkZpbmlz
aGVkIGlubGluaW5nICIsIGNhbGxMaW5rU3RhdHVzW2ldLCAiIGF0ICIsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksICIuXG4iKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIkZpbmlzaGVkIGlubGluaW5nICIs
IGNhbGxMaW5rU3RhdHVzW2ldLCAiIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4iKTsK
ICAgICB9CiAgICAgCi0gICAgUmVmPEJhc2ljQmxvY2s+IHNsb3dQYXRoQmxvY2sgPSBhZG9wdFJl
ZigKLSAgICAgICAgKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBtX251bUFyZ3VtZW50cywgbV9u
dW1Mb2NhbHMsIDEpKTsKKyAgICBCYXNpY0Jsb2NrKiBzbG93UGF0aEJsb2NrID0gYWxsb2NhdGVV
bnRhcmdldGFibGVCbG9jaygpOwogICAgIG1fY3VycmVudEluZGV4ID0gb2xkT2Zmc2V0OwogICAg
IG1fZXhpdE9LID0gdHJ1ZTsKLSAgICBkYXRhLmZhbGxUaHJvdWdoID0gQnJhbmNoVGFyZ2V0KHNs
b3dQYXRoQmxvY2sucHRyKCkpOwotICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soc2xvd1BhdGhCbG9j
ay5jb3B5UmVmKCkpOwotICAgIGlmIChERkdCeXRlQ29kZVBhcnNlckludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJNYXJraW5nICIsIFJhd1BvaW50ZXIoc2xvd1BhdGhCbG9jay5w
dHIoKSksICIgYXMgbGlua2VkIChzbG93IHBhdGggYmxvY2spXG4iKTsKKyAgICBkYXRhLmZhbGxU
aHJvdWdoID0gQnJhbmNoVGFyZ2V0KHNsb3dQYXRoQmxvY2spOworICAgIFZFUkJPU0VfTE9HKCJN
YXJraW5nICIsIFJhd1BvaW50ZXIoc2xvd1BhdGhCbG9jayksICIgYXMgbGlua2VkIChzbG93IHBh
dGggYmxvY2spXG4iKTsKICAgICBzbG93UGF0aEJsb2NrLT5kaWRMaW5rKCk7CiAgICAgcHJlcGFy
ZVRvUGFyc2VCbG9jaygpOwotICAgIG1fY3VycmVudEJsb2NrID0gc2xvd1BhdGhCbG9jay5wdHIo
KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IHNsb3dQYXRoQmxvY2s7CiAgICAgTm9kZSogbXlDYWxs
VGFyZ2V0Tm9kZSA9IGdldERpcmVjdChjYWxsZWVSZWcpOwogICAgIGlmIChjb3VsZFRha2VTbG93
UGF0aCkgewogICAgICAgICBhZGRDYWxsKAogICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCwgY2Fs
bE9wLCBudWxscHRyLCBteUNhbGxUYXJnZXROb2RlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywKICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKKyAgICAgICAgVkVS
Qk9TRV9MT0coIldlIGFkZGVkIGEgY2FsbCBpbiB0aGUgc2xvdyBwYXRoXG4iKTsKICAgICB9IGVs
c2UgewogICAgICAgICBhZGRUb0dyYXBoKENoZWNrQmFkQ2VsbCk7CiAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgbXlDYWxsVGFyZ2V0Tm9kZSk7CiAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50
b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAg
IAogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBo
KEJvdHRvbVZhbHVlKSk7CisgICAgICAgIFZFUkJPU0VfTE9HKCJjb3VsdFRha2VTbG93UGF0aCB3
YXMgd3JvbmdcbiIpOwogICAgIH0KIAogICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsK
QEAgLTIxNzMsMjYgKzIwMzMsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoCiAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCk7CiAgICAgICAgIGxhbmRpbmdCbG9ja3MuYXBw
ZW5kKG1fY3VycmVudEJsb2NrKTsKICAgICB9Ci0gICAgCi0gICAgUmVmPEJhc2ljQmxvY2s+IGNv
bnRpbnVhdGlvbkJsb2NrID0gYWRvcHRSZWYoCi0gICAgICAgICpuZXcgQmFzaWNCbG9jayhVSU5U
X01BWCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7Ci0gICAgbV9ncmFwaC5hcHBl
bmRCbG9jayhjb250aW51YXRpb25CbG9jay5jb3B5UmVmKCkpOwotICAgIGlmIChERkdCeXRlQ29k
ZVBhcnNlckludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBZGRpbmcgdW5saW5r
ZWQgYmxvY2sgIiwgUmF3UG9pbnRlcihjb250aW51YXRpb25CbG9jay5wdHIoKSksICIgKGNvbnRp
bnVhdGlvbilcbiIpOwotICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBw
ZW5kKFVubGlua2VkQmxvY2soY29udGludWF0aW9uQmxvY2sucHRyKCkpKTsKKworICAgIC8vIENv
bnRpbnVhdGlvbiBibG9jaworICAgIG1fY3VycmVudEJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFi
bGVCbG9jaygpOworICAgIFZFUkJPU0VfTE9HKCJBZGRpbmcgdW50YXJnZXRhYmxlIGJsb2NrICIs
IFJhd1BvaW50ZXIobV9jdXJyZW50QmxvY2spLCAiIChjb250aW51YXRpb24pXG4iKTsKICAgICBw
cmVwYXJlVG9QYXJzZUJsb2NrKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb25C
bG9jay5wdHIoKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsYW5kaW5nQmxvY2tzLnNp
emUoKTsgaS0tOykKLSAgICAgICAgbGFuZGluZ0Jsb2Nrc1tpXS0+dGVybWluYWwoKS0+dGFyZ2V0
QmxvY2soKSA9IGNvbnRpbnVhdGlvbkJsb2NrLnB0cigpOworCisgICAgZm9yIChhdXRvICZsYW5k
aW5nQmxvY2sgOiBsYW5kaW5nQmxvY2tzKSB7CisgICAgICAgIGxhbmRpbmdCbG9jay0+dGVybWlu
YWwoKS0+dGFyZ2V0QmxvY2soKSA9IG1fY3VycmVudEJsb2NrOworICAgICAgICBsYW5kaW5nQmxv
Y2stPmRpZExpbmsoKTsKKyAgICAgICAgVkVSQk9TRV9MT0coIldlIGxpbmtlZCAiLCBSYXdQb2lu
dGVyKG1fY3VycmVudEJsb2NrKSwgIiAobGFuZGluZyBibG9jaykgdG8gdGhlIGNvbnRpbnVhdGlv
biBibG9jayBcbiIpOworICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNl
dDsKICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgCi0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2Vy
SW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiRG9uZSBpbmxpbmluZyAoaGFy
ZCkuXG4iKTsKLSAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCks
ICJcbiIpOwotICAgIH0KKyAgICBWRVJCT1NFX0xPRygiRG9uZSBpbmxpbmluZyAoaGFyZCkuXG5T
dGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTIyMjksOCArMjA4NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1h
eChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50
cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKQogewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkp
Ci0gICAgICAgIGRhdGFMb2coIiAgICAgICBUaGUgaW50cmluc2ljIGlzICIsIGludHJpbnNpYywg
IlxuIik7CisgICAgVkVSQk9TRV9MT0coIiAgICAgICBUaGUgaW50cmluc2ljIGlzICIsIGludHJp
bnNpYywgIlxuIik7CiAgICAgCiAgICAgLy8gSXQgc28gaGFwcGVucyB0aGF0IHRoZSBjb2RlIGJl
bG93IGRvZXNuJ3QgaGFuZGxlIHRoZSBpbnZhbGlkIHJlc3VsdCBjYXNlLiBXZSBjb3VsZCBmaXgg
dGhhdCwgYnV0CiAgICAgLy8gaXQgd291bGQgb25seSBiZW5lZml0IGludHJpbnNpY3MgY2FsbGVk
IGFzIHNldHRlcnMsIGxpa2UgaWYgeW91IGRvOgpAQCAtMzMyMyw4ICszMTc4LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgIE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVu
Y3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewotICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgIGRhdGFMb2coIiAgICBI
YW5kbGluZyBjb25zdGFudCBpbnRlcm5hbCBmdW5jdGlvbiAiLCBKU1ZhbHVlKGZ1bmN0aW9uKSwg
IlxuIik7CisgICAgVkVSQk9TRV9MT0coIiAgICBIYW5kbGluZyBjb25zdGFudCBpbnRlcm5hbCBm
dW5jdGlvbiAiLCBKU1ZhbHVlKGZ1bmN0aW9uKSwgIlxuIik7CiAgICAgCiAgICAgLy8gSXQgc28g
aGFwcGVucyB0aGF0IHRoZSBjb2RlIGJlbG93IGFzc3VtZXMgdGhhdCB0aGUgcmVzdWx0IG9wZXJh
bmQgaXMgdmFsaWQuIEl0J3MgZXh0cmVtZWx5CiAgICAgLy8gdW5saWtlbHkgdGhhdCB0aGUgcmVz
dWx0IG9wZXJhbmQgd291bGQgYmUgaW52YWxpZCAtIHlvdSdkIGhhdmUgdG8gY2FsbCB0aGlzIHZp
YSBhIHNldHRlciBjYWxsLgpAQCAtMzU0MSwxNCArMzM5NSwxMyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpuZWVkc0R5bmFtaWNMb29rdXAoUmVzb2x2ZVR5cGUgdHlwZSwgT3Bjb2RlSUQgb3Bjb2Rl
KQogCiBHZXRCeU9mZnNldE1ldGhvZCBCeXRlQ29kZVBhcnNlcjo6cGxhbkxvYWQoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKIHsKLSAgICBpZiAoREZHQnl0ZUNvZGVQ
YXJzZXJJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUGxhbm5pbmcgYSBsb2Fk
OiAiLCBjb25kaXRpb24sICJcbiIpOworICAgIFZFUkJPU0VfTE9HKCJQbGFubmluZyBhIGxvYWQ6
ICIsIGNvbmRpdGlvbiwgIlxuIik7CiAgICAgCiAgICAgLy8gV2UgbWlnaHQgcHJvbW90ZSB0aGlz
IHRvIEVxdWl2YWxlbmNlLCBhbmQgYSBsYXRlciBERkcgcGFzcyBtaWdodCBhbHNvIGRvIHN1Y2gg
cHJvbW90aW9uCiAgICAgLy8gZXZlbiBpZiB3ZSBmYWlsLCBidXQgZm9yIHNpbXBsaWNpdHkgdGhp
cyBjYW5ub3QgYmUgYXNrZWQgdG8gbG9hZCBhbiBlcXVpdmFsZW5jZSBjb25kaXRpb24uCiAgICAg
Ly8gTm9uZSBvZiB0aGUgY2xpZW50cyBvZiB0aGlzIG1ldGhvZCB3aWxsIHJlcXVlc3QgYSBsb2Fk
IG9mIGFuIEVxdWl2YWxlbmNlIGNvbmRpdGlvbiBhbnl3YXksCiAgICAgLy8gYW5kIHN1cHBvcnRp
bmcgaXQgd291bGQgY29tcGxpY2F0ZSB0aGUgaGV1cmlzdGljcyBiZWxvdy4KLSAgICBQQVJTRVJf
QVNTRVJUKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9u
OjpQcmVzZW5jZSk7CiAgICAgCiAgICAgLy8gSGVyZSdzIHRoZSByYW5raW5nIG9mIGhvdyB0byBo
YW5kbGUgdGhpcywgZnJvbSBtb3N0IHByZWZlcnJlZCB0byBsZWFzdCBwcmVmZXJyZWQ6CiAgICAg
Ly8KQEAgLTM2NTEsMTQgKzM1MDQsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6Y2hlY2soY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKIAogR2V0QnlPZmZz
ZXRNZXRob2QgQnl0ZUNvZGVQYXJzZXI6OnBsYW5Mb2FkKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7Ci0gICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50
ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coImNvbmRpdGlvblNldCA9ICIsIGNvbmRp
dGlvblNldCwgIlxuIik7CisgICAgVkVSQk9TRV9MT0coImNvbmRpdGlvblNldCA9ICIsIGNvbmRp
dGlvblNldCwgIlxuIik7CiAgICAgCiAgICAgR2V0QnlPZmZzZXRNZXRob2QgcmVzdWx0OwogICAg
IGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IGNvbmRpdGlv
blNldCkgewogICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKCkpIHsKICAgICAgICAgY2Fz
ZSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2U6Ci0gICAgICAgICAgICBQQVJTRVJfQVNTRVJU
KCFyZXN1bHQpOyAvLyBTaG91bGQgb25seSBzZWUgZXhhY3RseSBvbmUgb2YgdGhlc2UuCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsgLy8gU2hvdWxkIG9ubHkgc2VlIGV4YWN0
bHkgb25lIG9mIHRoZXNlLgogICAgICAgICAgICAgcmVzdWx0ID0gcGxhbkxvYWQoY29uZGl0aW9u
KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBHZXRC
eU9mZnNldE1ldGhvZCgpOwpAQCAtMzgzMyw3ICszNjg1LDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmxvYWQoCiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFs
dWUpCiB7Ci0gICAgUEFSU0VSX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFw
aC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0
cnVjdHVyZSgpKTsKICAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmll
ciwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSwgdmFsdWUpOwpAQCAt
NDIyMCw2ICs0MDcyLDQyIEBAIHN0YXRpYyB1aW50NjRfdCBtYWtlRHluYW1pY1Zhck9wSW5mbyh1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCB1bnNpZ25lZCBnZXRQdXRJCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihpZGVudGlmaWVyTnVtYmVyKSB8IChzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZ2V0UHV0SW5mbykgPDwgMzIpOwogfQogCisvLyBUaGUgaWRpb206CisvLyAgICAgaWYg
KHRydWUpIHsgLi4uOyBnb3RvIGxhYmVsOyB9IGVsc2UgbGFiZWw6IGNvbnRpbnVlCisvLyBBbGxv
d3MgdXNpbmcgTkVYVF9PUENPREUgYXMgYSBzdGF0ZW1lbnQsIGV2ZW4gaW4gdW5icmFjZWQgaWYr
ZWxzZSwgd2hpbGUgY29udGFpbmluZyBhIGBjb250aW51ZWAuCisvLyBUaGUgbW9yZSBjb21tb24g
aWRpb206CisvLyAgICAgZG8geyAuLi47IH0gd2hpbGUgKGZhbHNlKQorLy8gRG9lc24ndCBhbGxv
dyB1c2luZyBgY29udGludWVgLgorI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCisgICAgaWYg
KHRydWUpIHsgXAorICAgICAgICBtX2N1cnJlbnRJbmRleCArPSBPUENPREVfTEVOR1RIKG5hbWUp
OyBcCisgICAgICAgIGdvdG8gV1RGX0NPTkNBVChORVhUX09QQ09ERV8sIF9fTElORV9fKTsgLyog
TmVlZCBhIHVuaXF1ZSBsYWJlbDogdXNhYmxlIG1vcmUgdGhhbiBvbmNlIHBlciBmdW5jdGlvbi4g
Ki8gXAorICAgIH0gZWxzZSBcCisgICAgICAgIFdURl9DT05DQVQoTkVYVF9PUENPREVfLCBfX0xJ
TkVfXyk6IFwKKyAgICBjb250aW51ZQorCisjZGVmaW5lIExBU1RfT1BDT0RFX0xJTktFRChuYW1l
KSBcCisgICAgcmV0dXJuIFwKKyAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdU
SChuYW1lKSwgXAorICAgICAgICBtX2V4aXRPSyA9IGZhbHNlLCBcCisgICAgICAgIHNob3VsZENv
bnRpbnVlUGFyc2luZworCisjZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKKyAgICBkbyB7IFwK
KyAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKSB7IFwKKyAgICAgICAgICAg
IHN3aXRjaCAobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCktPm9wKCkpIHsgXAorICAgICAgICAg
ICAgY2FzZSBKdW1wOiBcCisgICAgICAgICAgICBjYXNlIEJyYW5jaDogXAorICAgICAgICAgICAg
Y2FzZSBTd2l0Y2g6IFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT5p
c0xpbmtlZCk7IFwKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2Vk
QmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7IFwKKyAgICAgICAgICAgICAgICBicmVhaztc
CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsgXAorICAgICAgICAgICAgfSBcCisgICAgICAg
IH0gXAorICAgICAgICBMQVNUX09QQ09ERV9MSU5LRUQobmFtZSk7IFwKKyAgICB9IHdoaWxlIChm
YWxzZSkKKwogYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
IHsKICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHRydWU7CkBAIC00MjMyLDcgKzQx
MjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRseS4KICAgICBp
ZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5ibG9jaygwKSAmJiAhaW5saW5lQ2FsbEZyYW1l
KCkpIHsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2dyYXBoLm1fcm9vdFRvQXJndW1lbnRz
LmFkZChtX2N1cnJlbnRCbG9jaywgQXJndW1lbnRzVmVjdG9yKCkpOwotICAgICAgICBQQVJTRVJf
QVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRk
UmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGVudHJ5cG9pbnRB
cmd1bWVudHMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBlbnRyeXBvaW50
QXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAKQEAgLTQyNTQsNyArNDE0Miw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgfQog
CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgLy8gV2UncmUgc3RhcmluZyBhIG5ldyBieXRl
Y29kZSBpbnN0cnVjdGlvbi4gSGVuY2UsIHdlIG9uY2UgYWdhaW4gaGF2ZSBhIHBsYWNlIHRoYXQg
d2UgY2FuIGV4aXQKKyAgICAgICAgLy8gV2UncmUgc3RhcmluZyBhdCBhIG5ldyBieXRlY29kZSBp
bnN0cnVjdGlvbi4gU28gd2Ugb25jZSBhZ2FpbiBoYXZlIGEgcGxhY2UgdGhhdCB3ZSBjYW4gZXhp
dAogICAgICAgICAvLyB0by4KICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAgICAKQEAg
LTQyNjksMTEgKzQxNTcsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gbG9naWMgcmVsaWVzIG9uIGV2ZXJ5IGJ5dGVjb2Rl
IHJlc3VsdGluZyBpbiBvbmUgb3IgbW9yZSBub2Rlcywgd2hpY2ggd291bGQKICAgICAgICAgICAg
IC8vIGJlIHRydWUgYW55d2F5IGV4Y2VwdCBmb3Igb3BfbG9vcF9oaW50LCB3aGljaCBlbWl0cyBh
IFBoYW50b20gdG8gZm9yY2UgdGhpcwogICAgICAgICAgICAgLy8gdG8gYmUgdHJ1ZS4KLSAgICAg
ICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgaW5zZXJ0IGEganVtcCBpZiB0aGUgYmxvY2sgYWxyZWFk
eSBoYXMgYSB0ZXJtaW5hbCwKLSAgICAgICAgICAgIC8vIHdoaWNoIGNvdWxkIGhhcHBlbiBhZnRl
ciBhIHRhaWwgY2FsbC4KLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNFbXB0
eSgpIHx8ICFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CisKICAgICAgICAgICAgIGlmICgh
bV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1
bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOworICAgICAgICAgICAgICAgIGFkZEp1bXBUbyht
X2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5n
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDI4Miw4ICs0MTY4LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgbV9jdXJyZW50SW5z
dHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb247IC8vIFNvbWUgbWV0aG9kcyB3YW50IHRvIHVz
ZSB0aGlzLCBhbmQgd2UnZCByYXRoZXIgbm90IHRocmVhZCBpdCB0aHJvdWdoIGNhbGxzLgogICAg
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50
SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5nKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgcGFy
c2luZyAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBvcGNvZGVJRCwgIlxuIik7CisgICAg
ICAgIFZFUkJPU0VfTE9HKCIgICAgcGFyc2luZyAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAi
LCBvcGNvZGVJRCwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFw
aC5jb21waWxhdGlvbigpKSkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChDb3VudEV4ZWN1dGlv
biwgT3BJbmZvKG1fZ3JhcGguY29tcGlsYXRpb24oKS0+ZXhlY3V0aW9uQ291bnRlckZvcigKQEAg
LTQyOTksNiArNDE4NCw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGFsbCBsb2NhbHMgdG8gdW5kZWZp
bmVkLgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCiAgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGkpLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKworICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9lbnRyeUJsb2NrID0gbV9jdXJyZW50QmxvY2s7
CisKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC01Mjc2LDMzICs1MTY0LDM4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAgICAgICAgY2FzZSBvcF9yZXQ6CiAgICAgICAgICAg
ICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKLSAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUoKSkgeworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkg
eworICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBjYXNlOiB3ZSBhcmUganVzdCBwcm9kdWNpbmcg
YSByZXR1cm4KKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAg
ICAgIGZsdXNoRm9yUmV0dXJuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tU
b3AtPm1fcmV0dXJuVmFsdWUuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICBzZXREaXJl
Y3QobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSksIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7
Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJv
bSB0aGUgZmlyc3QgYmxvY2ssIHRoZW4gd2UncmUgZG9uZSBwYXJzaW5nLgotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBt
X2dyYXBoLmxhc3RCbG9jaygpKTsKKyAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmbHVzaEZvclJldHVybigpOworICAgICAg
ICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSwgSW1t
ZWRpYXRlU2V0V2l0aEZsdXNoKTsKKworICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9w
LT5tX2NvbnRpbnVhdGlvbkJsb2NrICYmIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9yZXQpICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5z
aXplKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9lbnRyeUJs
b2NrID09IG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSByYXRoZXIgd2VpcmQgY2FzZTogd2UgYXJlIHJldHVybmluZyBmcm9tIHRoZSBmaXJzdCBibG9j
ayBpbiB0aGUgZnVuY3Rpb24sIHNvIGFsbCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gaXMgZGVh
ZCBjb2RlLgorICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSB0cmVhdCB0aGlzIGFzIGEgbm9y
bWFsIHJldHVybiBpbnN0ZWFkIG9mIGFuIGVhcmx5IHJldHVybiwgYW5kIHNpZ25hbCB0byBza2lw
IHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkyNTogZXZhbHVhdGUg
d2hldGhlciB0aGF0IG9wdGltaXphdGlvbiBpcyB1c2VmdWwsIGl0IHNlZW1zIGxpa2UgYSByZWFs
bHkgd2VpcmQgY29ybmVyIGNhc2UuCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVl
UGFyc2luZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIGlu
bGluaW5nIGNyZWF0ZWQgYmxvY2tzLCBhbmQgd2UncmUgZG9pbmcgYSByZXR1cm4sIHRoZW4gd2Ug
bmVlZCBzb21lCi0gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgbGlua2luZy4KLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3Mu
bGFzdCgpLm1fYmxvY2sgPT0gbV9ncmFwaC5sYXN0QmxvY2soKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3Jt
YWxMaW5raW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0KSAhPSBtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIHx8IG1faW5saW5lU3RhY2tU
b3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpIDw9IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEp1bXAsIE9wSW5mbygwKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNFYXJseVJldHVybkxpbmtp
bmcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2RpZEVh
cmx5UmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJs
eSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGZ1bmN0aW9uIGFuZCB3ZSBkbyBub3QgaGF2ZSBhIGNv
bnRpbnVhdGlvbiBibG9jaywgc28gd2UgbXVzdCBhbGxvY2F0ZSBvbmUuCisgICAgICAgICAgICAg
ICAgICAgIC8vIEl0IGlzIHVudGFyZ2V0YWJsZSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyB0aGUg
YXBwcm9wcmlhdGUgaW5kZXguCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYmxvY2sg
dHVybnMgb3V0IHRvIGJlIGEganVtcCB0YXJnZXQsIHBhcnNlQ29kZUJsb2NrIHdpbGwgZml4IGl0
cyBieXRlY29kZUluZGV4IGJlZm9yZSBwdXR0aW5nIGl0IGluIG1fYmxvY2tMaW5raW5nVGFyZ2V0
cworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NvbnRpbnVhdGlvbkJs
b2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKLSAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7Ci0g
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOworCisgICAgICAgICAgICBpZiAobV9pbmxp
bmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jaykKKyAgICAgICAgICAgICAgICBhZGRKdW1w
VG8obV9pbmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jayk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcmV0dXJuaW5nIGZyb20gYW4gaW5saW5l
ZCBmdW5jdGlvbiwgYW5kIGRvIG5vdCBuZWVkIHRvIGp1bXAgYW55d2hlcmUsIHNvIHdlIGp1c3Qg
a2VlcCB0aGUgY3VycmVudCBibG9jaworICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fY29udGludWF0aW9uQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIExBU1RfT1BDT0RFX0xJTktFRChvcF9yZXQpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3BfZW5kOgogICAgICAgICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWUoKSk7
CkBAIC01MzM0LDcgKzUyMjcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgUEFSU0VSX0FTU0VSVCghbV9jdXJyZW50QmxvY2st
PnNpemUoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNp
emUoKSk7CiAKICAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5wb2ludGVyKTsKIApAQCAtNTM1OSw4ICs1MjUyLDggQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxQ
cmVkaWN0aW9ucy5hcHBlbmQocHJlZGljdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgUEFSU0VSX0FTU0VSVChvcGVyYW5kLmlzQXJndW1l
bnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVJTRVJfQVNTRVJUKHN0YXRpY19jYXN0
PHVpbnQzMl90PihvcGVyYW5kLnRvQXJndW1lbnQoKSkgPCBhcmd1bWVudFByZWRpY3Rpb25zLnNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcGVyYW5kLmlz
QXJndW1lbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0
aWNfY2FzdDx1aW50MzJfdD4ob3BlcmFuZC50b0FyZ3VtZW50KCkpIDwgYXJndW1lbnRQcmVkaWN0
aW9ucy5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFi
bGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkFyZ3VtZW50cy5hZGQob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRQcmVk
aWN0aW9uc1tvcGVyYW5kLnRvQXJndW1lbnQoKV0gPSBwcmVkaWN0aW9uOwpAQCAtNTM2OSw3ICs1
MjYyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
IAogICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJn
dW1lbnRzOyArK2FyZ3VtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgUEFSU0VSX0FTU0VS
VChzZWVuQXJndW1lbnRzLmNvbnRhaW5zKGFyZ3VtZW50KSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzZWVuQXJndW1lbnRzLmNvbnRhaW5zKGFyZ3VtZW50KSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC01NDEwLDcgKzUzMDMsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2dyYXBoLm1fcm9vdFRv
QXJndW1lbnRzLmFkZChtX2N1cnJlbnRCbG9jaywgQXJndW1lbnRzVmVjdG9yKCkpOwotICAgICAg
ICAgICAgICAgIFBBUlNFUl9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgICAg
ICAgICBBcmd1bWVudHNWZWN0b3ImIGVudHJ5cG9pbnRBcmd1bWVudHMgPSBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRBcmd1bWVudHMucmVzaXpl
KG1fbnVtQXJndW1lbnRzKTsKIApAQCAtNTQ1MCw3ICs1MzQzLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFRlcm1pbmFsaXR5
IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsLCBD
YWxsTW9kZTo6VGFpbCk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fY3VycmVu
dEluc3RydWN0aW9uID09IGN1cnJlbnRJbnN0cnVjdGlvbiwgImhhbmRsZUNhbGwsIHdoaWNoIG1h
eSBoYXZlIGlubGluZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlvbiIp
OwogICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgdGVybWluYWwgdGhlbiB3ZSBzaG91bGQg
bm90IHBhcnNlIGFueSBmdXJ0aGVyIGJ5dGVjb2RlcyBhcyB0aGUgVGFpbENhbGwgd2lsbCBleGl0
IHRoZSBmdW5jdGlvbi4KLSAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5h
bCwgaG93ZXZlciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qdW1wIHRv
IHVwZGF0ZSBtZXRhZGF0YSBhbmQgY2xlYW4KKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlz
IG5vdCB0ZXJtaW5hbCwgaG93ZXZlciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3Jl
dC9vcF9qbXAgdG8gdXBkYXRlIG1ldGFkYXRhIGFuZCBjbGVhbgogICAgICAgICAgICAgLy8gdGhp
bmdzIHVwLgogICAgICAgICAgICAgaWYgKHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFsKQogICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RhaWxfY2FsbCk7CkBAIC01NDc0LDcgKzUzNjcs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVWYXJhcmdzQ2FsbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsVmFyYXJncywgQ2FsbE1vZGU6OlRhaWwpOwogICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2N1cnJlbnRJbnN0cnVjdGlvbiA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24sICJoYW5kbGVWYXJhcmdzQ2FsbCwgd2hpY2ggbWF5IGhhdmUgaW5saW5lZCB0
aGUgY2FsbGVlLCB0cmFzaGVkIG1fY3VycmVudEluc3RydWN0aW9uIik7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgY2FsbCBpcyB0ZXJtaW5hbCB0aGVuIHdlIHNob3VsZCBub3QgcGFyc2UgYW55IGZ1
cnRoZXIgYnl0ZWNvZGVzIGFzIHRoZSBUYWlsQ2FsbCB3aWxsIGV4aXQgdGhlIGZ1bmN0aW9uLgot
ICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgbm90IHRlcm1pbmFsLCBob3dldmVyLCB0aGVu
IHdlIHdhbnQgdGhlIHN1YnNlcXVlbnQgb3BfcmV0L29wX2p1bXAgdG8gdXBkYXRlIG1ldGFkYXRh
IGFuZCBjbGVhbgorICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgbm90IHRlcm1pbmFsLCBo
b3dldmVyLCB0aGVuIHdlIHdhbnQgdGhlIHN1YnNlcXVlbnQgb3BfcmV0L29wX2ptcCB0byB1cGRh
dGUgbWV0YWRhdGEgYW5kIGNsZWFuCiAgICAgICAgICAgICAvLyB0aGluZ3MgdXAuCiAgICAgICAg
ICAgICBpZiAodGVybWluYWxpdHkgPT0gTm9uVGVybWluYWwpCiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOwpAQCAtNTQ5MCwxMiArNTM4MywxMiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MsIENhbGxNb2RlOjpUYWlsKTsKICAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3VycmVu
dEluc3RydWN0aW9uLCAiaGFuZGxlVmFyYXJnc0NhbGwsIHdoaWNoIG1heSBoYXZlIGlubGluZWQg
dGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlvbiIpOwogICAgICAgICAgICAg
Ly8gSWYgdGhlIGNhbGwgaXMgdGVybWluYWwgdGhlbiB3ZSBzaG91bGQgbm90IHBhcnNlIGFueSBm
dXJ0aGVyIGJ5dGVjb2RlcyBhcyB0aGUgVGFpbENhbGwgd2lsbCBleGl0IHRoZSBmdW5jdGlvbi4K
LSAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5hbCwgaG93ZXZlciwgdGhl
biB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qdW1wIHRvIHVwZGF0ZSBtZXRhZGF0
YSBhbmQgY2xlYW4KKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5hbCwg
aG93ZXZlciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qbXAgdG8gdXBk
YXRlIG1ldGFkYXRhIGFuZCBjbGVhbgogICAgICAgICAgICAgLy8gdGhpbmdzIHVwLgogICAgICAg
ICAgICAgaWYgKHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFsKQotICAgICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3RhaWxfY2FsbCk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF90YWlsX2NhbGwpOworICAgICAgICAgICAgICAgIExBU1Rf
T1BDT0RFKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CkBAIC01NTU1LDgg
KzU0NDgsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICAgICAgUEFSU0VSX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgICAgICBQ
QVJTRVJfQVNTRVJUKHN0YXRpY19jYXN0PEpTU2NvcGUqPihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0u
dS5wb2ludGVyKSA9PSBjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0
aWNfY2FzdDxKU1Njb3BlKj4oY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9pbnRlcikgPT0gY29u
c3RhbnRTY29wZSk7CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3
ZWFrSlNDb25zdGFudChjb25zdGFudFNjb3BlKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNTg5Nyw3ICs1NzkwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIC8vIEJhc2VsaW5lLT5ERkcgT1NSIGp1
bXBzIGJldHdlZW4gbG9vcCBoaW50cy4gVGhlIERGRyBhc3N1bWVzIHRoYXQgQmFzZWxpbmUtPkRG
RwogICAgICAgICAgICAgLy8gT1NSIGNhbiBvbmx5IGhhcHBlbiBhdCBiYXNpYyBibG9jayBib3Vu
ZGFyaWVzLiBBc3NlcnQgdGhhdCB0aGVzZSB0d28gc3RhdGVtZW50cwogICAgICAgICAgICAgLy8g
YXJlIGNvbXBhdGlibGUuCi0gICAgICAgICAgICBQQVJTRVJfQVNTRVJUKG1fY3VycmVudEluZGV4
ID09IGJsb2NrQmVnaW4pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9jdXJyZW50SW5k
ZXggPT0gYmxvY2tCZWdpbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIG5ldmVy
IGRvIE9TUiBpbnRvIGFuIGlubGluZWQgY29kZSBibG9jay4gVGhhdCBjb3VsZCBub3QgaGFwcGVu
LCBzaW5jZSBPU1IKICAgICAgICAgICAgIC8vIGxvb2tzIHVwIHRoZSBjb2RlIGJsb2NrIHRoYXQg
aXMgdGhlIHJlcGxhY2VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklUIGNvZGUKQEAgLTYyNDQsMjUg
KzYxMzcsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvY2sqIGJs
b2NrLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVQKICAgICB9CiAgICAgICAgIAogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KICAgICAKLSAgICBpZiAoREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbDo6
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiTWFya2luZyAiLCBSYXdQb2ludGVyKGJsb2NrKSwg
IiBhcyBsaW5rZWQgKGFjdHVhbGx5IGRpZCBsaW5raW5nKVxuIik7CisgICAgVkVSQk9TRV9MT0co
Ik1hcmtpbmcgIiwgUmF3UG9pbnRlcihibG9jayksICIgYXMgbGlua2VkIChhY3R1YWxseSBkaWQg
bGlua2luZylcbiIpOwogICAgIGJsb2NrLT5kaWRMaW5rKCk7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2Nrcywg
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29kZVBhcnNl
cjo6bGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9y
PEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKERGR0J5dGVD
b2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdHRlbXB0
aW5nIHRvIGxpbmsgIiwgUmF3UG9pbnRlcih1bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrKSwgIlxu
Iik7Ci0gICAgICAgIGlmICh1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZykg
ewotICAgICAgICAgICAgaWYgKERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERvZXMgbmVlZCBub3JtYWwgbGlua2luZy5cbiIp
OwotICAgICAgICAgICAgbGlua0Jsb2NrKHVubGlua2VkQmxvY2tzW2ldLm1fYmxvY2ssIHBvc3Np
YmxlVGFyZ2V0cyk7Ci0gICAgICAgICAgICB1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFs
TGlua2luZyA9IGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFZFUkJPU0VfTE9HKCJBdHRlbXB0
aW5nIHRvIGxpbmsgIiwgUmF3UG9pbnRlcih1bmxpbmtlZEJsb2Nrc1tpXSksICJcbiIpOworICAg
ICAgICBsaW5rQmxvY2sodW5saW5rZWRCbG9ja3NbaV0sIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAg
fQogfQogCkBAIC02MjcwLDcgKzYxNTYsNiBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICBCeXRlQ29kZVBhcnNlciogYnl0ZUNvZGVQYXJz
ZXIsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLAotICAgIEJhc2ljQmxvY2sqIGNhbGxzaXRlQmxvY2tIZWFkLAogICAgIEpTRnVuY3Rpb24q
IGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJh
bWVTdGFydCwKQEAgLTYyNzksMTAgKzYxNjQsOCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNv
ZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVk
QmxvY2socHJvZmlsZWRCbG9jaykKLSAgICAsIG1fY2FsbHNpdGVCbG9ja0hlYWQoY2FsbHNpdGVC
bG9ja0hlYWQpCisgICAgLCBtX2NvbnRpbnVhdGlvbkJsb2NrKG51bGxwdHIpCiAgICAgLCBtX3Jl
dHVyblZhbHVlKHJldHVyblZhbHVlVlIpCi0gICAgLCBtX2RpZFJldHVybihmYWxzZSkKLSAgICAs
IG1fZGlkRWFybHlSZXR1cm4oZmFsc2UpCiAgICAgLCBtX2NhbGxlcihieXRlQ29kZVBhcnNlci0+
bV9pbmxpbmVTdGFja1RvcCkKIHsKICAgICB7CkBAIC02MzEyLDcgKzYxOTUsNiBAQCBCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgLy8g
SW5saW5lIGNhc2UuCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQYXJzZXIt
Pm1fY29kZUJsb2NrKTsKICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0LmlzVmFs
aWQoKSk7Ci0gICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCk7CiAgICAgICAgIAogICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fcGxhbi5p
bmxpbmVDYWxsRnJhbWVzLT5hZGQoKTsKIApAQCAtNjM1NywxNCArNjIzOSwxMiBAQCBCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAg
IG1fc3dpdGNoUmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9m
U3dpdGNoSnVtcFRhYmxlcygpOwogICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLT5hZGRTd2l0Y2hKdW1wVGFibGUoKSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGkp
OwogICAgICAgICB9Ci0gICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSB0
cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgog
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7
CiAgICAgICAgIEFTU0VSVCghY2FsbGVlKTsKICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZVZS
LmlzVmFsaWQoKSk7CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNWYWxp
ZCgpKTsKLSAgICAgICAgQVNTRVJUKCFjYWxsc2l0ZUJsb2NrSGVhZCk7CiAKICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUgPSAwOwogCkBAIC02Mzc3LDcgKzYyNTcsNiBAQCBCeXRlQ29kZVBhcnNl
cjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAgIG1fY29u
c3RhbnRCdWZmZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29kZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKQogICAgICAgICAgICAg
bV9zd2l0Y2hSZW1hcFtpXSA9IGk7Ci0gICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xp
bmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgYnl0ZUNvZGVQYXJzZXItPm1faW5saW5l
U3RhY2tUb3AgPSB0aGlzOwpAQCAtNjQzMiw4NSArNjMxMSw1NyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUNvZGVCbG9jaygpCiAKICAgICAgICAgLy8gTG9vcCB1bnRpbCB3ZSByZWFjaCB0
aGUgY3VycmVudCBsaW1pdCAoaS5lLiBuZXh0IGp1bXAgdGFyZ2V0KS4KICAgICAgICAgZG8gewor
ICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGFscmVhZHkgYmUgYSBjdXJyZW50QmxvY2sgaW4gdHdv
IGNhc2VzOgorICAgICAgICAgICAgLy8gLSB3ZSBtYXkgaGF2ZSBqdXN0IGVudGVyZWQgdGhlIGxv
b3AgZm9yIHRoZSBmaXJzdCB0aW1lCisgICAgICAgICAgICAvLyAtIHdlIG1heSBoYXZlIGp1c3Qg
cmV0dXJuZWQgZnJvbSBhbiBpbmxpbmVkIGNhbGxlZSB0aGF0IGhhZCBzb21lIGVhcmx5IHJldHVy
bnMgYW5kCisgICAgICAgICAgICAvLyAgIHNvIGFsbG9jYXRlZCBhIGNvbnRpbnVhdGlvbiBibG9j
aywgYW5kIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgY2FsbCBpcyBhIGp1bXAgdGFyZ2V0Lgor
ICAgICAgICAgICAgLy8gSW4gYm90aCBjYXNlcywgd2Ugd2FudCB0byBrZWVwIHVzaW5nIGl0Lgog
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGxhc3QgYmxvY2suCi0gICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubnVtQmxvY2tzKCkgJiYgbV9ncmFwaC5sYXN0QmxvY2soKS0+aXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGJsb2NrIGJlbG9uZ2luZyB0byB1
cy4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5r
ZWRCbG9ja3MubGFzdCgpLm1fYmxvY2sgPT0gbV9ncmFwaC5sYXN0QmxvY2soKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEVpdGhlciB0aGUgYmxvY2sgaXMgbGlua2FibGUgb3IgaXQgaXNuJ3Qu
IElmIGl0J3MgbGlua2FibGUgdGhlbiBpdCdzIHRoZSBsYXN0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGJsb2NrIGluIHRoZSBibG9ja0xpbmtpbmdUYXJnZXRzIGxpc3QuIElmIGl0J3Mgbm90IHRo
ZW4gdGhlIGxhc3QgYmxvY2sgd2lsbAotICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGEgbG93
ZXIgYnl0ZWNvZGUgaW5kZXggdGhhdCB0aGUgb25lIHdlJ3JlIGFib3V0IHRvIGdpdmUgdG8gdGhp
cyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxv
Y2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xp
bmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgYmxvY2sgbGlua2FibGUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtp
bmdUYXJnZXRzLmlzRW1wdHkoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFw
cGVuZChtX2dyYXBoLmxhc3RCbG9jaygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAvLyBDaGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4K
LSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9jaygp
OwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1f
Y3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhtX2N1
cnJlbnRJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2sucHRyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgotICAgICAgICAgICAgICAg
ICAgICAvLyAxKSBJZiB0aGUgYnl0ZWNvZGVCZWdpbiBpcyBncmVhdGVyIHRoYW4gY3VycmVudElu
ZGV4LCB0aGVuIHNvbWV0aGluZyBoYXMgZ29uZQotICAgICAgICAgICAgICAgICAgICAvLyAgICBo
b3JyaWJseSB3cm9uZy4gU28sIHdlJ3JlIHByb2JhYmx5IGdlbmVyYXRpbmcgaW5jb3JyZWN0IGNv
ZGUuCi0gICAgICAgICAgICAgICAgICAgIC8vIDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlzIGVx
dWFsIHRvIHRoZSBjdXJyZW50SW5kZXgsIHRoZW4gd2UgZmFpbGVkIHRvIGRvCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgIGEgcGVlcGhvbGUgY29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGluIHRo
ZSBpZiBzdGF0ZW1lbnQgYWJvdmUuIFNvLCB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyAg
ICBnZW5lcmF0aW5nIHN1Ym9wdGltYWwgY29kZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9yIHRo
ZSBDRkcgc2ltcGxpZmllci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNr
VG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbGFzdEJlZ2luID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrLT5ieXRlY29kZUJl
Z2luOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsYXN0QmVnaW4sIGxhc3RCZWdpbiA9PSBVSU5UX01BWCB8fCBsYXN0
QmVnaW4gPCBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5s
aW5rZWRCbG9jayhibG9jay5wdHIoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrLnB0cigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGJsb2NrIGlzIGRlZmluaXRlbHkgYW4gT1NSIHRh
cmdldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm51bUJsb2NrcygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Jvb3RzLmFwcGVuZChibG9jay5wdHIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmRC
bG9jayhXVEZNb3ZlKGJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXBhcmVUb1BhcnNl
QmxvY2soKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGFsbG9jYXRlVGFyZ2V0
YWJsZUJsb2NrKG1fY3VycmVudEluZGV4KTsKKworICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJz
dCBibG9jayBpcyBkZWZpbml0ZWx5IGFuIE9TUiB0YXJnZXQuCisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubnVtQmxvY2tzKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fcm9vdHMuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHBhcnNlQmxvY2sobGltaXQpOwog
CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgZ29uZSBiZXlvbmQgdGhlIGxpbWl0
LgogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IGxpbWl0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgcGxhbnRlZCBhIHRlcm1pbmFsLCBv
ciB3ZSBqdXN0IGdhdmUgdXAgYmVjYXVzZQotICAgICAgICAgICAgLy8gd2UgcmVhbGl6ZWQgdGhh
dCB0aGUganVtcCB0YXJnZXQgaW5mb3JtYXRpb24gaXMgaW1wcmVjaXNlLCBvciB3ZQotICAgICAg
ICAgICAgLy8gYXJlIGF0IHRoZSBlbmQgb2YgYW4gaW5saW5lIGZ1bmN0aW9uLCBvciB3ZSByZWFs
aXplZCB0aGF0IHdlCi0gICAgICAgICAgICAvLyBzaG91bGQgc3RvcCBwYXJzaW5nIGJlY2F1c2Ug
dGhlcmUgd2FzIGEgcmV0dXJuIGluIHRoZSBmaXJzdAotICAgICAgICAgICAgLy8gYmFzaWMgYmxv
Y2suCi0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1
cnJlbnRCbG9jay0+dGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5zaXplKCkgJiYgaW5saW5lQ2FsbEZyYW1lKCkpIHx8ICFzaG91bGRDb250
aW51ZVBhcnNpbmcpOwogCiAgICAgICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlUGFyc2luZykg
ewotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZWNvZGVQYXJzaW5n
KCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgcGFyc2luZyAiLCAqY29kZUJs
b2NrLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBWRVJCT1NFX0xPRygiRG9uZSBwYXJzaW5nICIs
ICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwor
CisgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFRoaXMgY2FzZSBvbmx5IGhhcHBlbnMgaWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24g
d2FzIGFuIGlubGluZWQgY2FsbCB3aXRoIGVhcmx5IHJldHVybnMKKyAgICAgICAgICAgICAgICAv
LyBvciBwb2x5bW9ycGhpYyAoY3JlYXRpbmcgYW4gZW1wdHkgY29udGludWF0aW9uIGJsb2NrKSwK
KyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiB3ZSBoaXQgdGhlIGxpbWl0IGJlZm9yZSBwdXR0
aW5nIGFueXRoaW5nIGluIHRoZSBjb250aW51YXRpb24gYmxvY2suCisgICAgICAgICAgICAgICAg
QVNTRVJUKG1fY3VycmVudEluZGV4ID09IGxpbWl0KTsKKyAgICAgICAgICAgICAgICBtYWtlQmxv
Y2tUYXJnZXRhYmxlKG1fY3VycmVudEJsb2NrLCBtX2N1cnJlbnRJbmRleCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+dGVybWlu
YWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCkgJiYgaW5saW5lQ2FsbEZyYW1lKCkpKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG51bGxwdHI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKG1fY3VycmVudElu
ZGV4IDwgbGltaXQpOwogICAgIH0KIAogICAgIC8vIFNob3VsZCBoYXZlIHJlYWNoZWQgdGhlIGVu
ZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VERkdCeXRlY29kZVBhcnNpbmcoKSkKLSAgICAgICAgZGF0YUxvZygiRG9uZSBwYXJzaW5n
ICIsICpjb2RlQmxvY2ssICIgKGZlbGwgb2ZmIGVuZClcbiIpOworICAgIFZFUkJPU0VfTE9HKCJE
b25lIHBhcnNpbmcgIiwgKmNvZGVCbG9jaywgIiAoZmVsbCBvZmYgZW5kKVxuIik7CiB9CiAKLWJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkK
IHsKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KICAgICBBU1NFUlQoIW1fY3VycmVu
dEluZGV4KTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVjb2RlUGFyc2lu
ZygpKQotICAgICAgICBkYXRhTG9nKCJQYXJzaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7Cisg
ICAgVkVSQk9TRV9MT0coIlBhcnNpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAg
ICBtX2RmZ0NvZGVCbG9jayA9IG1fZ3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2NrOwog
ICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSAmJiBtX2RmZ0NvZGVCbG9jawpAQCAt
NjUyMiwxMyArNjM3MywxNSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgfQog
ICAgIAogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKLSAgICAgICAgdGhp
cywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgMCwgMCwgVmlydHVhbFJlZ2lzdGVyKCks
IFZpcnR1YWxSZWdpc3RlcigpLAorICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxl
ZEJsb2NrLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCksCiAgICAgICAg
IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIElubGluZUNhbGxGcmFtZTo6Q2FsbCk7CiAg
ICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50
cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMpOwogCiAgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZURGR0J5dGVjb2RlUGFyc2luZygpKQorICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICBtX2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwogCiAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CkBAIC02NTQzLDEzICs2Mzk2LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIAog
ICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFy
YW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgcGFyc2UoR3JhcGgmIGdyYXBoKQordm9pZCBwYXJzZShHcmFwaCYgZ3JhcGgpCiB7Ci0g
ICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGdyYXBoKS5wYXJzZSgpOworICAgIEJ5dGVDb2RlUGFy
c2VyKGdyYXBoKS5wYXJzZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgKaW5kZXggNDBkMmFi
Yzc4MjZjOWNjNjY1YzczOWIyMWI5NTRjZTFmNjBiOGRhZC4uNWI1MDhhMWM1MDIwYWM1ZDU3NGQy
YTczMWFmOTE5Y2E0YWQ4NDliMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuaApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi1ib29sIHBhcnNlKEdyYXBoJik7Cit2b2lkIHBh
cnNlKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA1YmZlNTI3ZTE1Y2ZjODRkY2M2YTRiMTRiMTUw
MjE0YzM2OTA4YWJiLi4xNzNlYWVkYTYzY2ZmNjI5OWJhMzZiODQxNjk4NzJiZTFjYzNlMzA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtODE3LDcgKzgxNyw4IEBA
IHZvaWQgR3JhcGg6OmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKGJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAKKworICAgICAgICBkYXRhTG9nSWYoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVj
b2RlUGFyc2luZygpLCAiQmFzaWMgYmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgd2FzIGtpbGxlZCBi
ZWNhdXNlIGl0IHdhcyB1bnJlYWNoYWJsZVxuIik7CiAgICAgICAgIGtpbGxCbG9ja0FuZEl0c0Nv
bnRlbnRzKGJsb2NrKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAppbmRleCBmNTE3ZmU5ZWFmZGE1NjUzZTk1NTk1MTY0MGQxNjViZGQyNWNlZGQwLi41YmY0Y2Rl
N2I4ZmVmYWYyZGVmMzg1MmFmNWYyOGI5NWI2ODgxM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKQEAgLTI0NywxMSArMjQ3LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRo
IFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQogICAgIH0KICAgICAKICAgICBHcmFwaCBkZmco
KnZtLCAqdGhpcyk7Ci0gICAgCi0gICAgaWYgKCFwYXJzZShkZmcpKSB7Ci0gICAgICAgIGZpbmFs
aXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhpcyk7Ci0gICAgICAg
IHJldHVybiBGYWlsUGF0aDsKLSAgICB9CisgICAgcGFyc2UoZGZnKTsKIAogICAgIGNvZGVCbG9j
ay0+c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldDo6ZGZnQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>