<?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>226096</bug_id>
          
          <creation_ts>2021-05-21 11:41:15 -0700</creation_ts>
          <short_desc>Finalize DFG/FTL code refs on the compiler threads</short_desc>
          <delta_ts>2021-05-25 11:17:20 -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>
          <dependson>226180</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762501</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-21 11:41:15 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762681</commentid>
    <comment_count>1</comment_count>
      <attachid>429369</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-21 17:06:56 -0700</bug_when>
    <thetext>Created attachment 429369
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762694</commentid>
    <comment_count>2</comment_count>
      <attachid>429376</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-21 17:38:11 -0700</bug_when>
    <thetext>Created attachment 429376
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762698</commentid>
    <comment_count>3</comment_count>
      <attachid>429378</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-21 18:03:18 -0700</bug_when>
    <thetext>Created attachment 429378
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763351</commentid>
    <comment_count>4</comment_count>
      <attachid>429599</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 17:28:29 -0700</bug_when>
    <thetext>Created attachment 429599
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763358</commentid>
    <comment_count>5</comment_count>
      <attachid>429602</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 17:46:09 -0700</bug_when>
    <thetext>Created attachment 429602
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763397</commentid>
    <comment_count>6</comment_count>
      <attachid>429602</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-24 19:56:31 -0700</bug_when>
    <thetext>Comment on attachment 429602
patch

LGTM but the mac-wk1 EWS&apos;s failure seems real.  The failure is in the RELEASE_ASSERT in ~LinkBuffer on a worker thread at VM shutdown.  

Thread 77 Crashed:: WebCore: Worker
0   com.apple.JavaScriptCore      	0x0000000107d106d3 WTFCrashWithInfo(int, char const*, char const*, int) + 19
1   com.apple.JavaScriptCore      	0x00000001073eff0a JSC::LinkBuffer::~LinkBuffer() + 58
2   com.apple.JavaScriptCore      	0x0000000107839e5d JSC::DFG::JITFinalizer::~JITFinalizer() + 45
3   com.apple.JavaScriptCore      	0x0000000107906b18 JSC::DFG::Plan::~Plan() + 312
4   com.apple.JavaScriptCore      	0x000000010795e264 JSC::DFG::Worklist::removeAllReadyPlansForVM(JSC::VM&amp;) + 116
5   com.apple.JavaScriptCore      	0x0000000107f961e7 JSC::VM::~VM() + 279
6   com.apple.JavaScriptCore      	0x0000000107e3a7d7 JSC::JSLockHolder::~JSLockHolder() + 119
7   com.apple.WebCore             	0x000000010e069754 WebCore::WorkerOrWorkletScriptController::~WorkerOrWorkletScriptController() + 212
8   com.apple.WebCore             	0x000000010e071195 WTF::Detail::CallableWrapper&lt;WebCore::WorkerOrWorkletThread::stop(WTF::Function&lt;void ()&gt;&amp;&amp;)::$_34::operator()(WebCore::ScriptExecutionContext&amp;) const::&apos;lambda&apos;(WebCore::ScriptExecutionContext&amp;), void, WebCore::ScriptExecutionContext&amp;&gt;::call(WebCore::ScriptExecutionContext&amp;) + 37
9   com.apple.WebCore             	0x000000010e071816 WebCore::WorkerRunLoop::runCleanupTasks(WebCore::WorkerOrWorkletGlobalScope*) + 262
10  com.apple.WebCore             	0x000000010e0713bf WebCore::WorkerRunLoop::run(WebCore::WorkerOrWorkletGlobalScope*) + 111
11  com.apple.WebCore             	0x000000010e06ca30 WebCore::WorkerOrWorkletThread::workerOrWorkletThread() + 768
12  com.apple.JavaScriptCore      	0x00000001070739ec WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 124
13  com.apple.JavaScriptCore      	0x0000000107076259 WTF::wtfThreadEntryPoint(void*) + 9
14  libsystem_pthread.dylib       	0x00007fff72768109 _pthread_start + 148
15  libsystem_pthread.dylib       	0x00007fff72763b8b thread_start + 15

Looks like possibly the plan wasn&apos;t cancelled, or not cancelled in time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763415</commentid>
    <comment_count>7</comment_count>
      <attachid>429602</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 20:31:03 -0700</bug_when>
    <thetext>Comment on attachment 429602
patch

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

&gt; Source/JavaScriptCore/assembler/LinkBuffer.cpp:49
&gt; +        RELEASE_ASSERT(m_mainThreadFinalizationTasks.isEmpty());

I’ll remove this RELEASE_ASSERT. It’s taking a lot of plumbing to make it work. Which is usually a bad reason to keep an assert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763421</commentid>
    <comment_count>8</comment_count>
      <attachid>429602</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-24 20:52:07 -0700</bug_when>
    <thetext>Comment on attachment 429602
patch

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

r=me

&gt;&gt; Source/JavaScriptCore/assembler/LinkBuffer.cpp:49
&gt;&gt; +        RELEASE_ASSERT(m_mainThreadFinalizationTasks.isEmpty());
&gt; 
&gt; I’ll remove this RELEASE_ASSERT. It’s taking a lot of plumbing to make it work. Which is usually a bad reason to keep an assert

I&apos;m fine with removing it.  The failure was at VM destruction, and m_mainThreadFinalizationTasks will get cleaned out anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763585</commentid>
    <comment_count>9</comment_count>
      <attachid>429668</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-25 11:15:32 -0700</bug_when>
    <thetext>Created attachment 429668
[fast-cq] patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763586</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-25 11:16:55 -0700</bug_when>
    <thetext>Committed r278030 (238127@main): &lt;https://commits.webkit.org/238127@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429668.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763587</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-25 11:17:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78466944&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429369</attachid>
            <date>2021-05-21 17:06:56 -0700</date>
            <delta_ts>2021-05-21 17:38:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>66904</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtOTc3LDYgKzk3NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGF0ZUxpbmtUYXNrcy5h
cHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3RvcikpOwogICAg
IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBhZGRNYWluVGhy
ZWFkRmluYWxpemF0aW9uVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgbV9tYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MuYXBwZW5kKGNyZWF0ZVNoYXJlZFRhc2s8
dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKKyAgICB9CisKICNpZiBDT01QSUxFUihHQ0Mp
CiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgR0NDIGRlbWFuZGluZyB0aGF0IG1lbWNweSAibXVzdCBi
ZSB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZSIuCiAgICAgc3Rh
dGljIHZvaWQqIG1lbWNweSh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6ZV90IHNpemUp
CkBAIC0xMTIxLDYgKzExMjcsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBWZWN0b3I8UmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiAgICAgVmVjdG9yPFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGF0ZUxpbmtUYXNrczsKKyAg
ICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9tYWluVGhy
ZWFkRmluYWxpemF0aW9uVGFza3M7CiAKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07
IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHNpemVfdCBMaW5rQnVm
ZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNpemVzW0xpbmtCdWZmZXI6Om51bWJlck9m
UHJvZmlsZXNdOwogCitMaW5rQnVmZmVyOjp+TGlua0J1ZmZlcigpCit7CisgICAgaWYgKCFkaWRG
YWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX21haW5UaHJlYWRGaW5h
bGl6YXRpb25UYXNrcy5pc0VtcHR5KCkpOworfQorCiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJs
eUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVt
cERGR0Rpc2Fzc2VtYmx5KCkpCkBAIC00NDAsNiArNDQ2LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjps
aW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogCiAgICAgbV9saW5rVGFza3MgPSBXVEZNb3ZlKG1hY3Jv
QXNzZW1ibGVyLm1fbGlua1Rhc2tzKTsKICAgICBtX2xhdGVMaW5rVGFza3MgPSBXVEZNb3ZlKG1h
Y3JvQXNzZW1ibGVyLm1fbGF0ZUxpbmtUYXNrcyk7CisgICAgbV9tYWluVGhyZWFkRmluYWxpemF0
aW9uVGFza3MgPSBXVEZNb3ZlKG1hY3JvQXNzZW1ibGVyLm1fbWFpblRocmVhZEZpbmFsaXphdGlv
blRhc2tzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYg
bWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKQEAgLTQ4NSw2ICs0
OTIsMTMgQEAgdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCkKICAgICBNYWNy
b0Fzc2VtYmxlcjo6Y2FjaGVGbHVzaChjb2RlKCksIG1fc2l6ZSk7CiB9CiAKK3ZvaWQgTGlua0J1
ZmZlcjo6cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCkKK3sKKyAgICBmb3IgKGF1dG8m
IHRhc2sgOiBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcykKKyAgICAgICAgdGFzay0+cnVu
KCp0aGlzKTsKKyAgICBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcy5jbGVhcigpOworfQor
CiAjaWYgRFVNUF9MSU5LX1NUQVRJU1RJQ1MKIHZvaWQgTGlua0J1ZmZlcjo6ZHVtcExpbmtTdGF0
aXN0aWNzKHZvaWQqIGNvZGUsIHNpemVfdCBpbml0aWFsaXplU2l6ZSwgc2l6ZV90IGZpbmFsU2l6
ZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEzNiwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogICAgIH0KIAotICAg
IH5MaW5rQnVmZmVyKCkKLSAgICB7Ci0gICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5MaW5r
QnVmZmVyKCk7CisKKyAgICB2b2lkIGNhbmNlbCgpIHsgbV9tYWluVGhyZWFkRmluYWxpemF0aW9u
VGFza3MuY2xlYXIoKTsgfQorCisgICAgdm9pZCBydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFz
a3MoKTsKICAgICAKICAgICBib29sIGRpZEZhaWxUb0FsbG9jYXRlKCkgY29uc3QKICAgICB7CkBA
IC00MDQsNiArNDA2LDcgQEAgcHJpdmF0ZToKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlu
a0J1ZmZlclB0clRhZz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KExpbmtCdWZmZXImKT4+PiBtX2xpbmtUYXNrczsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9sYXRlTGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX21haW5UaHJlYWRGaW5hbGl6YXRp
b25UYXNrczsKIAogICAgIHN0YXRpYyBzaXplX3Qgc19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRT
aXplc1tudW1iZXJPZlByb2ZpbGVzXTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2NCw3ICszNjQsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhl
bHBlcnMmIGppdCkKIHsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5
UHRyVGFnPigpKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCkpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRh
Zyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMiw3ICsyMzIsNyBAQCB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0
CiAgICAgICAgIFZNKiB2bSA9ICZtX3ZtOwogICAgICAgICBqaXQtPmFkZExpbmtUYXNrKAogICAg
ICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVs
KHZtLT5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpKTsKICAgICAgICAgICAgIH0pOwog
I2Vsc2UKICAgICAgICAgaml0LT5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Mb29r
dXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZtX3ZtKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAy
Nzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGVJbXBsKAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMobW9kZSkpCiAgICAgICAgIGRh
dGFMb2coIkRGRyhEcml2ZXIpIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiIHdpdGggIiwgbW9k
ZSwgIiwgaW5zdHJ1Y3Rpb25zIHNpemUgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUo
KSwgIlxuIik7CiAgICAgCisgICAgLyogT09QUwogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBz
dHVicyB0aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2Fu
dCB0bwogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMg
ZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5
Rml4dXBHZW5lcmF0b3IpOwpAQCAtODUsNiArODYsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1
bHQgY29tcGlsZUltcGwoCiAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0
b3IpOworICAgICovCiAgICAgCiAgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpKQogICAgICAgICB2
bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXModm0sICJQcmVwYXJpbmcgZm9y
IERGRyBjb21waWxhdGlvbi4iX3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpbmFsaXplci5oCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHNpemVfdCBjb2RlU2l6ZSgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
ZmluYWxpemUoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGZpbmFsaXplRnVuY3Rpb24oKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpIHsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgUGxhbiYg
bV9wbGFuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXplci5oIgogI2luY2x1
ZGUgIkRGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2Rl
LmgiCkBAIC0yNzMsMTMgKzI3NCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZm
ZXImIGxpbmtCCiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBpZiAoIW1fZXhj
ZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlv
bkNoZWNrcywgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgICAgIGxpbmtCdWZm
ZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElT
dHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpKTsKICAg
ICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpCi0g
ICAgICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xs
YmFjaywgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVS
b2xsYmFjaywgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwotICAgIGF1dG8gdGFyZ2V0ID0gQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOworICAgIGF1
dG8gdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtKCkuZ2V0Q1RJ
U3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fb3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBp
ZiAoIU9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7CkBAIC0zOTgsOCArMzk4LDExIEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQogCiAgICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIp
OwogCi0gICAgbV9ncmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8SklURmluYWxp
emVyPigKLSAgICAgICAgbV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgp
LCBXVEZNb3ZlKGxpbmtCdWZmZXIpKSk7CisgICAgYXV0byBjb2RlUmVmID0gRklOQUxJWkVfREZH
X0NPREUoKmxpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdK
SVQpKS5kYXRhKCkpOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoY29k
ZVJlZiwgY29kZVJlZi5jb2RlKCkpOworCisgICAgYXV0byBmaW5hbGl6ZXIgPSBtYWtlVW5pcXVl
PEpJVEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgp
LCBXVEZNb3ZlKGxpbmtCdWZmZXIpKTsKKyAgICBtX2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIo
V1RGTW92ZShmaW5hbGl6ZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0
aW9uKCkKQEAgLTQ5NiwxNCArNDk5LDE4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5j
dGlvbigpCiAgICAgbV9zcGVjdWxhdGl2ZS0+bGlua09TUkVudHJpZXMoKmxpbmtCdWZmZXIpOwog
ICAgIAogICAgIGlmIChyZXF1aXJlc0FyaXR5Rml4dXApCi0gICAgICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bSgpLmdldENU
SVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgIGxpbmtCdWZmZXIt
PmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bSgpLmdl
dENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpKTsKIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5r
QnVmZmVyKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlD
aGVjayk7CiAKLSAgICBtX2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIobWFrZVVuaXF1ZTxKSVRG
aW5hbGl6ZXI+KAotICAgICAgICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25O
dWxsKCksIFdURk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKSk7CisgICAgbV9qaXRD
b2RlLT5pbml0aWFsaXplQ29kZVJlZkZvckRGRygKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUo
KmxpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3Ry
aW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5k
YXRhKCkpLAorICAgICAgICB3aXRoQXJpdHlDaGVjayk7CisKKyAgICBhdXRvIGZpbmFsaXplciA9
IG1ha2VVbmlxdWU8SklURmluYWxpemVyPihtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVh
c2VOb25OdWxsKCksIFdURk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsKKyAgICBt
X2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIoV1RGTW92ZShmaW5hbGl6ZXIpKTsKIH0KIAogdm9p
ZCBKSVRDb21waWxlcjo6ZGlzYXNzZW1ibGUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlz
aW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgSklURmluYWxpemVyOjp+SklU
RmluYWxpemVyKCkKIHsKIH0KIAordm9pZCBKSVRGaW5hbGl6ZXI6OmNhbmNlbCgpCit7CisgICAg
bV9saW5rQnVmZmVyLT5jYW5jZWwoKTsKK30KKwogc2l6ZV90IEpJVEZpbmFsaXplcjo6Y29kZVNp
emUoKQogewogICAgIHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKQEAgLTU1LDEwICs2MCw4
IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6
OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
Y29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcs
ICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
cGxhbi5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklUKSkuZGF0YSgpKTsKLSAgICBtX2ppdENv
ZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpKTsKLQot
ICAgIG1fcGxhbi5jb2RlQmxvY2soKS0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsK
KyAgICAvL01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlUmVmID0gRklO
QUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywgIkRGRyBKSVQgY29k
ZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRhKCkpOworICAgIC8vbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZkZvckRGRyhjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSk7CiAKICAgICBmaW5hbGl6
ZUNvbW1vbigpOwogICAgIApAQCAtNjcsMTEgKzcwLDEwIEBAIGJvb2wgSklURmluYWxpemVyOjpm
aW5hbGl6ZSgpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7Ci0gICAg
bV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZkZvckRGRygKLSAgICAgICAgRklOQUxJWkVfREZH
X0NPREUoKm1fbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMi
LCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQpKS5kYXRhKCkpLAotICAgICAgICBtX3dpdGhBcml0eUNoZWNrKTsKLSAgICBt
X3BsYW4uY29kZUJsb2NrKCktPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CisgICAg
Ly9SRUxFQVNFX0FTU0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7CisgICAg
Ly9tX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKAorICAgIC8vICAgIEZJTkFMSVpF
X0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9y
ICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklUKSkuZGF0YSgpKSwKKyAgICAvLyAgICBtX3dpdGhBcml0eUNoZWNrKTsK
IAogICAgIGZpbmFsaXplQ29tbW9uKCk7CiAgICAgCkBAIC04MCwyMSArODIsMjkgQEAgYm9vbCBK
SVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogCiB2b2lkIEpJVEZpbmFsaXplcjo6Zmlu
YWxpemVDb21tb24oKQogeworICAgIFZNJiB2bSA9ICptX3BsYW4udm0oKTsKKworICAgIFdURjo6
Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKKworICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRo
cmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CisKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
cGxhbi5jb2RlQmxvY2soKTsKIAorICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUu
Y29weVJlZigpKTsKKwogI2lmIEVOQUJMRShGVExfSklUKQogICAgIG1faml0Q29kZS0+b3B0aW1p
emVBZnRlcldhcm1VcChjb2RlQmxvY2spOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiAg
ICAgaWYgKFVOTElLRUxZKG1fcGxhbi5jb21waWxhdGlvbigpKSkKLSAgICAgICAgbV9wbGFuLnZt
KCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24oY29kZUJsb2NrLCAqbV9w
bGFuLmNvbXBpbGF0aW9uKCkpOworICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFk
ZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxhdGlvbigpKTsKIAogICAgIGlm
ICghbV9wbGFuLndpbGxUcnlUb1RpZXJVcCgpKQogICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbiA9IHRydWU7CiAKICAgICAvLyBUaGUg
Y29kZUJsb2NrIGlzIG5vdyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyBtYW55IHRoaW5ncyBhbGl2
ZSAoZS5nLiBmcm96ZW4gdmFsdWVzKQogICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IGtlcHQg
YWxpdmUgYnkgdGhlIHBsYW4uCi0gICAgbV9wbGFuLnZtKCktPmhlYXAud3JpdGVCYXJyaWVyKGNv
ZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5oCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBAIHB1YmxpYzoKICAgICBzaXplX3QgY29kZVNpemUoKSBmaW5hbDsKICAgICBib29sIGZpbmFs
aXplKCkgZmluYWw7CiAgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCkgZmluYWw7CisgICAgdm9p
ZCBjYW5jZWwoKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICB2b2lkIGZpbmFsaXplQ29tbW9uKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAko
cmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIExhenlKU1Zh
bHVlOjplbWl0KENDYWxsSGVscGVycyYgaml0CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGppdC5jb2RlQmxvY2soKTsKICAgICAKLSAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgaml0LmFk
ZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKAogICAgICAgICBbY29kZUJsb2NrLCBsYWJlbCwg
dGhpc1ZhbHVlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgSlNWYWx1
ZSByZWFsVmFsdWUgPSB0aGlzVmFsdWUuZ2V0VmFsdWUoY29kZUJsb2NrLT52bSgpKTsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlYWxWYWx1ZS5pc0NlbGwoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNSw2ICs2
MDUsNyBAQCBDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROCiAKICAgICBD
b21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBbJl0gewogICAgICAgICBpZiAoIWlzU3RpbGxWYWxp
ZE9uTWFpblRocmVhZCgpIHx8ICFpc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgbV9maW5h
bGl6ZXItPmNhbmNlbCgpOwogICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRmZ0ZpbmFsaXplIiwgKCJpbnZhbGlkYXRlZCIpKTsKICAgICAgICAgICAgIHJldHVy
biBDb21waWxhdGlvbkludmFsaWRhdGVkOwogICAgICAgICB9CkBAIC03NTIsNiArNzUzLDggQEAg
dm9pZCBQbGFuOjpjYW5jZWwoKQogICAgIG1fcHJvZmlsZWRERkdDb2RlQmxvY2sgPSBudWxscHRy
OwogICAgIG1fbXVzdEhhbmRsZVZhbHVlcy5jbGVhcigpOwogICAgIG1fY29tcGlsYXRpb24gPSBu
dWxscHRyOworICAgIGlmIChtX2ZpbmFsaXplcikKKyAgICAgICAgbV9maW5hbGl6ZXItPmNhbmNl
bCgpOwogICAgIG1fZmluYWxpemVyID0gbnVsbHB0cjsKICAgICBtX2lubGluZUNhbGxGcmFtZXMg
PSBudWxscHRyOwogICAgIG1fd2F0Y2hwb2ludHMgPSBEZXNpcmVkV2F0Y2hwb2ludHMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE2LDYgKzgxNiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgLy8gVGhpcyBp
cyB0aGUgcGFydCB3aGVyZSB3ZSBtZWFudCB0byBtYWtlIGEgbm9ybWFsIGNhbGwuIE9vcHMuCiAg
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIEpJVENvbXBp
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21w
aWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJl
Z1QwKTsKKwogICAgICAgICBtX2ppdC5lbWl0VmlydHVhbENhbGwodm0oKSwgZ2xvYmFsT2JqZWN0
LCBjYWxsTGlua0luZm8pOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDI3
Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBT
YWZlcG9pbnQ6OlJlCiAgICAgVk0qIHZtUHRyID0gJnZtOwogICAgIGppdC5hZGRMaW5rVGFzaygK
ICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoaGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwodm1QdHItPmdldENUSVN0dWIo
aGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhoYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbCh2bVB0
ci0+Z2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFn
PigpKSk7CiAgICAgICAgIH0pOwogI2Vsc2UKICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyNzc4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
IApAQCAtNjcsMzEgKzY4LDQyIEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9u
KCkKICAgICByZXR1cm4gZmluYWxpemVDb21tb24oKTsKIH0KIAordm9pZCBKSVRGaW5hbGl6ZXI6
OmNhbmNlbCgpCit7CisgICAgaWYgKGIzQ29kZUxpbmtCdWZmZXIpCisgICAgICAgIGIzQ29kZUxp
bmtCdWZmZXItPmNhbmNlbCgpOworfQorCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21t
b24oKQogeworICAgIFZNJiB2bSA9ICptX3BsYW4udm0oKTsKKyAgICBXVEY6OmNyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlKCk7CisKKyAgICBiM0NvZGVMaW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmlu
YWxpemF0aW9uVGFza3MoKTsKKwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9wbGFuLmNv
ZGVCbG9jaygpOwotICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOworICAgIC8vYm9vbCBkdW1wRGlz
YXNzZW1ibHkgPSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fz
c2VtYmx5KCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYjND
b2RlUmVmID0KLSAgICAgICAgRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpiM0Nv
ZGVMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAgICAgIkZUTCBCMyBjb2RlIGZv
ciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJVFR5cGU6
OkZUTEpJVCkpLmRhdGEoKSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0
clRhZz4gYXJpdHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZlcgotICAgICAgICA/
IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIs
IEpTRW50cnlQdHJUYWcsCi0gICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVz
IHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJ
VFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKQotICAg
ICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGIzQ29kZVJlZi5jb2RlKCkpOworICAgIC8vTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9CisgICAgLy8gICAgRklOQUxJWkVfQ09ERV9J
RihkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAorICAg
IC8vICAgICAgICAiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKGNvZGVCbG9jaywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpKTsKKworICAgIC8vTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGFyaXR5Q2hlY2tDb2RlUmVmID0gZW50
cnlwb2ludExpbmtCdWZmZXIKKyAgICAvLyAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fz
c2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCisgICAgLy8gICAg
ICAgICJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBh
dCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJVFR5cGU6
OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rpb24pCisgICAgLy8gICAgOiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYu
Y29kZSgpKTsKIAotICAgIGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKLSAg
ICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVS
ZWYpOworICAgIC8vaml0Q29kZS0+aW5pdGlhbGl6ZUIzQ29kZShiM0NvZGVSZWYpOworICAgIC8v
aml0Q29kZS0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KGFyaXR5Q2hlY2tDb2RlUmVm
KTsKIAogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgqaml0Q29kZSk7CiAKICAgICBpZiAoVU5M
SUtFTFkobV9wbGFuLmNvbXBpbGF0aW9uKCkpKQotICAgICAgICBtX3BsYW4udm0oKS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihjb2RlQmxvY2ssICptX3BsYW4uY29tcGls
YXRpb24oKSk7CisgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRp
b24oY29kZUJsb2NrLCAqbV9wbGFuLmNvbXBpbGF0aW9uKCkpOwogCiAgICAgLy8gVGhlIGNvZGVC
bG9jayBpcyBub3cgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgbWFueSB0aGluZ3MgYWxpdmUgKGUu
Zy4gZnJvemVuIHZhbHVlcykKICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBrZXB0IGFsaXZl
IGJ5IHRoZSBwbGFuLgotICAgIG1fcGxhbi52bSgpLT5oZWFwLndyaXRlQmFycmllcihjb2RlQmxv
Y2spOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuaAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgSklURmluYWxpemVyKERGRzo6UGxhbiYpOwogICAgIH5KSVRGaW5hbGl6ZXIoKSBmaW5hbDsK
IAorICAgIHZvaWQgY2FuY2VsKCkgZmluYWw7CiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7
CiAgICAgYm9vbCBmaW5hbGl6ZSgpIGZpbmFsOwogICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigp
IGZpbmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lv
biAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzksMTEgKzE3OSwxMSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVj
aywgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aykpOwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICAgICAgbGlua0J1ZmZl
ci0+bGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRD
VElTdHViKGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoaGFu
ZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0
clRhZz4oKSkpOwogI2Vsc2UKICAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwog
I2VuZGlmCi0gICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5j
dGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAs
IEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpKSk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIHN0
YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKTsKICAgICAgICAgfQogCkBAIC0yMTYsNiArMjE2LDIzIEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHsKKyAgICAgICAgYm9vbCBkdW1w
RGlzYXNzZW1ibHkgPSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rp
c2Fzc2VtYmx5KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IGIzQ29kZVJlZiA9CisgICAgICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNhc3Nl
bWJseSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywK
KyAgICAgICAgICAgICAgICAiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVS
ZWYgPSBsaW5rQnVmZmVyCisgICAgICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fz
c2VtYmx5LCAqbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKKyAgICAgICAgICAgICAgICAiRlRM
IGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0
b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQp
KS5kYXRhKCksIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKQorICAgICAgICAgICAgOiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihi
M0NvZGVSZWYuY29kZSgpKTsKKworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQjND
b2RlKGIzQ29kZVJlZik7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBcml0eUNo
ZWNrRW50cnlwb2ludChhcml0eUNoZWNrQ29kZVJlZik7CisgICAgfQorCiAgICAgCiAgICAgc3Rh
dGUuZmluYWxpemVyLT5lbnRyeXBvaW50TGlua0J1ZmZlciA9IFdURk1vdmUobGlua0J1ZmZlcik7
CiAgICAgc3RhdGUuZmluYWxpemVyLT5mdW5jdGlvbiA9IHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzI4Myw3ICsxNzI4Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhnZW5lcmF0b3JKdW1wLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KHZtLT5nZXRDVElTdHViKGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0tPmdldENUSVN0dWIobGF6eVNsb3dQ
YXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PExhenlTbG93UGF0aD4gbGF6eVNsb3dQYXRoID0gbWFrZVVuaXF1ZTxMYXp5U2xvd1BhdGg+KCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxl
LmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0SGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIE9T
UkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAKICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluaygKICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcCwKLSAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKSkpOwogICAgICAgICAgICAgaWYgKGNvbXBpbGF0aW9uKQogICAgICAg
ICAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0U2l0ZSh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihteUxhYmVsKSB9KTsKICAgICAgICAgfSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MywxNyArNjQzLDEyIEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKICNlbmRpZgogfQogCi1Bc3NlbWJseUhlbHBlcnM6OkNh
bGwgQXNzZW1ibHlIZWxwZXJzOjplbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJ
bmZvOjpyZWdUMyk7Ci0gICAgcmV0dXJuIG5lYXJDYWxsKCk7Ci19Ci0KLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCi17Ci0gICAgQ2FsbCBjYWxsID0gZW1pdFVubGlua2Vk
VmlydHVhbENhbGwoZ2xvYmFsT2JqZWN0LCBpbmZvKTsKLSAgICBhZGRMaW5rVGFzaygKKyAgICBD
YWxsIGNhbGwgPSBuZWFyQ2FsbCgpOworICAgIGFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNr
KAogICAgICAgICBbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1
bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKICAgICAgICAgICAgIGluZm8tPnNldFNs
b3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZpcnR1YWxUaHVuaywgdm0pKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2
aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyOCw3ICsxODI4LDYgQEAgcHVibGljOgogICAgICAg
ICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCwgdHJ1ZSk7CiAgICAgfQogICAgIAotICAg
IENhbGwgZW1pdFVubGlua2VkVmlydHVhbENhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0lu
Zm8qKTsKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAwLDcg
KzgwMCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIo
YXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOyAvLyBS
ZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KQEAgLTg4
MSw5ICs4ODEsOSBAQCB2b2lkIEpJVDo6bGluaygpCiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCi0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0
Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBDb2RlTG9j
YXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZDxOb1B0clRhZz4oKSkpOwogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZy
YW1lUm9sbGJhY2suZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjaywgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRD
VElTdHViKGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNl
cHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtKCku
Z2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3Ip
LnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAjZW5kaWYKIAogICAgIGZvciAoYXV0byYgcmVjb3Jk
IDogbV9uZWFySnVtcHMpIHsKQEAgLTkxMSw3ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAK
ICAgICBpZiAobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpIHsKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxl
cih2bSgpLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKSk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4
Y2VwdGlvbkhhbmRsZXIodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKSk7CiAjZWxzZQogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBleGNlcHRpb25IYW5kbGVyID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihtX2V4Y2VwdGlv
bkhhbmRsZXIpOwogI2VuZGlmCkBAIC05OTEsMTQgKzk5MSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKICAgICBpZiAoIW1faml0Q29kZSkKICAgICAgICAgcmV0
dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogCi0gICAgZm9yIChhdXRvIHBhaXIgOiBtX3ZpcnR1YWxD
YWxscykgewotICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IG1fbGlua0J1ZmZlci0+bG9jYXRp
b25PZk5lYXJDYWxsPEpJVFRodW5rUHRyVGFnPihwYWlyLmZpcnN0KTsKLQotICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSBwYWlyLnNlY29uZDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Io
Km1fdm0sIGluZm8pOwotICAgICAgICBpbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91
dGluZTo6Y3JlYXRlKHZpcnR1YWxUaHVuaywgKm1fdm0pKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1bmsuY29kZSgpKSk7Ci0gICAgfQorICAgIG1fbGlu
a0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKICAgICB7CiAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTYsOCArMTA1Niw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleDsKIAogICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOwot
Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgQ2FsbExpbmtJbmZvJj4+IG1fdmlydHVh
bENhbGxzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTgsNyArMjU4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBtX3ZpcnR1YWxDYWxscy5hcHBlbmQoc3RkOjpwYWlyPENhbGwsIENhbGxMaW5rSW5mbyY+
IHsgZW1pdFVubGlua2VkVmlydHVhbENhbGwobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBp
bmZvKSwgKmluZm8gfSk7CisgICAgZW1pdFZpcnR1YWxDYWxsKG1fdm0sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgaW5mbyk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZp
c2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIG1fdmlydHVhbENh
bGxzLmFwcGVuZChzdGQ6OnBhaXI8Q2FsbCwgQ2FsbExpbmtJbmZvJj4geyBlbWl0VW5saW5rZWRW
aXJ0dWFsQ2FsbChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pLCAqaW5mbyB9KTsK
KyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzc4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IElu
c3RydWN0aW9uKgogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxz
ZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdl
bmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIo
b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpKTsKICNlbmRpZgogfQogCkBAIC02MTMsNyArNjEzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdGhyb3duVmFsdWVHUFIpOwotICAg
IGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihvcF90aHJvd19oYW5kbGVyR2VuZXJh
dG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihvcF90
aHJvd19oYW5kbGVyR2VuZXJhdG9yKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiB9CiAKQEAgLTExMTQsNyArMTExNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNv
bnN0IEluc3RydWN0aW8KICAgICBSRUxFQVNFX0FTU0VSVChsb2NhbHNUb0luaXQgPCBjb3VudCk7
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIobG9jYWxzVG9Jbml0ICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGxvY2Fsc1RvSW5pdEdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoY2FuQmVPcHRpbWl6ZWQo
KSksIGNhbkJlT3B0aW1pemVkR1BSKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIob3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIob3BfZW50ZXJfaGFuZGxl
ckdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogfQogCkBAIC0xNDIxLDcgKzE0MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgp
LmdldENUSVN0dWIob3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIob3Bf
Y2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmCiB9CiAKQEAgLTE0NjAsNyArMTQ2MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFuZGxl
VHJhcHMpKTsKICAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9j
a2luZ05lY2Vzc2FyeSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29k
ZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVy
LnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXIi
KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjc3ODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMyMyw3ICsxMzIzLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbAogICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRy
eVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICB2bS5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdn
ZWQ8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAg
IH0KIApAQCAtMTMzNSw3ICsxMzM1LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbAogICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlw
ZTo6Tm9uZSk7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFn
PigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAKQEAgLTEzNTEsNyArMTM1MSw3IEBAIHN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAg
IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5y
ZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0K
IApAQCAtMTM2MSw3ICsxMzYxLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVI
b3N0Q2FsbAogICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6
Ok5vbmUpOwogICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5v
dEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCgKLSAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwogfQogCkBAIC0xNDA4LDcgKzE0MDgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uTGlua0NhCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRh
YmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKICAg
ICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2
b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWQ8SlNFbnRy
eVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1l
KSk7CiAgICAgICAgIH07CiAKQEAgLTE0NjgsNyArMTQ2OCw3IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVu
Y3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwg
ZnVuY3Rpb24pKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAg
ICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisg
ICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKICAgICAgICAgfQogCkBAIC0xNDc3LDcgKzE0NzcsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQodGhyb3dTY29w
ZS5leGNlcHRpb24oKSA9PSBlcnJvcik7CiAgICAgICAgIGlmIChVTkxJS0VMWShlcnJvcikpIHsK
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTE5ODIsNyArMTk4Miw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25PcHRpbWkKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAg
ICAgICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPnNldERpZE9wdGltaXplKFRyaVN0
YXRlOjpUcnVlKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB1bnRhZ0NvZGVQdHI8SklUVGh1
bmtQdHJUYWc+KHZtLmdldENUSVN0dWIoREZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHZvaWQqIHRhcmdldFBDID0gdW50YWdD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKERGRzo6b3NyRW50cnlUaHVua0dl
bmVyYXRvcikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIHRhcmdldFBDID0gdGFnQ29k
ZVB0cldpdGhTdGFja1BvaW50ZXJGb3JKSVRDYWxsKHRhcmdldFBDLCBjYWxsRnJhbWUpOwogICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRhcmdldFBDLCBkYXRhQnVmZmVyKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiwxMCArMTE2LDEwIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKIAogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0yMjQsMTAgKzIyNCwxMCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCiAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwotICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKICNl
bmRpZgogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CkBAIC0zODEsMTAgKzM4MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVj
bHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVz
LCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwpAQCAtNjM2LDExICs2MzYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7Ci0gICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIGF1dG8qIG9wZXJhdGlvbiA9IGlzRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
T3B0aW1pemU7CiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwotICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsK
QEAgLTc0MSwxMCArNzQxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVl
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwotICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpOwotICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsK
QEAgLTg5NiwxMCArODk2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSksIGVjbWFNb2RlR1BSKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAg
IENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKLSAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMTAwNiwxMCArMTAwNiwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4o
KSk7CiAKICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9Q
dHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xMTA4LDEwICsxMTA4LDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVl
KTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKLSAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTE3NCwxMCArMTE3NCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7Ci0gICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjczLDEwICsxMjczLDEwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAogICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
LSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzNTIsMTAgKzEzNTIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogCiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwogICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAK
ICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRy
VGFnPigpKTsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZh
bHVlR1BSKTsKQEAgLTE0NjMsMTAgKzE0NjMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJU
YWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlv
bigpKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC0xNTYyLDEwICsxNTYy
LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICAvLyBz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hh
dCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVw
bGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKLSAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xODU2LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTkwNiw3ICsxOTA2LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25HZXRGcm9tU2NvcGUpKTsKICAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVi
cy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhl
eGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9j
YXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTIwODAsNyArMjA4MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1
dF90b19zY29wZUdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAgICAg
fQogfQpAQCAtMjEyNyw3ICsyMTI3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKG9w
ZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25QdXRUb1Njb3Bl
KSk7CiAgICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BU
aHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdO
ZWNlc3NhcnkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRh
Z2dlZDxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF90b19zY29wZSIpOwogfQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCShyZXZp
c2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDc4ICs5NiwxMDEgQEAgaW5saW5lIGJvb2wgSklUVGh1bmtz
OjpXZWFrTmF0aXZlRXhlY3V0YQogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25z
Ojp1c2VKSVQoKSk7Ci0gICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNhbGxHZW5lcmF0b3Ip
LmNvZGUoKTsKKyAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdlbmVyYXRvcik7CiB9
CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlO
YXRpdmVDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7
Ci0gICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgp
OworICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpOwogfQog
CiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0
aXZlVGFpbENhbGwoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7Ci0g
ICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKS5jb2RlKCk7Cisg
ICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKTsKIH0KIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRh
aWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVz
ZUpJVCgpKTsKLSAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2
ZWRUYWdzR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRh
aWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChW
TSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKLSAgICByZXR1cm4gY3Rp
U3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICByZXR1
cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOwogfQogCiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxG
dW5jdGlvbkNvbnN0cnVjdChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgp
KTsKLSAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVy
YXRvcikuY29kZSgpOworICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ29u
c3RydWN0R2VuZXJhdG9yKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0mIHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Ip
CitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpU3R1
YihWTSYgdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKLSAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2xvY2spOwotICAgIENUSVN0dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1
Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
KCkpOwotICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KSB7Ci0gICAgICAgIC8vIENvbXBpbGF0aW9u
IHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlzdGluZyBlbnRyaWVzLgotICAgICAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1
ZSA9IGdlbmVyYXRvcih2bSk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgRW50cnko
KSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGF1dG8gY29kZVJl
ZiA9IGdlbmVyYXRvcih2bSk7CisgICAgICAgIGJvb2wgbmVlZHNDcm9zc01vZGlmeWluZ0NvZGVG
ZW5jZSA9IGlzQ29tcGlsYXRpb25UaHJlYWQoKTsKKyAgICAgICAgRW50cnkgZW50cnkgeyBQYWNr
ZWRSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4oY29kZVJlZi5leGVjdXRhYmxlTWVtb3J5
KCkpLCBuZWVkc0Nyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlIH07CisgICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBlbnRyeTsKKyAgICB9CisKKyAgICBFbnRyeSYgZW50cnkgPSBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChlbnRyeS5uZWVkc0Nyb3NzTW9kaWZ5aW5n
Q29kZUZlbmNlICYmICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpIHsKKyAgICAgICAgV1RGOjpjcm9z
c01vZGlmeWluZ0NvZGVGZW5jZSgpOworICAgICAgICBlbnRyeS5uZWVkc0Nyb3NzTW9kaWZ5aW5n
Q29kZUZlbmNlID0gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFs
dWU7CisKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPihl
bnRyeS5oYW5kbGUtPnN0YXJ0KCkucmV0YWdnZWRQdHI8SklUVGh1bmtQdHJUYWc+KCkpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhpc3Rp
bmdDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIHJldHVybiBleGlzdGluZ0NUSVN0dWIo
Z2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKIHsKLSAgICBDVElTdHViTWFw
OjppdGVyYXRvciBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5maW5kKGdlbmVyYXRvcik7Ci0gICAgaWYg
KGVudHJ5ID09IG1fY3RpU3R1Yk1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4oKTsKLSAgICByZXR1cm4gZW50cnktPnZhbHVlOwor
ICAgIGF1dG8gaXRlciA9IG1fY3RpU3R1Yk1hcC5maW5kKGdlbmVyYXRvcik7CisgICAgaWYgKGl0
ZXIgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IEVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOworICAgIGlmIChlbnRyeS5uZWVkc0Nyb3NzTW9k
aWZ5aW5nQ29kZUZlbmNlICYmICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpIHsKKyAgICAgICAgV1RG
Ojpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOworICAgICAgICBlbnRyeS5uZWVkc0Nyb3NzTW9k
aWZ5aW5nQ29kZUZlbmNlID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+KGVudHJ5LmhhbmRsZS0+c3RhcnQoKS5yZXRhZ2dlZFB0
cjxKSVRUaHVua1B0clRhZz4oKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVNs
b3dQYXRoRnVuY3Rpb25TdHViKFZNJiB2bSwgU2xvd1BhdGhGdW5jdGlvbiBzbG93UGF0aEZ1bmN0
aW9uKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0
aVNsb3dQYXRoRnVuY3Rpb25TdHViKFZNJiB2bSwgU2xvd1BhdGhGdW5jdGlvbiBzbG93UGF0aEZ1
bmN0aW9uKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGF1dG8ga2V5ID0gYml0d2lzZV9jYXN0PFRodW5r
R2VuZXJhdG9yPihzbG93UGF0aEZ1bmN0aW9uKTsKLSAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQg
ZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGtleSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPigpKTsKLSAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAvLyBD
b21waWxhdGlvbiB0aHJlYWQgY2FuIG9ubHkgcmV0cmlldmUgZXhpc3RpbmcgZW50cmllcy4KLSAg
ICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBlbnRyeS5pdGVy
YXRvci0+dmFsdWUgPSBKSVRTbG93UGF0aENhbGw6OmdlbmVyYXRlVGh1bmsodm0sIHNsb3dQYXRo
RnVuY3Rpb24pOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jdGlTdHViTWFwLmFkZChrZXksIEVu
dHJ5KCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBhdXRvIGNv
ZGVSZWYgPSBKSVRTbG93UGF0aENhbGw6OmdlbmVyYXRlVGh1bmsodm0sIHNsb3dQYXRoRnVuY3Rp
b24pOworICAgICAgICBib29sIG5lZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UgPSBpc0NvbXBp
bGF0aW9uVGhyZWFkKCk7CisgICAgICAgIEVudHJ5IGVudHJ5IHsgUGFja2VkUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+KGNvZGVSZWYuZXhlY3V0YWJsZU1lbW9yeSgpKSwgbmVlZHNDcm9z
c01vZGlmeWluZ0NvZGVGZW5jZSB9OworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gZW50cnk7CisgICAgfQorCisgICAgRW50cnkmIGVudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoZW50cnkubmVlZHNDcm9zc01vZGlmeWluZ0NvZGVGZW5jZSAmJiAh
aXNDb21waWxhdGlvblRocmVhZCgpKSB7CisgICAgICAgIFdURjo6Y3Jvc3NNb2RpZnlpbmdDb2Rl
RmVuY2UoKTsKKyAgICAgICAgZW50cnkubmVlZHNDcm9zc01vZGlmeWluZ0NvZGVGZW5jZSA9IGZh
bHNlOwogICAgIH0KLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOworCisgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4oZW50cnkuaGFuZGxlLT5z
dGFydCgpLnJldGFnZ2VkUHRyPEpJVFRodW5rUHRyVGFnPigpKTsKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5oCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8dHVw
bGU+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTY0LDExICs2NiwxMSBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSYpOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChW
TSYpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTdHVi
KFZNJiwgVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRv
ciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0
b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdD
VElTdHViKFRodW5rR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnlUYWcpOwogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gY3RpU2xvd1BhdGhGdW5jdGlvblN0dWIoVk0mLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aVNsb3dQYXRoRnVuY3Rp
b25TdHViKFZNJiwgU2xvd1BhdGhGdW5jdGlvbik7CiAjZW5kaWYKIAogICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2Vk
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC03OCw3
ICs4MCwxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVu
a25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5hbDsKICAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8
VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IENU
SVN0dWJNYXA7CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgUGFja2VkUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGhhbmRsZTsKKyAgICAgICAgYm9vbCBuZWVkc0Nyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlOworICAgIH07CisgICAgdXNpbmcgQ1RJU3R1Yk1hcCA9IEhhc2hNYXA8VGh1
bmtHZW5lcmF0b3IsIEVudHJ5PjsKICAgICBDVElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKIAogICAg
IHVzaW5nIEhvc3RGdW5jdGlvbktleSA9IHN0ZDo6dHVwbGU8VGFnZ2VkTmF0aXZlRnVuY3Rpb24s
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+OwpAQCAtMTE4LDcgKzEyNCwzNyBAQCBwcml2
YXRlOgogCiAgICAgdXNpbmcgV2Vha05hdGl2ZUV4ZWN1dGFibGVTZXQgPSBIYXNoU2V0PFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4sIFdlYWtOYXRpdmVFeGVjdXRhYmxlSGFzaD47CiAgICAgV2Vha05h
dGl2ZUV4ZWN1dGFibGVTZXQgbV9uYXRpdmVFeGVjdXRhYmxlU2V0OwotICAgIExvY2sgbV9sb2Nr
OworCisgICAgc3RydWN0IFJlY3Vyc2l2ZUxvY2sgeworICAgICAgICB2b2lkIGxvY2soKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAob3duZXJUaHJlYWQgJiYgb3duZXJUaHJlYWQgPT0gJldU
Rjo6VGhyZWFkOjpjdXJyZW50KCkpIHsKKyAgICAgICAgICAgICAgICArK2xvY2tDb3VudDsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbG9j
ay5sb2NrKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NrQ291bnQgPT0gMCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghb3duZXJUaHJlYWQpOworICAgICAgICAgICAgKyts
b2NrQ291bnQ7CisgICAgICAgICAgICBvd25lclRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3VycmVu
dCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB1bmxvY2soKQorICAgICAgICB7CisgICAg
ICAgICAgICAtLWxvY2tDb3VudDsKKyAgICAgICAgICAgIGlmICghbG9ja0NvdW50KSB7CisgICAg
ICAgICAgICAgICAgb3duZXJUaHJlYWQgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fbG9j
ay51bmxvY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFdURjo6VGhy
ZWFkKiBvd25lclRocmVhZCB7IG51bGxwdHIgfTsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAg
ICAgIHVuc2lnbmVkIGxvY2tDb3VudDsKKyAgICB9OworCisgICAgUmVjdXJzaXZlTG9jayBtX2xv
Y2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4OCw5ICsxMTg4LDkgQEAgdm9p
ZCByZXBhdGNoSW5zdGFuY2VPZigKICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24sIG9wZXJhdGlvbkluc3RhbmNl
T2ZHZW5lcmljKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBjb2RlUmVmKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBjb2RlUmVmKQogewotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxEZXN0
aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigp
KTsKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi50
ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlu
a1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQpAQCAtMTIwMSw3ICsxMjAxLDcgQEAgc3RhdGljIHZvaWQgbGlua1Ns
b3dQYXRoVG8oVk0mIHZtLCBDYWxsTAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwg
Y2FsbExpbmtJbmZvKTsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0
dWFsVGh1bmspOworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxU
aHVuay5jb2RlKCkpOwogICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1bmssIHZtKSk7CiB9CiAKQEAgLTEyODEsNyArMTI4
MSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEMKICAgICBsaW5r
U2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChW
TSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCitzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZN
JiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRTdHViUm91dGluZVB0clRhZz4gY29kZVB0cikKIHsKICAgICBpZiAoY2FsbExpbmtJbmZvLmlz
RGlyZWN0KCkpIHsKICAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7CkBAIC0x
Mjg5LDcgKzEyODksNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
CiAgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7
Ci0gICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsK
KyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVQdHIpOwog
CiAgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgc3Rh
dGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRgogICAgICAgICAiTGlua2luZyB2
aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJG
cmFtZS0+Y29kZU9yaWdpbigpKSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExp
bmtJbmZvKTsKLSAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7
CisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmsuY29kZSgpKTsK
ICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVh
dGUodmlydHVhbFRodW5rLCB2bSkpOwogICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlWaXJ0
dWFsKCk7CiB9CkBAIC0xNjEzLDcgKzE2MTMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwo
SlNHbG9iYWxPYmplY3QqCiAKICAgICBpZiAoIWRvbmUuZW1wdHkoKSkKICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdl
dENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFn
Pih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikpKTsKICAg
ICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBKSVRTbG93UGF0aENhbGw6OmNhbGwoKQogICAgIFVOVVNF
RF9WQVJJQUJMRShtX3BjKTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVn
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwogICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRSZWcpOwotICAgIG1faml0LT5lbWl0
TmFrZWROZWFyQ2FsbCh2bS5qaXRTdHVicy0+Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIG1f
c2xvd1BhdGhGdW5jdGlvbikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBtX2ppdC0+
ZW1pdE5ha2VkTmVhckNhbGwodm0uaml0U3R1YnMtPmN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKHZt
LCBtX3Nsb3dQYXRoRnVuY3Rpb24pLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIH0KIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRTbG93UGF0aENhbGw6OmdlbmVyYXRl
VGh1bmsoVk0mIHZtLCBTbG93UGF0aEZ1bmN0aW9uIHNsb3dQYXRoRnVuY3Rpb24pCkBAIC04OCw3
ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4oc2xvd1BhdGhGdW5jdGlvbikpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29k
ZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZDxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNsb3dQYXRoQ2Fs
bCIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwbwogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKICAgICBSRUxFQVNFX0FT
U0VSVChoYW5kbGVyKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRh
Z2dlZDxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b24iKTsKIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY2gKICNlbmRpZgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5qaXRTdHVi
cy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZXJHZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVF
eGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIo
aGFuZGxlckdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5yZXRhZ2dlZDxOb1B0clRhZz4o
KSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkNoZWNrRXhjZXB0aW9uIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4LDcgKzgxOCw3IEBAIHN0YXRpYyBUaHVu
a0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckkKICAgICB9CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gVk06OmdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBWTTo6Z2V0Q1RJ
U3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgcmV0dXJuIGppdFN0dWJzLT5j
dGlTdHViKCp0aGlzLCBnZW5lcmF0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDcgQEAgcHVibGljOgogICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxKSVRUaHVua3M+IGppdFN0dWJzOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yKTsKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAjaWYgRU5BQkxFKEZUTF9KSVQpCg==
</data>
<flag name="commit-queue"
          id="450541"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429376</attachid>
            <date>2021-05-21 17:38:11 -0700</date>
            <delta_ts>2021-05-21 18:03:18 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>67504</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHNpemVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNp
emVzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwogCitMaW5rQnVmZmVyOjp+TGlua0J1
ZmZlcigpCit7CisgICAgaWYgKCFkaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcy5pc0VtcHR5KCkpOworfQorCiBi
b29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmpp
dFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCkBAIC00ODUsNiArNDkx
LDEzIEBAIHZvaWQgTGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiAgICAgTWFjcm9B
c3NlbWJsZXI6OmNhY2hlRmx1c2goY29kZSgpLCBtX3NpemUpOwogfQogCit2b2lkIExpbmtCdWZm
ZXI6OnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpCit7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV9tYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MpCisgICAgICAgIHRhc2stPnJ1bigp
OworICAgIG1fbWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzLmNsZWFyKCk7Cit9CisKICNpZiBE
VU1QX0xJTktfU1RBVElTVElDUwogdm9pZCBMaW5rQnVmZmVyOjpkdW1wTGlua1N0YXRpc3RpY3Mo
dm9pZCogY29kZSwgc2l6ZV90IGluaXRpYWxpemVTaXplLCBzaXplX3QgZmluYWxTaXplKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJl
dmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOSArMTM2LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAgICAgfQogCi0gICAgfkxpbmtC
dWZmZXIoKQotICAgIHsKLSAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkxpbmtCdWZmZXIo
KTsKKworICAgIHZvaWQgY2FuY2VsKCkgeyBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcy5j
bGVhcigpOyB9CisKKyAgICB2b2lkIHJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwog
ICAgIAogICAgIGJvb2wgZGlkRmFpbFRvQWxsb2NhdGUoKSBjb25zdAogICAgIHsKQEAgLTMyNSw2
ICszMjcsMTIgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
ZHVtcFByb2ZpbGVTdGF0aXN0aWNzKE9wdGlvbmFsPFByaW50U3RyZWFtKj4gPSBXVEY6Om51bGxv
cHQpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZE1haW5U
aHJlYWRGaW5hbGl6YXRpb25UYXNrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFz
azx2b2lkKCk+KGZ1bmN0b3IpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNz
ZW1ibHlJbXBsKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRy
VGFnPiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGJvb2wgZHVtcERpc2Fzc2VtYmx5
LCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMywgNCk7CkBA
IC00MDQsNiArNDEyLDcgQEAgcHJpdmF0ZToKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlu
a0J1ZmZlclB0clRhZz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KExpbmtCdWZmZXImKT4+PiBtX2xpbmtUYXNrczsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9sYXRlTGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gbV9tYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3M7CiAK
ICAgICBzdGF0aWMgc2l6ZV90IHNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbbnVtYmVy
T2ZQcm9maWxlc107CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQs
NyArMzY0LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogCiB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQp
CiB7Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7
CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9m
ZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMy
LDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdAogICAgICAgICBW
TSogdm0gPSAmbV92bTsKICAgICAgICAgaml0LT5hZGRMaW5rVGFzaygKICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJ
U3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVy
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgICAgICAgICB9KTsKICNlbHNlCiAgICAg
ICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9u
SGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw2ICs3OCw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAg
ICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpKQogICAgICAgICBkYXRhTG9nKCJERkco
RHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIsIG1vZGUsICIsIGluc3Ry
dWN0aW9ucyBzaXplID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCksICJcbiIpOwog
ICAgIAorICAgIC8qIE9PUFMKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0
aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAv
LyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlv
biBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKTsKQEAgLTg1LDYgKzg2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAg
IHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAq
LwogICAgIAogICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgdm0udHlwZVByb2Zp
bGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKHZtLCAiUHJlcGFyaW5nIGZvciBERkcgY29tcGls
YXRpb24uIl9zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIu
aAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5h
bGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBzaXplX3QgY29kZVNpemUoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGZpbmFsaXplKCkg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjYW5jZWwoKSB7IH0KIAogcHJvdGVjdGVkOgogICAgIFBsYW4mIG1fcGxhbjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCIKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJERkdJbmxp
bmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjcz
LDEzICsyNzQsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNr
cy5lbXB0eSgpKQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIENv
ZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9l
eGNlcHRpb25DaGVja3MsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgaWYgKCFtX2V4
Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKQotICAgICAgICBsaW5r
QnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2ssIENvZGVM
b2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgICAgICBs
aW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2ssIENv
ZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRvIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKKyAgICBhdXRvIHRhcmdldCA9
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bSgpLmdldENUSVN0dWIob3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX29zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5m
byYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgaWYgKCFPcHRpb25z
Ojp1c2VQcm9iZU9TUkV4aXQoKSkgewpAQCAtMzk4LDggKzM5OCwxMSBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlKCkKIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsKIAotICAgIG1f
Z3JhcGgubV9wbGFuLnNldEZpbmFsaXplcihtYWtlVW5pcXVlPEpJVEZpbmFsaXplcj4oCi0gICAg
ICAgIG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShs
aW5rQnVmZmVyKSkpOworICAgIGF1dG8gY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCpsaW5r
QnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6REZHSklUKSkuZGF0YSgp
KTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKGNvZGVSZWYsIGNvZGVS
ZWYuY29kZSgpKTsKKworICAgIGF1dG8gZmluYWxpemVyID0gbWFrZVVuaXF1ZTxKSVRGaW5hbGl6
ZXI+KG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShs
aW5rQnVmZmVyKSk7CisgICAgbV9ncmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKFdURk1vdmUoZmlu
YWxpemVyKSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCkBAIC00
OTYsMTQgKzQ5OSwxOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAg
IG1fc3BlY3VsYXRpdmUtPmxpbmtPU1JFbnRyaWVzKCpsaW5rQnVmZmVyKTsKICAgICAKICAgICBp
ZiAocmVxdWlyZXNBcml0eUZpeHVwKQotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0
eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0oKS5nZXRDVElTdHViKGFyaXR5
Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxB
cml0eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0oKS5nZXRDVElTdHViKGFy
aXR5Rml4dXBHZW5lcmF0b3IpKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sg
PSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGFyaXR5Q2hlY2spOwogCi0g
ICAgbV9ncmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8SklURmluYWxpemVyPigK
LSAgICAgICAgbV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZN
b3ZlKGxpbmtCdWZmZXIpLCB3aXRoQXJpdHlDaGVjaykpOworICAgIG1faml0Q29kZS0+aW5pdGlh
bGl6ZUNvZGVSZWZGb3JERkcoCisgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCpsaW5rQnVmZmVy
LCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6REZHSklUKSkuZGF0YSgpKSwKKyAg
ICAgICAgd2l0aEFyaXR5Q2hlY2spOworCisgICAgYXV0byBmaW5hbGl6ZXIgPSBtYWtlVW5pcXVl
PEpJVEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgp
LCBXVEZNb3ZlKGxpbmtCdWZmZXIpLCB3aXRoQXJpdHlDaGVjayk7CisgICAgbV9ncmFwaC5tX3Bs
YW4uc2V0RmluYWxpemVyKFdURk1vdmUoZmluYWxpemVyKSk7CiB9CiAKIHZvaWQgSklUQ29tcGls
ZXI6OmRpc2Fzc2VtYmxlKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyNzc4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDExIEBAIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigp
CiB7CiB9CiAKK3ZvaWQgSklURmluYWxpemVyOjpjYW5jZWwoKQoreworICAgIG1fbGlua0J1ZmZl
ci0+Y2FuY2VsKCk7Cit9CisKIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIHsKICAg
ICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CkBAIC01NSwxMCArNjAsOCBAQCBzaXplX3Qg
SklURmluYWxpemVyOjpjb2RlU2l6ZSgpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgp
CiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBG
SU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrKCksIEpJVFR5cGU6OkRGR0pJVCkpLmRhdGEoKSk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZkZvckRGRyhjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSk7Ci0KLSAgICBtX3BsYW4u
Y29kZUJsb2NrKCktPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CisgICAgLy9NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0RGR19D
T0RFKCptX2xpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklUKSkuZGF0YSgpKTsKKyAgICAvL21faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWZG
b3JERkcoY29kZVJlZiwgY29kZVJlZi5jb2RlKCkpOwogCiAgICAgZmluYWxpemVDb21tb24oKTsK
ICAgICAKQEAgLTY3LDExICs3MCwxMCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQog
CiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIW1fd2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZhbHVlKCkpOwotICAgIG1faml0Q29kZS0+
aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xp
bmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5n
KENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklU
KSkuZGF0YSgpKSwKLSAgICAgICAgbV93aXRoQXJpdHlDaGVjayk7Ci0gICAgbV9wbGFuLmNvZGVC
bG9jaygpLT5zZXRKSVRDb2RlKG1faml0Q29kZS5jb3B5UmVmKCkpOworICAgIC8vUkVMRUFTRV9B
U1NFUlQoIW1fd2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZhbHVlKCkpOworICAgIC8vbV9qaXRDb2Rl
LT5pbml0aWFsaXplQ29kZVJlZkZvckRGRygKKyAgICAvLyAgICBGSU5BTElaRV9ERkdfQ09ERSgq
bV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVFR5cGU6OkRG
R0pJVCkpLmRhdGEoKSksCisgICAgLy8gICAgbV93aXRoQXJpdHlDaGVjayk7CiAKICAgICBmaW5h
bGl6ZUNvbW1vbigpOwogICAgIApAQCAtODAsMjEgKzgyLDI5IEBAIGJvb2wgSklURmluYWxpemVy
OjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIAogdm9pZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9u
KCkKIHsKKyAgICBWTSYgdm0gPSAqbV9wbGFuLnZtKCk7CisKKyAgICBXVEY6OmNyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlKCk7CisKKyAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6
YXRpb25UYXNrcygpOworCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3BsYW4uY29kZUJs
b2NrKCk7CiAKKyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7
CisKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJt
VXAoY29kZUJsb2NrKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGlmIChVTkxJ
S0VMWShtX3BsYW4uY29tcGlsYXRpb24oKSkpCi0gICAgICAgIG1fcGxhbi52bSgpLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxh
dGlvbigpKTsKKyAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlv
bihjb2RlQmxvY2ssICptX3BsYW4uY29tcGlsYXRpb24oKSk7CiAKICAgICBpZiAoIW1fcGxhbi53
aWxsVHJ5VG9UaWVyVXAoKSkKICAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+
bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gPSB0cnVlOwogCiAgICAgLy8gVGhlIGNvZGVCbG9jayBp
cyBub3cgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgbWFueSB0aGluZ3MgYWxpdmUgKGUuZy4gZnJv
emVuIHZhbHVlcykKICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBrZXB0IGFsaXZlIGJ5IHRo
ZSBwbGFuLgotICAgIG1fcGxhbi52bSgpLT5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwor
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxp
emVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5h
bGl6ZXIuaAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6
CiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7CiAgICAgYm9vbCBmaW5hbGl6ZSgpIGZpbmFs
OwogICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIGZpbmFsOworICAgIHZvaWQgY2FuY2VsKCkg
ZmluYWw7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBmaW5hbGl6ZUNvbW1vbigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDI3
Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDksOCArMjQ5LDkgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChD
Q2FsbEhlbHBlcnMmIGppdAogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJs
b2NrKCk7CiAgICAgCi0gICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICBbY29kZUJsb2NrLCBs
YWJlbCwgdGhpc1ZhbHVlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgYXV0byBwYXRj
aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpJVENvbXBpbGF0aW9uUHRyVGFnPihs
YWJlbCk7CisgICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2so
Wz1dIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVlID0gdGhpc1ZhbHVlLmdldFZhbHVl
KGNvZGVCbG9jay0+dm0oKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWFsVmFsdWUu
aXNDZWxsKCkpOwogCkBAIC0yNTksOCArMjYwLDkgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChD
Q2FsbEhlbHBlcnMmIGppdAogICAgICAgICAgICAgaWYgKHRoaXNWYWx1ZS5tX2tpbmQgPT0gTmV3
U3RyaW5nSW1wbCkKICAgICAgICAgICAgICAgICB0aGlzVmFsdWUudS5zdHJpbmdJbXBsLT5kZXJl
ZigpOwogCi0gICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKGxhYmVsLCByZWFsVmFsdWUuYXND
ZWxsKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhdGNo
TG9jYXRpb24sIHJlYWxWYWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIH0pOworICAgIH0pOwogfQog
CiB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBD
b250ZXh0KiBjb250ZXh0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNiArNjA1LDcgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0TgogCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0ID0gWyZdIHsKICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoKSB8fCAh
aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fZmluYWxpemVyLT5jYW5jZWwoKTsKICAg
ICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdGaW5hbGl6ZSIs
ICgiaW52YWxpZGF0ZWQiKSk7CiAgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlk
YXRlZDsKICAgICAgICAgfQpAQCAtNzUyLDYgKzc1Myw4IEBAIHZvaWQgUGxhbjo6Y2FuY2VsKCkK
ICAgICBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBtX211c3RIYW5kbGVW
YWx1ZXMuY2xlYXIoKTsKICAgICBtX2NvbXBpbGF0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAobV9m
aW5hbGl6ZXIpCisgICAgICAgIG1fZmluYWxpemVyLT5jYW5jZWwoKTsKICAgICBtX2ZpbmFsaXpl
ciA9IG51bGxwdHI7CiAgICAgbV9pbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKICAgICBtX3dh
dGNocG9pbnRzID0gRGVzaXJlZFdhdGNocG9pbnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI3Nzg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxNiw2ICs4MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgd2Ug
bWVhbnQgdG8gbWFrZSBhIG5vcm1hbCBjYWxsLiBPb3BzLgogICAgICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xv
dChDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisKICAgICAgICAgbV9q
aXQuZW1pdFZpcnR1YWxDYWxsKHZtKCksIGdsb2JhbE9iamVjdCwgY2FsbExpbmtJbmZvKTsKICAg
ICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyAr
MTMwLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIFZN
KiB2bVB0ciA9ICZ2bTsKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGhhbmRsZXIs
IENvZGVMb2NhdGlvbkxhYmVsKHZtUHRyLT5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoaGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwodm1QdHItPmdldENUSVN0dWIoaGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSkpOwogICAgICAgICB9KTsK
ICNlbHNlCiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAj
aW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTY3LDMxICs2OCw0MiBA
QCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgcmV0dXJuIGZpbmFs
aXplQ29tbW9uKCk7CiB9CiAKK3ZvaWQgSklURmluYWxpemVyOjpjYW5jZWwoKQoreworICAgIGlm
IChiM0NvZGVMaW5rQnVmZmVyKQorICAgICAgICBiM0NvZGVMaW5rQnVmZmVyLT5jYW5jZWwoKTsK
K30KKwogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKIHsKKyAgICBWTSYgdm0g
PSAqbV9wbGFuLnZtKCk7CisgICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOworCisg
ICAgYjNDb2RlTGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CisK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fcGxhbi5jb2RlQmxvY2soKTsKLSAgICBib29s
IGR1bXBEaXNhc3NlbWJseSA9IHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmFz
eW5jRGlzYXNzZW1ibHkoKTsKKyAgICAvL2Jvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9Ci0gICAgICAgIEZJ
TkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwgSlNFbnRy
eVB0clRhZywKLSAgICAgICAgICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCkpOwot
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGFyaXR5Q2hlY2tDb2Rl
UmVmID0gZW50cnlwb2ludExpbmtCdWZmZXIKLSAgICAgICAgPyBGSU5BTElaRV9DT0RFX0lGKGR1
bXBEaXNhc3NlbWJseSwgKmVudHJ5cG9pbnRMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAg
ICAgICAgICAgIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIEIzIGdlbmVyYXRlZCBj
b2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklU
VHlwZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVS
ZWYuY29kZSgpKTsKKyAgICAvL01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBi
M0NvZGVSZWYgPQorICAgIC8vICAgIEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAq
YjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKKyAgICAvLyAgICAgICAgIkZUTCBCMyBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJ
VFR5cGU6OkZUTEpJVCkpLmRhdGEoKSk7CisKKyAgICAvL01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBhcml0eUNoZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyCisg
ICAgLy8gICAgPyBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJseSwgKmVudHJ5cG9pbnRM
aW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAorICAgIC8vICAgICAgICAiRlRMIGVudHJ5cG9pbnQg
dGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCksIGZ1
bmN0aW9uKQorICAgIC8vICAgIDogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoYjNDb2RlUmVmLmNvZGUoKSk7CiAKLSAgICBqaXRD
b2RlLT5pbml0aWFsaXplQjNDb2RlKGIzQ29kZVJlZik7Ci0gICAgaml0Q29kZS0+aW5pdGlhbGl6
ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KGFyaXR5Q2hlY2tDb2RlUmVmKTsKKyAgICAvL2ppdENvZGUt
PmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKKyAgICAvL2ppdENvZGUtPmluaXRpYWxpemVB
cml0eUNoZWNrRW50cnlwb2ludChhcml0eUNoZWNrQ29kZVJlZik7CiAKICAgICBjb2RlQmxvY2st
PnNldEpJVENvZGUoKmppdENvZGUpOwogCiAgICAgaWYgKFVOTElLRUxZKG1fcGxhbi5jb21waWxh
dGlvbigpKSkKLSAgICAgICAgbV9wbGFuLnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRk
Q29tcGlsYXRpb24oY29kZUJsb2NrLCAqbV9wbGFuLmNvbXBpbGF0aW9uKCkpOworICAgICAgICB2
bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxh
bi5jb21waWxhdGlvbigpKTsKIAogICAgIC8vIFRoZSBjb2RlQmxvY2sgaXMgbm93IHJlc3BvbnNp
YmxlIGZvciBrZWVwaW5nIG1hbnkgdGhpbmdzIGFsaXZlIChlLmcuIGZyb3plbiB2YWx1ZXMpCiAg
ICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkga2VwdCBhbGl2ZSBieSB0aGUgcGxhbi4KLSAgICBt
X3BsYW4udm0oKS0+aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2spOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDI3Nzg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIEpJVEZpbmFsaXplcihERkc6
OlBsYW4mKTsKICAgICB+SklURmluYWxpemVyKCkgZmluYWw7CiAKKyAgICB2b2lkIGNhbmNlbCgp
IGZpbmFsOwogICAgIHNpemVfdCBjb2RlU2l6ZSgpIGZpbmFsOwogICAgIGJvb2wgZmluYWxpemUo
KSBmaW5hbDsKICAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oKSBmaW5hbDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDEx
ICsxNzksMTEgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Q2hlY2ssIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4oY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1
Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spKTsKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoanVtcFRvRXhjZXB0
aW9uSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVy
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja0dlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpKTsKICNlbHNlCiAg
ICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJv
bUNhbGxlckZyYW1lLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKICNlbmRpZgotICAgICAgICAgICAg
bGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJU
YWc+KHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVu
a1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKSkpOwogICAgICAgICAg
ICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXBzLCBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlv
bik7CiAgICAgICAgIH0KIApAQCAtMjE2LDYgKzIxNiwyMyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0
YXRlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVh
azsKICAgICB9CisKKyAgICB7CisgICAgICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxk
RHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBiM0NvZGVSZWYgPQorICAg
ICAgICAgICAgRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpzdGF0ZS5maW5hbGl6
ZXItPmIzQ29kZUxpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCisgICAgICAgICAgICAgICAgIkZU
TCBCMyBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShjb2RlQmxv
Y2ssIEpJVFR5cGU6OkZUTEpJVCkpLmRhdGEoKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpTRW50cnlQdHJUYWc+IGFyaXR5Q2hlY2tDb2RlUmVmID0gbGlua0J1ZmZlcgorICAg
ICAgICAgICAgPyBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJseSwgKmxpbmtCdWZmZXIs
IEpTRW50cnlQdHJUYWcsCisgICAgICAgICAgICAgICAgIkZUTCBlbnRyeXBvaW50IHRodW5rIGZv
ciAlcyB3aXRoIEIzIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKGNvZGVCbG9jaywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpLCBzdGF0ZS5nZW5l
cmF0ZWRGdW5jdGlvbikKKyAgICAgICAgICAgIDogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoYjNDb2RlUmVmLmNvZGUoKSk7CisK
KyAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQ29kZShiM0NvZGVSZWYpOworICAg
ICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlD
aGVja0NvZGVSZWYpOworICAgIH0KKwogICAgIAogICAgIHN0YXRlLmZpbmFsaXplci0+ZW50cnlw
b2ludExpbmtCdWZmZXIgPSBXVEZNb3ZlKGxpbmtCdWZmZXIpOwogICAgIHN0YXRlLmZpbmFsaXpl
ci0+ZnVuY3Rpb24gPSBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3Nzg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcyODMsNyArMTcyODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoZ2VuZXJhdG9ySnVtcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS0+Z2V0
Q1RJU3R1YihsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KHZtLT5nZXRDVElTdHViKGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcikpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlT
bG93UGF0aCA9IG1ha2VVbmlxdWU8TGF6eVNsb3dQYXRoPigpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHJldmlzaW9uIDI3Nzg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBPU1JFeGl0SGFuZGxlOjplbWl0RXhp
dFRodW5rKFN0YXRlJgogCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAg
ICAgICAganVtcC5tX2p1bXAsCi0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQ
dHJUYWc+KHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikpKTsK
ICAgICAgICAgICAgIGlmIChjb21waWxhdGlvbikKICAgICAgICAgICAgICAgICBjb21waWxhdGlv
bi0+YWRkT1NSRXhpdFNpdGUoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4obXlMYWJlbCkgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NDMsMjIgKzY0MywxOSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNh
dmVzCiAjZW5kaWYKIH0KIAotQXNzZW1ibHlIZWxwZXJzOjpDYWxsIEFzc2VtYmx5SGVscGVyczo6
ZW1pdFVubGlua2VkVmlydHVhbENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykK
IHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIHJl
dHVybiBuZWFyQ2FsbCgpOwotfQotCi12b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBp
bmZvKQotewotICAgIENhbGwgY2FsbCA9IGVtaXRVbmxpbmtlZFZpcnR1YWxDYWxsKGdsb2JhbE9i
amVjdCwgaW5mbyk7Ci0gICAgYWRkTGlua1Rhc2soCi0gICAgICAgIFs9LCAmdm1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKKyAgICBhZGRM
aW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBhdXRv
IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0
aW9uUHRyVGFnPihjYWxsKTsKKyAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxp
emF0aW9uVGFzayhbPSwgJnZtXSAoKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2
bSwgKmluZm8pOwogICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOjpjcmVhdGUodmlydHVhbFRodW5rLCB2bSkpOwotICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0
dWFsVGh1bmsuY29kZSgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5l
YXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODI4LDcgKzE4MjgsNiBA
QCBwdWJsaWM6CiAgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6VW5kZWZpbmVkLCB0cnVlKTsK
ICAgICB9CiAgICAgCi0gICAgQ2FsbCBlbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChKU0dsb2JhbE9i
amVjdCosIENhbGxMaW5rSW5mbyopOwogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9u
U3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MDAsNyArODAwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
bV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4o
KSk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0
aCBBU1NFUlRzLgpAQCAtODgxLDkgKzg4MSw5IEBAIHZvaWQgSklUOjpsaW5rKCkKIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHko
KSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgQ29kZUxvY2F0
aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRp
b25DaGVja3MsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgaWYgKCFtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLCBDb2RlTG9jYXRp
b25MYWJlbCh2bSgpLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjaywgQ29kZUxv
Y2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja0dlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpKTsKICNlbmRpZgogCiAgICAg
Zm9yIChhdXRvJiByZWNvcmQgOiBtX25lYXJKdW1wcykgewpAQCAtOTExLDcgKzkxMSw3IEBAIHZv
aWQgSklUOjpsaW5rKCkKIAogICAgIGlmIChtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSkg
ewogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBleGNlcHRpb25IYW5kbGVyKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpKTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcih2bSgpLmdldENUSVN0dWIoaGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpKTsKICNl
bHNlCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGV4
Y2VwdGlvbkhhbmRsZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KG1fZXhjZXB0aW9uSGFuZGxlcik7CiAjZW5kaWYKQEAgLTk5MSwxNCArOTkxLDcgQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogICAgIGlmICghbV9qaXRD
b2RlKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAKLSAgICBmb3IgKGF1dG8g
cGFpciA6IG1fdmlydHVhbENhbGxzKSB7Ci0gICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbV9s
aW5rQnVmZmVyLT5sb2NhdGlvbk9mTmVhckNhbGw8SklUVGh1bmtQdHJUYWc+KHBhaXIuZmlyc3Qp
OwotCi0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IHBhaXIuc2Vjb25kOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9
IHZpcnR1YWxUaHVua0ZvcigqbV92bSwgaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0U2xvd1N0dWIo
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodmlydHVhbFRodW5rLCAqbV92bSkpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsK
LSAgICB9CisgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3Mo
KTsKIAogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc3ODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA1Niw4ICsxMDU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCiAgICAgICAgIFJlZlB0cjxEaXJlY3RKSVRD
b2RlPiBtX2ppdENvZGU7Ci0KLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBDYWxsTGlu
a0luZm8mPj4gbV92aXJ0dWFsQ2FsbHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lv
biAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNl
dCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgZW1pdExvYWQoY2FsbGVl
LCByZWdUMSwgcmVnVDApOwotICAgIG1fdmlydHVhbENhbGxzLmFwcGVuZChzdGQ6OnBhaXI8Q2Fs
bCwgQ2FsbExpbmtJbmZvJj4geyBlbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGluZm8pLCAqaW5mbyB9KTsKKyAgICBlbWl0VmlydHVhbENhbGwobV92
bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAg
bG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7
Ci0gICAgbV92aXJ0dWFsQ2FsbHMuYXBwZW5kKHN0ZDo6cGFpcjxDYWxsLCBDYWxsTGlua0luZm8m
PiB7IGVtaXRVbmxpbmtlZFZpcnR1YWxDYWxsKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyksICppbmZvIH0pOworICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
ICAgICByZXQoKTsKICNlbHNlCi0gICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5nZXRDVElTdHVi
KG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZE5lYXJKdW1w
KHZtKCkuZ2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikpOwogI2VuZGlmCiB9CiAK
QEAgLTYxMyw3ICs2MTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVj
dGlvCiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB0aHJv
d25WYWx1ZUdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5nZXRDVElTdHViKG9wX3Ro
cm93X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgZW1pdE5ha2VkTmVhckp1bXAodm0o
KS5nZXRDVElTdHViKG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IpKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KIApAQCAtMTExNCw3ICsxMTE0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIFJFTEVBU0VfQVNTRVJUKGxvY2Fs
c1RvSW5pdCA8IGNvdW50KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihsb2NhbHNUb0luaXQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgbG9jYWxzVG9Jbml0R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihjYW5CZU9wdGltaXplZCgpKSwgY2FuQmVPcHRpbWl6ZWRHUFIpOwotICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1
YihvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB9CiAKQEAgLTE0MjEsNyArMTQyMSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
KCkuZ2V0Q1RJU3R1YihvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZDxO
b1B0clRhZz4oKSk7CiAjZW5kaWYKIH0KIApAQCAtMTQ2MCw3ICsxNDYwLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25IYW5kbGVUcmFwcykpOwogICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJz
LT5leGlzdGluZ0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGV4
Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfY2hl
Y2tfdHJhcHNfaGFuZGxlciIpOwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIzLDcgKzEzMjMsNyBAQCBzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2Fs
bG93R0M7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAg
dm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwogICAgICAgICAgICAgfQogCkBAIC0xMzM1LDcgKzEzMzUsNyBAQCBzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBl
ID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxs
ZWUpKTsKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgIHZtLmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgdm0u
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIApAQCAtMTM1MSw3
ICsxMzUxLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAg
ICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogCkBAIC0xMzYxLDcgKzEzNjEsNyBAQCBzdGF0aWMgU2xvd1BhdGhS
ZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9
PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUp
KTsKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJU
YWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CiB9CiAKQEAgLTE0MDgsNyArMTQwOCw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2EKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKIAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgp
IHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1Rhcmdl
dCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgICAgICBpZiAoIWlz
Q2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBD
b25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJy
b3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTE0NzcsNyArMTQ3Nyw3IEBAIGlu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgRVhDRVBUSU9O
X0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IGVycm9yKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKGVycm9yKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAg
ICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRk
cmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTk4Miw3ICsxOTgyLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0
aW1pemVTb29uKCk7CiAgICAgICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+c2V0
RGlkT3B0aW1pemUoVHJpU3RhdGU6OlRydWUpOwotICAgICAgICB2b2lkKiB0YXJnZXRQQyA9IHVu
dGFnQ29kZVB0cjxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihERkc6Om9zckVudHJ5VGh1
bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgdm9pZCog
dGFyZ2V0UEMgPSB1bnRhZ0NvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIoREZH
Ojpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAg
dGFyZ2V0UEMgPSB0YWdDb2RlUHRyV2l0aFN0YWNrUG9pbnRlckZvckpJVENhbGwodGFyZ2V0UEMs
IGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGFyZ2V0UEMsIGRhdGFC
dWZmZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDEw
ICsxMTYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogCiAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICAgICAgQ2FsbCBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAg
LTIyNCwxMCArMjI0LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGMKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7Ci0gICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTMyNiwxMCAr
MzI2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKIAogICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0
czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXM+Ojp2YWx1ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigp
KTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8
Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTM4MSwxMCArMzgxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja19wcml2YXRlX2JyYW4KIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxG
dW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKLSAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC02MzYsMTEgKzYzNiwxMSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFs
SW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFN
b2RlR1BSKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgYXV0byog
b3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDog
b3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxO
b1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRh
cmdldCA9IHNsb3dQYXRoOwpAQCAtNzQxLDEwICs3NDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgdmFsdWVQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyks
IGJ5VmFsSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgpKSwg
cHV0S2luZEdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigp
KTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxO
b1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRh
cmdldCA9IHNsb3dQYXRoOwpAQCAtODk2LDEwICs4OTYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9Q
dHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWQ8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVn
VDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xMDA2LDEwICsx
MDA2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7Ci0gICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1
ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAg
LTExMDgsMTAgKzExMDgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29ucwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPjo6dmFsdWUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAg
ICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwot
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkp
OwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMTc0LDEwICsxMTc0
LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46
OnZhbHVlKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKLSAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEy
NzMsMTAgKzEyNzMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJ
bgogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAg
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwotICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwpAQCAt
MTM1MiwxMCArMTM1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
PE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTQ2MywxMCArMTQ2MywxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCkpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
QEAgLTE1NjIsMTAgKzE1NjIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IElucwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdp
bGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQg
aW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50
IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFs
dWUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE4NTYsNyArMTg1Niw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xOTA2LDcgKzE5
MDYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEZyb21TY29wZSkpOwogICAgIGF1dG8gaGFu
ZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZl
c0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVy
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0
aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWQ8Tm9QdHJUYWc+KCkp
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4o
KSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0yMTI3LDcgKzIxMjcsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvblB1dFRvU2NvcGUpKTsKICAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhp
c3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5l
cmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRp
b25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25M
YWJlbChoYW5kbGVyLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0
X3RvX3Njb3BlIik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNzggKzk2LDEwMSBAQCBpbmxp
bmUgYm9vbCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVjdXRhCiBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSYgdm0pCiB7CiAg
ICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKLSAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0
aXZlQ2FsbEdlbmVyYXRvcikuY29kZSgpOworICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVD
YWxsR2VuZXJhdG9yKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9w
dGlvbnM6OnVzZUpJVCgpKTsKLSAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ29uc3RydWN0
R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0cnVj
dEdlbmVyYXRvcik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4g
SklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlv
bnM6OnVzZUpJVCgpKTsKLSAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5l
cmF0b3IpLmNvZGUoKTsKKyAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5l
cmF0b3IpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRo
dW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJiB2bSkKIHsKICAgICBB
U1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwotICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVU
YWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICByZXR1cm4gY3Rp
U3R1Yih2bSwgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKTsKIH0KIAog
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVy
bmFsRnVuY3Rpb25DYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkp
OwotICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvciku
Y29kZSgpOworICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1
bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJiB2bSkKIHsKICAgICBBU1NFUlQo
T3B0aW9uczo6dXNlSklUKCkpOwotICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0
aW9uQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIGlu
dGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpU3R1YihWTSYgdm0sIFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4g
SklUVGh1bmtzOjpjdGlTdHViKFZNJiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewot
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0
IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4oKSk7Ci0gICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgLy8gQ29tcGlsYXRpb24gdGhyZWFkIGNhbiBvbmx5IHJldHJpZXZlIGV4aXN0aW5nIGVudHJp
ZXMuCi0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgZW50
cnkuaXRlcmF0b3ItPnZhbHVlID0gZ2VuZXJhdG9yKHZtKTsKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY3RpU3R1Yk1hcC5hZGQo
Z2VuZXJhdG9yLCBFbnRyeSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAg
ICAgICAgYXV0byBjb2RlUmVmID0gZ2VuZXJhdG9yKHZtKTsKKyAgICAgICAgYm9vbCBuZWVkc0Ny
b3NzTW9kaWZ5aW5nQ29kZUZlbmNlID0gaXNDb21waWxhdGlvblRocmVhZCgpOworICAgICAgICBF
bnRyeSBlbnRyeSB7IFBhY2tlZFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPihjb2RlUmVm
LmV4ZWN1dGFibGVNZW1vcnkoKSksIG5lZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UgfTsKKyAg
ICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGVudHJ5OworICAgIH0KKworICAgIEVu
dHJ5JiBlbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKGVudHJ5Lm5l
ZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UgJiYgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSkgewor
ICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CisgICAgICAgIGVudHJ5Lm5l
ZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UgPSBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+KGVudHJ5LmhhbmRsZS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjxKSVRUaHVu
a1B0clRhZz4oKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJ
U3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgcmV0dXJu
IGV4aXN0aW5nQ1RJU3R1YihnZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NU
SVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCitN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhpc3RpbmdD
VElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQog
ewotICAgIENUSVN0dWJNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jdGlTdHViTWFwLmZpbmQoZ2Vu
ZXJhdG9yKTsKLSAgICBpZiAoZW50cnkgPT0gbV9jdGlTdHViTWFwLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigpOwotICAgIHJldHVy
biBlbnRyeS0+dmFsdWU7CisgICAgYXV0byBpdGVyID0gbV9jdGlTdHViTWFwLmZpbmQoZ2VuZXJh
dG9yKTsKKyAgICBpZiAoaXRlciA9PSBtX2N0aVN0dWJNYXAuZW5kKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CisgICAgaWYgKGVu
dHJ5Lm5lZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UgJiYgIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSkgeworICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CisgICAgICAgIGVu
dHJ5Lm5lZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4oZW50cnkuaGFuZGxlLT5z
dGFydCgpLnJldGFnZ2VkUHRyPEpJVFRodW5rUHRyVGFnPigpKTsKIH0KIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVFRodW5rczo6Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIoVk0mIHZtLCBTbG93UGF0aEZ1bmN0
aW9uIHNsb3dQYXRoRnVuY3Rpb24pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJU
YWc+IEpJVFRodW5rczo6Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIoVk0mIHZtLCBTbG93UGF0aEZ1
bmN0aW9uIHNsb3dQYXRoRnVuY3Rpb24pCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgYXV0byBrZXkgPSBi
aXR3aXNlX2Nhc3Q8VGh1bmtHZW5lcmF0b3I+KHNsb3dQYXRoRnVuY3Rpb24pOwotICAgIENUSVN0
dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoa2V5LCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCkpOwotICAgIGlmIChlbnRyeS5pc05ld0VudHJ5
KSB7Ci0gICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlz
dGluZyBlbnRyaWVzLgotICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0g
ICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IEpJVFNsb3dQYXRoQ2FsbDo6Z2VuZXJhdGVU
aHVuayh2bSwgc2xvd1BhdGhGdW5jdGlvbik7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2N0aVN0
dWJNYXAuYWRkKGtleSwgRW50cnkoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7
CisgICAgICAgIGF1dG8gY29kZVJlZiA9IEpJVFNsb3dQYXRoQ2FsbDo6Z2VuZXJhdGVUaHVuayh2
bSwgc2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIGJvb2wgbmVlZHNDcm9zc01vZGlmeWluZ0Nv
ZGVGZW5jZSA9IGlzQ29tcGlsYXRpb25UaHJlYWQoKTsKKyAgICAgICAgRW50cnkgZW50cnkgeyBQ
YWNrZWRSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4oY29kZVJlZi5leGVjdXRhYmxlTWVt
b3J5KCkpLCBuZWVkc0Nyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlIH07CisgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBlbnRyeTsKKyAgICB9CisKKyAgICBFbnRyeSYgZW50cnkgPSBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChlbnRyeS5uZWVkc0Nyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlICYmICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpIHsKKyAgICAgICAgV1RGOjpj
cm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOworICAgICAgICBlbnRyeS5uZWVkc0Nyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlID0gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+
dmFsdWU7CisKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PihlbnRyeS5oYW5kbGUtPnN0YXJ0KCkucmV0YWdnZWRQdHI8SklUVGh1bmtQdHJUYWc+KCkpOwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNzIsNiArMjk1LDcg
QEAgdm9pZCBKSVRUaHVua3M6OnByZWluaXRpYWxpemVFeHRyYUNUSVRodQogICAgIGN0aVN0dWIo
dm0sIHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwog
ICAgIGN0aVN0dWIodm0sIGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKTsKIAorICAgIC8qCiAjZGVm
aW5lIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShuYW1lKSBjdGlTbG93UGF0
aEZ1bmN0aW9uU3R1Yih2bSwgc2xvd19wYXRoXyMjbmFtZSkKIAogICAgIC8vIEZyb20gdGhlIEJh
c2VsaW5lSklUIERFRklORV9TTE9XX09QIGxpc3Q6CkBAIC0zODAsNiArNDA0LDcgQEAgdm9pZCBK
SVRUaHVua3M6OnByZWluaXRpYWxpemVFeHRyYUNUSVRodQogCiAgICAgY3RpU3R1Yih2bSwgbGlu
a0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgYXJpdHlGaXh1cEdlbmVyYXRv
cik7CisgICAgKi8KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCShyZXZpc2lvbiAyNzc4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8dHVwbGU+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY0LDExICs2NiwxMSBAQCBwdWJsaWM6CiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0
aW9uQ2FsbChWTSYpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4g
Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTdHViKFZNJiwgVGh1bmtHZW5lcmF0b3IpOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdDVElTdHViKFRo
dW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBU
aHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yLCBOb0xv
Y2tpbmdOZWNlc3NhcnlUYWcpOwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY3RpU2xvd1BhdGhGdW5jdGlvblN0
dWIoVk0mLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKFZNJiwgU2xvd1BhdGhGdW5jdGlv
bik7CiAjZW5kaWYKIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0m
LCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Is
IGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC03OCw3ICs4MCwxMSBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KSBmaW5h
bDsKICAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IENUSVN0dWJNYXA7CisgICAgc3RydWN0IEVudHJ5
IHsKKyAgICAgICAgUGFja2VkUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGhhbmRsZTsK
KyAgICAgICAgYm9vbCBuZWVkc0Nyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlOworICAgIH07CisgICAg
dXNpbmcgQ1RJU3R1Yk1hcCA9IEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIEVudHJ5PjsKICAgICBD
VElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKIAogICAgIHVzaW5nIEhvc3RGdW5jdGlvbktleSA9IHN0
ZDo6dHVwbGU8VGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJp
bmc+OwpAQCAtMTE4LDcgKzEyNCwzNyBAQCBwcml2YXRlOgogCiAgICAgdXNpbmcgV2Vha05hdGl2
ZUV4ZWN1dGFibGVTZXQgPSBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4sIFdlYWtOYXRp
dmVFeGVjdXRhYmxlSGFzaD47CiAgICAgV2Vha05hdGl2ZUV4ZWN1dGFibGVTZXQgbV9uYXRpdmVF
eGVjdXRhYmxlU2V0OwotICAgIExvY2sgbV9sb2NrOworCisgICAgc3RydWN0IFJlY3Vyc2l2ZUxv
Y2sgeworICAgICAgICB2b2lkIGxvY2soKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3du
ZXJUaHJlYWQgJiYgb3duZXJUaHJlYWQgPT0gJldURjo6VGhyZWFkOjpjdXJyZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICArK2xvY2tDb3VudDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbG9jay5sb2NrKCk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChsb2NrQ291bnQgPT0gMCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
b3duZXJUaHJlYWQpOworICAgICAgICAgICAgKytsb2NrQ291bnQ7CisgICAgICAgICAgICBvd25l
clRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3VycmVudCgpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCB1bmxvY2soKQorICAgICAgICB7CisgICAgICAgICAgICAtLWxvY2tDb3VudDsKKyAgICAg
ICAgICAgIGlmICghbG9ja0NvdW50KSB7CisgICAgICAgICAgICAgICAgb3duZXJUaHJlYWQgPSBu
dWxscHRyOworICAgICAgICAgICAgICAgIG1fbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIFdURjo6VGhyZWFkKiBvd25lclRocmVhZCB7IG51bGxwdHIg
fTsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIHVuc2lnbmVkIGxvY2tDb3VudDsKKyAg
ICB9OworCisgICAgUmVjdXJzaXZlTG9jayBtX2xvY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjc3
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE4OCw5ICsxMTg4LDkgQEAgdm9pZCByZXBhdGNoSW5zdGFuY2VPZigKICAgICAg
ICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24sIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKIH0KIAotc3RhdGljIHZv
aWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQorc3RhdGljIHZv
aWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQogewotICAgIGNh
bGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1w
bGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0U2xv
d1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQpAQCAtMTIwMSw3
ICsxMjAxLDcgQEAgc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTAogc3Rh
dGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
IHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICBsaW5rU2xv
d1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworICAgIGxpbmtTbG93UGF0
aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuay5jb2RlKCkpOwogICAgIGNhbGxMaW5r
SW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1
bmssIHZtKSk7CiB9CiAKQEAgLTEyODEsNyArMTI4MSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEMKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsK
IH0KIAotc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVS
ZWYpCitzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVB0
cikKIHsKICAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKICAgICAgICAgY2FsbExp
bmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7CkBAIC0xMjg5LDcgKzEyODksNyBAQCBzdGF0aWMgdm9p
ZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAgICAgICAgICAgICBjYWxsTGlua0luZm8u
aW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWNhbGxM
aW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAgICAgICAgICBsaW5rU2xvd1BhdGhU
byh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRv
KHZtLCBjYWxsTGlua0luZm8sIGNvZGVQdHIpOwogCiAgICAgICAgICAgICBpZiAoY2FsbExpbmtJ
bmZvLnN0dWIoKSkKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1
YigpOwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0m
IHZtLCBDYWxsRgogICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVP
cmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7CiAKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVu
ayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICByZXZlcnRDYWxsKHZt
LCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmsuY29kZSgpKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0
dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodmlydHVhbFRodW5rLCB2bSkpOwogICAg
IGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlWaXJ0dWFsKCk7CiB9CkBAIC0xNjEzLDcgKzE2MTMs
NyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAKICAgICBpZiAo
IWRvbmUuZW1wdHkoKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0lu
Zm8uZG9uZUxvY2F0aW9uKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcikpKTsKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0g
YWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJ
WkVfQ09ERV9GT1IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBKSVRT
bG93UGF0aENhbGw6OmNhbGwoKQogICAgIFVOVVNFRF9WQVJJQUJMRShtX3BjKTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwog
ICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRSZWcpOwotICAgIG1faml0LT5lbWl0TmFrZWROZWFyQ2FsbCh2bS5qaXRTdHVicy0+
Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIG1fc2xvd1BhdGhGdW5jdGlvbikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKyAgICBtX2ppdC0+ZW1pdE5ha2VkTmVhckNhbGwodm0uaml0U3R1
YnMtPmN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKHZtLCBtX3Nsb3dQYXRoRnVuY3Rpb24pLnJldGFn
Z2VkPE5vUHRyVGFnPigpKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVRTbG93UGF0aENhbGw6OmdlbmVyYXRlVGh1bmsoVk0mIHZtLCBTbG93UGF0aEZ1bmN0
aW9uIHNsb3dQYXRoRnVuY3Rpb24pCkBAIC04OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oc2xvd1BhdGhG
dW5jdGlvbikpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRh
Z2dlZDxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIlNsb3dQYXRoQ2FsbCIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyNzc4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBwbwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICBhdXRvIGhhbmRsZXIgPSB2bS5q
aXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2Nr
aW5nTmVjZXNzYXJ5KTsKICAgICBSRUxFQVNFX0FTU0VSVChoYW5kbGVyKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZDxOb1B0clRhZz4oKSkpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKIH0KIApAQCAtMTMyLDcgKzEzMiw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2gKICNlbmRpZgogCiAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZXJH
ZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIoaGFuZGxlckdlbmVyYXRvciwgTm9Mb2NraW5n
TmVjZXNzYXJ5KS5yZXRhZ2dlZDxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkNoZWNrRXhjZXB0aW9uIik7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI3Nzg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODE4LDcgKzgxOCw3IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZv
ckkKICAgICB9CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gVk06
OmdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBWTTo6Z2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3IpCiB7CiAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKCp0aGlzLCBnZW5lcmF0b3IpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzc4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NDAsNyArODQwLDcgQEAgcHVibGljOgogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNp
ZiBFTkFCTEUoSklUKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRUaHVua3M+IGppdFN0dWJzOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0Q1RJU3R1YihUaHVu
a0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBn
ZXRDVElTdHViKFRodW5rR2VuZXJhdG9yKTsKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAjaWYg
RU5BQkxFKEZUTF9KSVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429378</attachid>
            <date>2021-05-21 18:03:18 -0700</date>
            <delta_ts>2021-05-24 17:28:29 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>67750</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHNpemVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNp
emVzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwogCitMaW5rQnVmZmVyOjp+TGlua0J1
ZmZlcigpCit7CisgICAgaWYgKCFkaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcy5pc0VtcHR5KCkpOworfQorCiBi
b29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmpp
dFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCkBAIC00ODUsNiArNDkx
LDEzIEBAIHZvaWQgTGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiAgICAgTWFjcm9B
c3NlbWJsZXI6OmNhY2hlRmx1c2goY29kZSgpLCBtX3NpemUpOwogfQogCit2b2lkIExpbmtCdWZm
ZXI6OnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpCit7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV9tYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MpCisgICAgICAgIHRhc2stPnJ1bigp
OworICAgIG1fbWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzLmNsZWFyKCk7Cit9CisKICNpZiBE
VU1QX0xJTktfU1RBVElTVElDUwogdm9pZCBMaW5rQnVmZmVyOjpkdW1wTGlua1N0YXRpc3RpY3Mo
dm9pZCogY29kZSwgc2l6ZV90IGluaXRpYWxpemVTaXplLCBzaXplX3QgZmluYWxTaXplKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJl
dmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOSArMTM2LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAgICAgfQogCi0gICAgfkxpbmtC
dWZmZXIoKQotICAgIHsKLSAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkxpbmtCdWZmZXIo
KTsKKworICAgIHZvaWQgY2FuY2VsKCkgeyBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcy5j
bGVhcigpOyB9CisKKyAgICB2b2lkIHJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwog
ICAgIAogICAgIGJvb2wgZGlkRmFpbFRvQWxsb2NhdGUoKSBjb25zdAogICAgIHsKQEAgLTMyNSw2
ICszMjcsMTIgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
ZHVtcFByb2ZpbGVTdGF0aXN0aWNzKE9wdGlvbmFsPFByaW50U3RyZWFtKj4gPSBXVEY6Om51bGxv
cHQpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZE1haW5U
aHJlYWRGaW5hbGl6YXRpb25UYXNrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFz
azx2b2lkKCk+KGZ1bmN0b3IpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNz
ZW1ibHlJbXBsKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRy
VGFnPiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGJvb2wgZHVtcERpc2Fzc2VtYmx5
LCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMywgNCk7CkBA
IC00MDQsNiArNDEyLDcgQEAgcHJpdmF0ZToKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlu
a0J1ZmZlclB0clRhZz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KExpbmtCdWZmZXImKT4+PiBtX2xpbmtUYXNrczsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9sYXRlTGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gbV9tYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3M7CiAK
ICAgICBzdGF0aWMgc2l6ZV90IHNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbbnVtYmVy
T2ZQcm9maWxlc107CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQs
NyArMzY0LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogCiB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQp
CiB7Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7
CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9m
ZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMy
LDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdAogICAgICAgICBW
TSogdm0gPSAmbV92bTsKICAgICAgICAgaml0LT5hZGRMaW5rVGFzaygKICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJ
U3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVy
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgICAgICAgICB9KTsKICNlbHNlCiAgICAg
ICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9u
SGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw2ICs3OCw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAg
ICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpKQogICAgICAgICBkYXRhTG9nKCJERkco
RHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIsIG1vZGUsICIsIGluc3Ry
dWN0aW9ucyBzaXplID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCksICJcbiIpOwog
ICAgIAorICAgIC8qIE9PUFMKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0
aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAv
LyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlv
biBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKTsKQEAgLTg1LDYgKzg2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAg
IHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAq
LwogICAgIAogICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgdm0udHlwZVByb2Zp
bGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKHZtLCAiUHJlcGFyaW5nIGZvciBERkcgY29tcGls
YXRpb24uIl9zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIu
aAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5h
bGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBzaXplX3QgY29kZVNpemUoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGZpbmFsaXplKCkg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjYW5jZWwoKSB7IH0KIAogcHJvdGVjdGVkOgogICAgIFBsYW4mIG1fcGxhbjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCIKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJERkdJbmxp
bmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjcz
LDEzICsyNzQsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNr
cy5lbXB0eSgpKQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIENv
ZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9l
eGNlcHRpb25DaGVja3MsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgaWYgKCFtX2V4
Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKQotICAgICAgICBsaW5r
QnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2ssIENvZGVM
b2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgICAgICBs
aW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2ssIENv
ZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRvIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKKyAgICBhdXRvIHRhcmdldCA9
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bSgpLmdldENUSVN0dWIob3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX29zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5m
byYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgaWYgKCFPcHRpb25z
Ojp1c2VQcm9iZU9TUkV4aXQoKSkgewpAQCAtMzk4LDggKzM5OCwxMSBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlKCkKIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsKIAotICAgIG1f
Z3JhcGgubV9wbGFuLnNldEZpbmFsaXplcihtYWtlVW5pcXVlPEpJVEZpbmFsaXplcj4oCi0gICAg
ICAgIG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShs
aW5rQnVmZmVyKSkpOworICAgIGF1dG8gY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCpsaW5r
QnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6REZHSklUKSkuZGF0YSgp
KTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKGNvZGVSZWYsIGNvZGVS
ZWYuY29kZSgpKTsKKworICAgIGF1dG8gZmluYWxpemVyID0gbWFrZVVuaXF1ZTxKSVRGaW5hbGl6
ZXI+KG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShs
aW5rQnVmZmVyKSk7CisgICAgbV9ncmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKFdURk1vdmUoZmlu
YWxpemVyKSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCkBAIC00
OTYsMTQgKzQ5OSwxOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAg
IG1fc3BlY3VsYXRpdmUtPmxpbmtPU1JFbnRyaWVzKCpsaW5rQnVmZmVyKTsKICAgICAKICAgICBp
ZiAocmVxdWlyZXNBcml0eUZpeHVwKQotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0
eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0oKS5nZXRDVElTdHViKGFyaXR5
Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxB
cml0eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0oKS5nZXRDVElTdHViKGFy
aXR5Rml4dXBHZW5lcmF0b3IpKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sg
PSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGFyaXR5Q2hlY2spOwogCi0g
ICAgbV9ncmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8SklURmluYWxpemVyPigK
LSAgICAgICAgbV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZN
b3ZlKGxpbmtCdWZmZXIpLCB3aXRoQXJpdHlDaGVjaykpOworICAgIG1faml0Q29kZS0+aW5pdGlh
bGl6ZUNvZGVSZWZGb3JERkcoCisgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCpsaW5rQnVmZmVy
LCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6REZHSklUKSkuZGF0YSgpKSwKKyAg
ICAgICAgd2l0aEFyaXR5Q2hlY2spOworCisgICAgYXV0byBmaW5hbGl6ZXIgPSBtYWtlVW5pcXVl
PEpJVEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgp
LCBXVEZNb3ZlKGxpbmtCdWZmZXIpLCB3aXRoQXJpdHlDaGVjayk7CisgICAgbV9ncmFwaC5tX3Bs
YW4uc2V0RmluYWxpemVyKFdURk1vdmUoZmluYWxpemVyKSk7CiB9CiAKIHZvaWQgSklUQ29tcGls
ZXI6OmRpc2Fzc2VtYmxlKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyNzc4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDExIEBAIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigp
CiB7CiB9CiAKK3ZvaWQgSklURmluYWxpemVyOjpjYW5jZWwoKQoreworICAgIG1fbGlua0J1ZmZl
ci0+Y2FuY2VsKCk7Cit9CisKIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIHsKICAg
ICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CkBAIC01NSwxMCArNjAsOCBAQCBzaXplX3Qg
SklURmluYWxpemVyOjpjb2RlU2l6ZSgpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgp
CiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBG
SU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrKCksIEpJVFR5cGU6OkRGR0pJVCkpLmRhdGEoKSk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZkZvckRGRyhjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSk7Ci0KLSAgICBtX3BsYW4u
Y29kZUJsb2NrKCktPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CisgICAgLy9NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0RGR19D
T0RFKCptX2xpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklUKSkuZGF0YSgpKTsKKyAgICAvL21faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWZG
b3JERkcoY29kZVJlZiwgY29kZVJlZi5jb2RlKCkpOwogCiAgICAgZmluYWxpemVDb21tb24oKTsK
ICAgICAKQEAgLTY3LDExICs3MCwxMCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQog
CiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIW1fd2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZhbHVlKCkpOwotICAgIG1faml0Q29kZS0+
aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xp
bmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5n
KENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklU
KSkuZGF0YSgpKSwKLSAgICAgICAgbV93aXRoQXJpdHlDaGVjayk7Ci0gICAgbV9wbGFuLmNvZGVC
bG9jaygpLT5zZXRKSVRDb2RlKG1faml0Q29kZS5jb3B5UmVmKCkpOworICAgIC8vUkVMRUFTRV9B
U1NFUlQoIW1fd2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZhbHVlKCkpOworICAgIC8vbV9qaXRDb2Rl
LT5pbml0aWFsaXplQ29kZVJlZkZvckRGRygKKyAgICAvLyAgICBGSU5BTElaRV9ERkdfQ09ERSgq
bV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVFR5cGU6OkRG
R0pJVCkpLmRhdGEoKSksCisgICAgLy8gICAgbV93aXRoQXJpdHlDaGVjayk7CiAKICAgICBmaW5h
bGl6ZUNvbW1vbigpOwogICAgIApAQCAtODAsMjEgKzgyLDI5IEBAIGJvb2wgSklURmluYWxpemVy
OjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIAogdm9pZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9u
KCkKIHsKKyAgICBWTSYgdm0gPSAqbV9wbGFuLnZtKCk7CisKKyAgICBXVEY6OmNyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlKCk7CisKKyAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6
YXRpb25UYXNrcygpOworCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3BsYW4uY29kZUJs
b2NrKCk7CiAKKyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7
CisKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJt
VXAoY29kZUJsb2NrKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGlmIChVTkxJ
S0VMWShtX3BsYW4uY29tcGlsYXRpb24oKSkpCi0gICAgICAgIG1fcGxhbi52bSgpLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxh
dGlvbigpKTsKKyAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlv
bihjb2RlQmxvY2ssICptX3BsYW4uY29tcGlsYXRpb24oKSk7CiAKICAgICBpZiAoIW1fcGxhbi53
aWxsVHJ5VG9UaWVyVXAoKSkKICAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+
bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gPSB0cnVlOwogCiAgICAgLy8gVGhlIGNvZGVCbG9jayBp
cyBub3cgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgbWFueSB0aGluZ3MgYWxpdmUgKGUuZy4gZnJv
emVuIHZhbHVlcykKICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBrZXB0IGFsaXZlIGJ5IHRo
ZSBwbGFuLgotICAgIG1fcGxhbi52bSgpLT5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwor
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxp
emVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5h
bGl6ZXIuaAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6
CiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7CiAgICAgYm9vbCBmaW5hbGl6ZSgpIGZpbmFs
OwogICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIGZpbmFsOworICAgIHZvaWQgY2FuY2VsKCkg
ZmluYWw7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBmaW5hbGl6ZUNvbW1vbigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDI3
Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDksOCArMjQ5LDkgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChD
Q2FsbEhlbHBlcnMmIGppdAogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJs
b2NrKCk7CiAgICAgCi0gICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICBbY29kZUJsb2NrLCBs
YWJlbCwgdGhpc1ZhbHVlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgYXV0byBwYXRj
aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpJVENvbXBpbGF0aW9uUHRyVGFnPihs
YWJlbCk7CisgICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2so
Wz1dIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVlID0gdGhpc1ZhbHVlLmdldFZhbHVl
KGNvZGVCbG9jay0+dm0oKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWFsVmFsdWUu
aXNDZWxsKCkpOwogCkBAIC0yNTksOCArMjYwLDkgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChD
Q2FsbEhlbHBlcnMmIGppdAogICAgICAgICAgICAgaWYgKHRoaXNWYWx1ZS5tX2tpbmQgPT0gTmV3
U3RyaW5nSW1wbCkKICAgICAgICAgICAgICAgICB0aGlzVmFsdWUudS5zdHJpbmdJbXBsLT5kZXJl
ZigpOwogCi0gICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKGxhYmVsLCByZWFsVmFsdWUuYXND
ZWxsKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhdGNo
TG9jYXRpb24sIHJlYWxWYWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIH0pOworICAgIH0pOwogfQog
CiB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBD
b250ZXh0KiBjb250ZXh0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNiArNjA1LDcgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0TgogCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0ID0gWyZdIHsKICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoKSB8fCAh
aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fZmluYWxpemVyLT5jYW5jZWwoKTsKICAg
ICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdGaW5hbGl6ZSIs
ICgiaW52YWxpZGF0ZWQiKSk7CiAgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlk
YXRlZDsKICAgICAgICAgfQpAQCAtNzUyLDYgKzc1Myw4IEBAIHZvaWQgUGxhbjo6Y2FuY2VsKCkK
ICAgICBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBtX211c3RIYW5kbGVW
YWx1ZXMuY2xlYXIoKTsKICAgICBtX2NvbXBpbGF0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAobV9m
aW5hbGl6ZXIpCisgICAgICAgIG1fZmluYWxpemVyLT5jYW5jZWwoKTsKICAgICBtX2ZpbmFsaXpl
ciA9IG51bGxwdHI7CiAgICAgbV9pbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKICAgICBtX3dh
dGNocG9pbnRzID0gRGVzaXJlZFdhdGNocG9pbnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsx
MzAsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgVk0q
IHZtUHRyID0gJnZtOwogICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxlciwg
Q29kZUxvY2F0aW9uTGFiZWwodm1QdHItPmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhoYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbCh2bVB0ci0+Z2V0Q1RJU3R1YihoYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgICAgIH0pOwog
I2Vsc2UKICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0udG9wRW50cnlGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNp
bmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNjcsMzEgKzY4LDQyIEBA
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICByZXR1cm4gZmluYWxp
emVDb21tb24oKTsKIH0KIAordm9pZCBKSVRGaW5hbGl6ZXI6OmNhbmNlbCgpCit7CisgICAgaWYg
KGIzQ29kZUxpbmtCdWZmZXIpCisgICAgICAgIGIzQ29kZUxpbmtCdWZmZXItPmNhbmNlbCgpOwor
fQorCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQogeworICAgIFZNJiB2bSA9
ICptX3BsYW4udm0oKTsKKyAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CisKKyAg
ICBiM0NvZGVMaW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKKwog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9wbGFuLmNvZGVCbG9jaygpOwotICAgIGJvb2wg
ZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5
bmNEaXNhc3NlbWJseSgpOworICAgIC8vYm9vbCBkdW1wRGlzYXNzZW1ibHkgPSBzaG91bGREdW1w
RGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCk7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYjNDb2RlUmVmID0KLSAgICAgICAgRklO
QUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVmZmVyLCBKU0VudHJ5
UHRyVGFnLAotICAgICAgICAgICAgIkZUTCBCMyBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJVFR5cGU6OkZUTEpJVCkpLmRhdGEoKSk7Ci0K
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVS
ZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZlcgotICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVt
cERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAg
ICAgICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNv
ZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRU
eXBlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKQotICAgICAgICA6IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGIzQ29kZVJl
Zi5jb2RlKCkpOworICAgIC8vTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIz
Q29kZVJlZiA9CisgICAgLy8gICAgRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpi
M0NvZGVMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAorICAgIC8vICAgICAgICAiRlRMIEIzIGNv
ZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklU
VHlwZTo6RlRMSklUKSkuZGF0YSgpKTsKKworICAgIC8vTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IGFyaXR5Q2hlY2tDb2RlUmVmID0gZW50cnlwb2ludExpbmtCdWZmZXIKKyAg
ICAvLyAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExp
bmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCisgICAgLy8gICAgICAgICJGVEwgZW50cnlwb2ludCB0
aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJVFR5cGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVu
Y3Rpb24pCisgICAgLy8gICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKIAotICAgIGppdENv
ZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKLSAgICBqaXRDb2RlLT5pbml0aWFsaXpl
QXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVSZWYpOworICAgIC8vaml0Q29kZS0+
aW5pdGlhbGl6ZUIzQ29kZShiM0NvZGVSZWYpOworICAgIC8vaml0Q29kZS0+aW5pdGlhbGl6ZUFy
aXR5Q2hlY2tFbnRyeXBvaW50KGFyaXR5Q2hlY2tDb2RlUmVmKTsKIAogICAgIGNvZGVCbG9jay0+
c2V0SklUQ29kZSgqaml0Q29kZSk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9wbGFuLmNvbXBpbGF0
aW9uKCkpKQotICAgICAgICBtX3BsYW4udm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRD
b21waWxhdGlvbihjb2RlQmxvY2ssICptX3BsYW4uY29tcGlsYXRpb24oKSk7CisgICAgICAgIHZt
Lm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24oY29kZUJsb2NrLCAqbV9wbGFu
LmNvbXBpbGF0aW9uKCkpOwogCiAgICAgLy8gVGhlIGNvZGVCbG9jayBpcyBub3cgcmVzcG9uc2li
bGUgZm9yIGtlZXBpbmcgbWFueSB0aGluZ3MgYWxpdmUgKGUuZy4gZnJvemVuIHZhbHVlcykKICAg
ICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBrZXB0IGFsaXZlIGJ5IHRoZSBwbGFuLgotICAgIG1f
cGxhbi52bSgpLT5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jayk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMjc3ODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgSklURmluYWxpemVyKERGRzo6
UGxhbiYpOwogICAgIH5KSVRGaW5hbGl6ZXIoKSBmaW5hbDsKIAorICAgIHZvaWQgY2FuY2VsKCkg
ZmluYWw7CiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7CiAgICAgYm9vbCBmaW5hbGl6ZSgp
IGZpbmFsOwogICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIGZpbmFsOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTEg
KzE3OSwxMSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihjb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVj
dEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaykpOwogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhqdW1wVG9FeGNlcHRp
b25IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIs
IENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxG
cmFtZVJvbGxiYWNrR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSkpOwogI2Vsc2UKICAg
ICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9t
Q2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3Vw
RXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwogI2VuZGlmCi0gICAgICAgICAgICBs
aW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRh
Zz4odm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAg
ICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyPEpJVFRodW5r
UHRyVGFnPih2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpKSk7CiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
KTsKICAgICAgICAgfQogCkBAIC0yMTYsNiArMjE2LDIzIEBAIHZvaWQgbGluayhTdGF0ZSYgc3Rh
dGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKworICAgIHsKKyAgICAgICAgYm9vbCBkdW1wRGlzYXNzZW1ibHkgPSBzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCk7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9CisgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJseSwgKnN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKKyAgICAgICAgICAgICAgICAiRlRM
IEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVCbG9j
aywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVSZWYgPSBsaW5rQnVmZmVyCisgICAg
ICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqbGlua0J1ZmZlciwg
SlNFbnRyeVB0clRhZywKKyAgICAgICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9y
ICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCksIHN0YXRlLmdlbmVy
YXRlZEZ1bmN0aW9uKQorICAgICAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKKwor
ICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQjNDb2RlKGIzQ29kZVJlZik7CisgICAg
ICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChhcml0eUNo
ZWNrQ29kZVJlZik7CisgICAgfQorCiAgICAgCiAgICAgc3RhdGUuZmluYWxpemVyLT5lbnRyeXBv
aW50TGlua0J1ZmZlciA9IFdURk1vdmUobGlua0J1ZmZlcik7CiAgICAgc3RhdGUuZmluYWxpemVy
LT5mdW5jdGlvbiA9IHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjc3ODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzI4Myw3ICsxNzI4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhnZW5lcmF0b3JKdW1wLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLT5nZXRD
VElTdHViKGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRU
aHVua1B0clRhZz4odm0tPmdldENUSVN0dWIobGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4gbGF6eVNs
b3dQYXRoID0gbWFrZVVuaXF1ZTxMYXp5U2xvd1BhdGg+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkocmV2aXNpb24gMjc3ODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0
VGh1bmsoU3RhdGUmCiAKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAg
ICAgICBqdW1wLm1fanVtcCwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRU
aHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0
clRhZz4odm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKSkpOwog
ICAgICAgICAgICAgaWYgKGNvbXBpbGF0aW9uKQogICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9u
LT5hZGRPU1JFeGl0U2l0ZSh7IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihteUxhYmVsKSB9KTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0MywyMiArNjQzLDE5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXMKICNlbmRpZgogfQogCi1Bc3NlbWJseUhlbHBlcnM6OkNhbGwgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
TGlua0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQog
ewogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgcmV0
dXJuIG5lYXJDYWxsKCk7Ci19Ci0KLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENh
bGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGlu
Zm8pCi17Ci0gICAgQ2FsbCBjYWxsID0gZW1pdFVubGlua2VkVmlydHVhbENhbGwoZ2xvYmFsT2Jq
ZWN0LCBpbmZvKTsKLSAgICBhZGRMaW5rVGFzaygKLSAgICAgICAgWz0sICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOworICAgIGFkZExp
bmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGF1dG8g
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRp
b25QdHJUYWc+KGNhbGwpOworICAgICAgICBsaW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6
YXRpb25UYXNrKFs9LCAmdm1dICgpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZt
LCAqaW5mbyk7CiAgICAgICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1bmssIHZtKSk7Ci0gICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1
YWxUaHVuay5jb2RlKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVh
ckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogI2lm
IFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjgsNyArMTgyOCw2IEBA
IHB1YmxpYzoKICAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpVbmRlZmluZWQsIHRydWUpOwog
ICAgIH0KICAgICAKLSAgICBDYWxsIGVtaXRVbmxpbmtlZFZpcnR1YWxDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbExpbmtJbmZvKik7CiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0ds
b2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25T
dGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lv
biAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwMCw3ICs4MDAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKICAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCht
X3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigp
KTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRo
IEFTU0VSVHMuCkBAIC04ODEsOSArODgxLDkgQEAgdm9pZCBKSVQ6OmxpbmsoKQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgp
KQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBDb2RlTG9jYXRp
b25MYWJlbCh2bSgpLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlv
bkNoZWNrcywgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpKTsKICAgICBpZiAoIW1fZXhjZXB0aW9u
Q2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsobV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2ssIENvZGVMb2NhdGlv
bkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLCBDb2RlTG9j
YXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSkpOwogI2VuZGlmCiAKICAgICBm
b3IgKGF1dG8mIHJlY29yZCA6IG1fbmVhckp1bXBzKSB7CkBAIC05MTEsNyArOTExLDcgQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogCiAgICAgaWYgKG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpKSB7
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IGV4Y2VwdGlvbkhhbmRsZXIodm0oKS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCkpOworICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKHZtKCkuZ2V0Q1RJU3R1YihoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCkpOwogI2Vs
c2UKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZXhj
ZXB0aW9uSGFuZGxlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4obV9leGNlcHRpb25IYW5kbGVyKTsKICNlbmRpZgpAQCAtOTkxLDE0ICs5OTEsNyBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAgICAgaWYgKCFtX2ppdENv
ZGUpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKIAotICAgIGZvciAoYXV0byBw
YWlyIDogbV92aXJ0dWFsQ2FsbHMpIHsKLSAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBtX2xp
bmtCdWZmZXItPmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRUaHVua1B0clRhZz4ocGFpci5maXJzdCk7
Ci0KLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gcGFpci5zZWNvbmQ7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0g
dmlydHVhbFRodW5rRm9yKCptX3ZtLCBpbmZvKTsKLSAgICAgICAgaW5mby5zZXRTbG93U3R1YihH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1bmssICptX3ZtKSk7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwot
ICAgIH0KKyAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygp
OwogCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzc4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDU2LDggKzEwNTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgUmVmUHRyPERpcmVjdEpJVENv
ZGU+IG1faml0Q29kZTsKLQotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENhbGwsIENhbGxMaW5r
SW5mbyY+PiBtX3ZpcnR1YWxDYWxsczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9u
IDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgbV92aXJ0dWFsQ2FsbHMuYXBwZW5kKHN0ZDo6cGFpcjxDYWxs
LCBDYWxsTGlua0luZm8mPiB7IGVtaXRVbmxpbmtlZFZpcnR1YWxDYWxsKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgaW5mbyksICppbmZvIH0pOworICAgIGVtaXRWaXJ0dWFsQ2FsbChtX3Zt
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBs
b2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsK
LSAgICBtX3ZpcnR1YWxDYWxscy5hcHBlbmQoc3RkOjpwYWlyPENhbGwsIENhbGxMaW5rSW5mbyY+
IHsgZW1pdFVubGlua2VkVmlydHVhbENhbGwobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBp
bmZvKSwgKmluZm8gfSk7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGluZm8pOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwog
ICAgIHJldCgpOwogI2Vsc2UKLSAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIo
b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgZW1pdE5ha2VkTmVhckp1bXAo
dm0oKS5nZXRDVElTdHViKG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKSk7CiAjZW5kaWYKIH0KIApA
QCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0
aW8KICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHRocm93
blZhbHVlR1BSKTsKLSAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIob3BfdGhy
b3dfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgp
LmdldENUSVN0dWIob3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcikpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogfQogCkBAIC0xMTE0LDcgKzExMTQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxz
VG9Jbml0IDwgY291bnQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGxvY2Fsc1RvSW5pdCAqIHNp
emVvZihSZWdpc3RlcikpLCBsb2NhbHNUb0luaXRHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGNhbkJlT3B0aW1pemVkKCkpLCBjYW5CZU9wdGltaXplZEdQUik7Ci0gICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0oKS5nZXRDVElTdHViKG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHVi
KG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KIApAQCAtMTQyMSw3ICsxNDIxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgZW1pdE5h
a2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0o
KS5nZXRDVElTdHViKG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2VkPE5v
UHRyVGFnPigpKTsKICNlbmRpZgogfQogCkBAIC0xNDU5LDggKzE0NTksOCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uSGFuZGxlVHJhcHMpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVi
cy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhl
eGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVy
LmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWQ8
Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfY2hlY2tfdHJhcHNfaGFuZGxlciIpOwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIzLDcgKzEzMjMsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigp
LmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5
UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICAgICAgfQogCkBAIC0x
MzM1LDcgKzEzMzUsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
CiAgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsK
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QUZ1
bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKLSAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRh
YmxlQWRkcmVzcygpLAorICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOwogICAgIH0KIApAQCAtMTM1MSw3ICsxMzUxLDcgQEAgc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5
UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkPEpT
RW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogCkBAIC0xMzYx
LDcgKzEzNjEsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAg
ICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CiAg
ICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QUNvbnN0cnVj
dG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiB9CiAKQEAg
LTE0MDgsNyArMTQwOCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5r
Q2EKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIAogICAgICAgICBhdXRv
IGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93
VGFyZ2V0ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRo
cm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAg
ICAgfTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2
aXJ0dWFsRm9yV2l0aAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25z
dHJ1Y3QpIHsKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikp
OwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAg
ICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAg
ICB9CiAKQEAgLTE0NzcsNyArMTQ3Nyw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmly
dHVhbEZvcldpdGgKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpID09IGVycm9yKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGVycm9yKSkgewogICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50
cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS5nZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWQ8
SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMTk4Miw3ICsxOTgyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9w
dGltaQogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAgICAgICAgIGNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoVHJpU3RhdGU6OlRydWUp
OwotICAgICAgICB2b2lkKiB0YXJnZXRQQyA9IHVudGFnQ29kZVB0cjxKSVRUaHVua1B0clRhZz4o
dm0uZ2V0Q1RJU3R1YihERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB1bnRhZ0NvZGVQdHI8SklU
VGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIoREZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgdGFyZ2V0UEMgPSB0YWdDb2RlUHRyV2l0aFN0
YWNrUG9pbnRlckZvckpJVENhbGwodGFyZ2V0UEMsIGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVy
biBlbmNvZGVSZXN1bHQodGFyZ2V0UEMsIGRhdGFCdWZmZXIpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDEwICsxMTYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSQogCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0
clRhZz4oKSk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTIyNCwxMCArMjI0LDEwIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
PE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxG
dW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7Ci0gICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTM4MSwx
MCArMzgxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KIAog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9u
VHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1l
bnRUeXBlcz46OnZhbHVlKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJU
YWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC02
MzYsMTEgKzYzNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7CiAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKLSAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgYXV0byogb3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsK
ICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0gICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwpAQCAtNzQxLDEw
ICs3NDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVQUik7CiAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgpKSwgcHV0S2luZEdQUik7Ci0gICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwpAQCAtODk2LDEw
ICs4OTYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1v
ZGVHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwotICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCkBAIC0xMDA2LDEwICsxMDA2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCBlY21hTW9kZUdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9i
eV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAg
IENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7Ci0g
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7
CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTExMDgsMTAgKzExMDgsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwotICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0xMTc0LDEwICsxMTc0LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKLSAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
PE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEyNzMsMTAgKzEyNzMsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM1MiwxMCArMTM1MiwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkPE5vUHRyVGFnPigpKTsKIAogICAgIENhbGwg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwotICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwog
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwpA
QCAtMTQ2MywxMCArMTQ2MywxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
cHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSk7CiAK
ICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwotICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTE1NjIsMTAgKzE1NjIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIC8vIHNsb3dfb3BfZ2V0
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQu
CiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1
bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwotICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWQ8Tm9Q
dHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZSk7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZDxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE4
NTYsNyArMTg1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24K
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCi0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9t
X3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvciku
cmV0YWdnZWQ8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CkBAIC0xOTA1LDggKzE5MDUsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcGF0Y2hC
dWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uR2V0RnJvbVNjb3BlKSk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0
aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJh
dG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9u
Q2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2Vy
dmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGV4
Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkPE5vUHRyVGFn
PigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIwODAsNyArMjA4MCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcikucmV0YWdnZWQ8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtMjEyNiw4ICsyMTI2LDggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvblB1dFRvU2NvcGUpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVi
cy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhl
eGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVy
LmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWQ8
Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9wdXRfdG9fc2NvcGUiKTsKIH0KICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24g
Mjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw3OCArOTYsMTAzIEBAIGlubGluZSBib29sIEpJVFRodW5rczo6V2Vh
a05hdGl2ZUV4ZWN1dGEKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklU
VGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNl
SklUKCkpOwotICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDYWxsR2VuZXJhdG9yKS5jb2Rl
KCk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNhbGxHZW5lcmF0b3IpOwogfQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZl
Q29uc3RydWN0KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwotICAg
IHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKKyAg
ICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKTsKIH0KIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRh
aWxDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwotICAgIHJl
dHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcikuY29kZSgpOworICAgIHJl
dHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcik7CiB9CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2Fs
bFdpdGhvdXRTYXZlZFRhZ3MoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQo
KSk7Ci0gICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFn
c0dlbmVyYXRvcikuY29kZSgpOworICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2Fs
bFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mIHZt
KQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7Ci0gICAgcmV0dXJuIGN0aVN0dWIo
dm0sIGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0
aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKTsKIH0KIAogTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rp
b25Db25zdHJ1Y3QoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7Ci0g
ICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3Ip
LmNvZGUoKTsKKyAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVj
dEdlbmVyYXRvcik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUVGh1bmtzOjpjdGlTdHViKFZNJiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0m
IHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAu
YWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigpKTsK
LSAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAvLyBDb21waWxhdGlvbiB0aHJl
YWQgY2FuIG9ubHkgcmV0cmlldmUgZXhpc3RpbmcgZW50cmllcy4KLSAgICAgICAgQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBn
ZW5lcmF0b3Iodm0pOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIEVudHJ5KCkpOwor
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBhdXRvIGNvZGVSZWYgPSBn
ZW5lcmF0b3Iodm0pOyAvLyBUaGlzIG1heSBhZGQgdG8gbV9jdGlTdHViTWFwLgorICAgICAgICBi
b29sIG5lZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UgPSBpc0NvbXBpbGF0aW9uVGhyZWFkKCk7
CisgICAgICAgIEVudHJ5IGVudHJ5IHsgUGFja2VkUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+KGNvZGVSZWYuZXhlY3V0YWJsZU1lbW9yeSgpKSwgbmVlZHNDcm9zc01vZGlmeWluZ0NvZGVG
ZW5jZSB9OworICAgICAgICBhZGRSZXN1bHQgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwg
RW50cnkoKSk7IC8vIENyZWF0aW5nIHRoZSBnZW5lcmF0b3IgYWJvdmUgbWF5IGFkZCB0byBtX2N0
aVN0dWJNYXAsIHNvIHdlIG5lZWQgdG8gcmVsb2FkIGl0LgorICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gZW50cnk7CisgICAgfQorCisgICAgRW50cnkmIGVudHJ5ID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoZW50cnkubmVlZHNDcm9zc01vZGlmeWluZ0Nv
ZGVGZW5jZSAmJiAhaXNDb21waWxhdGlvblRocmVhZCgpKSB7CisgICAgICAgIFdURjo6Y3Jvc3NN
b2RpZnlpbmdDb2RlRmVuY2UoKTsKKyAgICAgICAgZW50cnkubmVlZHNDcm9zc01vZGlmeWluZ0Nv
ZGVGZW5jZSA9IGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVl
OworCisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4oZW50
cnkuaGFuZGxlLT5zdGFydCgpLnJldGFnZ2VkUHRyPEpJVFRodW5rUHRyVGFnPigpKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0aW5n
Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICByZXR1cm4gZXhpc3RpbmdDVElTdHViKGdl
bmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKK01hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCiB7Ci0gICAgQ1RJU3R1Yk1hcDo6
aXRlcmF0b3IgZW50cnkgPSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOwotICAgIGlmIChl
bnRyeSA9PSBtX2N0aVN0dWJNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCk7Ci0gICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKKyAg
ICBhdXRvIGl0ZXIgPSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOworICAgIGlmIChpdGVy
ID09IG1fY3RpU3R1Yk1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBF
bnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKKyAgICBpZiAoZW50cnkubmVlZHNDcm9zc01vZGlm
eWluZ0NvZGVGZW5jZSAmJiAhaXNDb21waWxhdGlvblRocmVhZCgpKSB7CisgICAgICAgIFdURjo6
Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKKyAgICAgICAgZW50cnkubmVlZHNDcm9zc01vZGlm
eWluZ0NvZGVGZW5jZSA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPihlbnRyeS5oYW5kbGUtPnN0YXJ0KCkucmV0YWdnZWRQdHI8
SklUVGh1bmtQdHJUYWc+KCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTbG93
UGF0aEZ1bmN0aW9uU3R1YihWTSYgdm0sIFNsb3dQYXRoRnVuY3Rpb24gc2xvd1BhdGhGdW5jdGlv
bikKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlT
bG93UGF0aEZ1bmN0aW9uU3R1YihWTSYgdm0sIFNsb3dQYXRoRnVuY3Rpb24gc2xvd1BhdGhGdW5j
dGlvbikKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBhdXRvIGtleSA9IGJpdHdpc2VfY2FzdDxUaHVua0dl
bmVyYXRvcj4oc2xvd1BhdGhGdW5jdGlvbik7Ci0gICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVu
dHJ5ID0gbV9jdGlTdHViTWFwLmFkZChrZXksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4oKSk7Ci0gICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAgICAgLy8gQ29t
cGlsYXRpb24gdGhyZWFkIGNhbiBvbmx5IHJldHJpZXZlIGV4aXN0aW5nIGVudHJpZXMuCi0gICAg
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgZW50cnkuaXRlcmF0
b3ItPnZhbHVlID0gSklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKHZtLCBzbG93UGF0aEZ1
bmN0aW9uKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY3RpU3R1Yk1hcC5hZGQoa2V5LCBFbnRy
eSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgYXV0byBjb2Rl
UmVmID0gSklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKHZtLCBzbG93UGF0aEZ1bmN0aW9u
KTsgLy8gTWF5IGFkZCB0byBtX2N0aVN0dWJNYXAuCisgICAgICAgIGJvb2wgbmVlZHNDcm9zc01v
ZGlmeWluZ0NvZGVGZW5jZSA9IGlzQ29tcGlsYXRpb25UaHJlYWQoKTsKKyAgICAgICAgRW50cnkg
ZW50cnkgeyBQYWNrZWRSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4oY29kZVJlZi5leGVj
dXRhYmxlTWVtb3J5KCkpLCBuZWVkc0Nyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlIH07CisgICAgICAg
IGFkZFJlc3VsdCA9IG1fY3RpU3R1Yk1hcC5hZGQoa2V5LCBFbnRyeSgpKTsgLy8gQ3JlYXRpbmcg
dGhlIGdlbmVyYXRvciBhYm92ZSBtYXkgYWRkIHRvIG1fY3RpU3R1Yk1hcCwgc28gd2UgbmVlZCB0
byByZWxvYWQgaXQuCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBlbnRyeTsK
ICAgICB9Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIEVudHJ5JiBl
bnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKGVudHJ5Lm5lZWRzQ3Jv
c3NNb2RpZnlpbmdDb2RlRmVuY2UgJiYgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSkgeworICAgICAg
ICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CisgICAgICAgIGVudHJ5Lm5lZWRzQ3Jv
c3NNb2RpZnlpbmdDb2RlRmVuY2UgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPihlbnRyeS5oYW5kbGUtPnN0YXJ0KCkucmV0
YWdnZWRQdHI8SklUVGh1bmtQdHJUYWc+KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0yNjUsNiArMjkwLDkgQEAgdm9pZCBKSVRUaHVua3M6OnByZWluaXRp
YWxpemVFeHRyYUNUSVRodQogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIFVOVVNFRF9QQVJBTSh2bSk7CisKKyAgICAvKiBPT1BTCiAgICAgLy8gVGhl
c2UgNCBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIGZpcnN0IGluIHRoZSBmb2xsb3dpbmcg
b3JkZXIgYmVjYXVzZQogICAgIC8vIHRoZSBvdGhlciB0aHVuayBnZW5lcmF0b3JzIHJlbHkgb24g
dGhlc2UgYWxyZWFkeSBiZWluZyBpbml0aWFsaXplZC4KICAgICBjdGlTdHViKHZtLCBoYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpOwpAQCAtMzgwLDYgKzQwOCw3IEBAIHZvaWQgSklUVGh1bmtzOjpw
cmVpbml0aWFsaXplRXh0cmFDVElUaHUKIAogICAgIGN0aVN0dWIodm0sIGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpOwogICAgIGN0aVN0dWIodm0sIGFyaXR5Rml4dXBHZW5lcmF0b3IpOworICAgICov
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkocmV2aXNpb24gMjc3ODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogI2luY2x1ZGUgPHR1cGxlPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFja2VkUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC02NCwxMSArNjYsMTEgQEAgcHVibGljOgogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0m
KTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFs
RnVuY3Rpb25Db25zdHJ1Y3QoVk0mKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY3RpU3R1YihWTSYsIFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRv
cik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlzdGluZ0NU
SVN0dWIoVGh1bmtHZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeVRhZyk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlTdHViKFZNJiwgVGh1bmtHZW5lcmF0
b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdD
VElTdHViKFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNz
YXJ5VGFnKTsKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKFZNJiwgU2xv
d1BhdGhGdW5jdGlvbik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24pOwogI2VuZGlm
CiAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNJiwgVGFnZ2VkTmF0
aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwpAQCAtNzgsNyArODAsMTEgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lk
IGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7CiAgICAgCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+PiBDVElTdHViTWFwOworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAg
IFBhY2tlZFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBoYW5kbGU7CisgICAgICAgIGJv
b2wgbmVlZHNDcm9zc01vZGlmeWluZ0NvZGVGZW5jZTsKKyAgICB9OworICAgIHVzaW5nIENUSVN0
dWJNYXAgPSBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBFbnRyeT47CiAgICAgQ1RJU3R1Yk1hcCBt
X2N0aVN0dWJNYXA7CiAKICAgICB1c2luZyBIb3N0RnVuY3Rpb25LZXkgPSBzdGQ6OnR1cGxlPFRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPjsKQEAgLTEx
OCw3ICsxMjQsMzcgQEAgcHJpdmF0ZToKIAogICAgIHVzaW5nIFdlYWtOYXRpdmVFeGVjdXRhYmxl
U2V0ID0gSGFzaFNldDxXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LCBXZWFrTmF0aXZlRXhlY3V0YWJs
ZUhhc2g+OwogICAgIFdlYWtOYXRpdmVFeGVjdXRhYmxlU2V0IG1fbmF0aXZlRXhlY3V0YWJsZVNl
dDsKLSAgICBMb2NrIG1fbG9jazsKKworICAgIHN0cnVjdCBSZWN1cnNpdmVMb2NrIHsKKyAgICAg
ICAgdm9pZCBsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG93bmVyVGhyZWFkICYm
IG93bmVyVGhyZWFkID09ICZXVEY6OlRocmVhZDo6Y3VycmVudCgpKSB7CisgICAgICAgICAgICAg
ICAgKytsb2NrQ291bnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtX2xvY2subG9jaygpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bG9ja0NvdW50ID09IDApOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW93bmVyVGhyZWFk
KTsKKyAgICAgICAgICAgICsrbG9ja0NvdW50OworICAgICAgICAgICAgb3duZXJUaHJlYWQgPSAm
V1RGOjpUaHJlYWQ6OmN1cnJlbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdW5sb2Nr
KCkKKyAgICAgICAgeworICAgICAgICAgICAgLS1sb2NrQ291bnQ7CisgICAgICAgICAgICBpZiAo
IWxvY2tDb3VudCkgeworICAgICAgICAgICAgICAgIG93bmVyVGhyZWFkID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICBtX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBXVEY6OlRocmVhZCogb3duZXJUaHJlYWQgeyBudWxscHRyIH07CisgICAgICAg
IExvY2sgbV9sb2NrOworICAgICAgICB1bnNpZ25lZCBsb2NrQ291bnQ7CisgICAgfTsKKworICAg
IFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
ODgsOSArMTE4OCw5IEBAIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAgICAgIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
LCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKIHsKLSAgICBjYWxsTGlua0luZm8u
c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdn
ZWQ8SlNFbnRyeVB0clRhZz4oKSk7CisgICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKGNvZGVSZWYudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKQEAgLTEyMDEsNyArMTIwMSw3IEBA
IHN0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiB2bSwgQ2FsbEwKIHN0YXRpYyB2b2lkIGxp
bmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2
aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0s
IGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2Fs
bExpbmtJbmZvLCB2aXJ0dWFsVGh1bmsuY29kZSgpKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xv
d1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodmlydHVhbFRodW5rLCB2bSkpOwog
fQogCkBAIC0xMjgxLDcgKzEyODEsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDCiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXN0YXRp
YyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQorc3RhdGlj
IHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAg
aWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVh
ckNvZGVCbG9jaygpOwpAQCAtMTI4OSw3ICsxMjg5LDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2Fs
bChWTSYgdm0sIENhbGxMaW5rSQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVE
aXJlY3RDYWxsKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xl
YXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxM
aW5rSW5mbywgY29kZVJlZik7CisgICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExp
bmtJbmZvLCBjb2RlUHRyKTsKIAogICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkp
CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKQEAgLTEz
MTksNyArMTMxOSw3IEBAIHN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEYK
ICAgICAgICAgIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxl
ckNvZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwogCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFs
VGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJ
bmZvLCB2aXJ0dWFsVGh1bmspOworICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmly
dHVhbFRodW5rLmNvZGUoKSk7CiAgICAgY2FsbExpbmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVK
SVRTdHViUm91dGluZTo6Y3JlYXRlKHZpcnR1YWxUaHVuaywgdm0pKTsKICAgICBjYWxsTGlua0lu
Zm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwogfQpAQCAtMTYxMyw3ICsxNjEzLDcgQEAgdm9pZCBs
aW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogCiAgICAgaWYgKCFkb25lLmVtcHR5
KCkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2Nh
dGlvbigpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3IpKSk7CiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpu
ZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9S
KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkocmV2
aXNpb24gMjc3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgSklUU2xvd1BhdGhDYWxs
OjpjYWxsKCkKICAgICBVTlVTRURfVkFSSUFCTEUobV9wYyk7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldFJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKICAgICBtX2ppdC0+
bW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0UmVn
KTsKLSAgICBtX2ppdC0+ZW1pdE5ha2VkTmVhckNhbGwodm0uaml0U3R1YnMtPmN0aVNsb3dQYXRo
RnVuY3Rpb25TdHViKHZtLCBtX3Nsb3dQYXRoRnVuY3Rpb24pLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgbV9qaXQtPmVtaXROYWtlZE5lYXJDYWxsKHZtLmppdFN0dWJzLT5jdGlTbG93
UGF0aEZ1bmN0aW9uU3R1Yih2bSwgbV9zbG93UGF0aEZ1bmN0aW9uKS5yZXRhZ2dlZDxOb1B0clRh
Zz4oKSk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUU2xv
d1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKFZNJiB2bSwgU2xvd1BhdGhGdW5jdGlvbiBzbG93UGF0
aEZ1bmN0aW9uKQpAQCAtODQsMTEgKzg0LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICNlbmRpZgogICAgIGppdC5yZXQoKTsKIAotICAgIGF1dG8gaGFuZGxl
ciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0Fu
ZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICBhdXRv
IGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0
aW9uKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9u
TGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2Vk
PE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiU2xvd1BhdGhDYWxsIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI3Nzg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsOSArOTAsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHBvCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7
CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMt
PmV4aXN0aW5nQ1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vz
c2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOwogICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZXIpOwotICAgIHBhdGNoQnVmZmVy
LmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaAogI2VuZGlmCiAKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIoaGFuZGxlckdlbmVy
YXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0u
Z2V0Q1RJU3R1YihoYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZDxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkNoZWNr
RXhjZXB0aW9uIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHJldmlzaW9uIDI3Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODE4LDcgKzgxOCw3IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRv
ciB0aHVua0dlbmVyYXRvckZvckkKICAgICB9CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gVk06OmdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBWTTo6Z2V0Q1RJU3R1YihUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKCp0
aGlzLCBnZW5lcmF0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAyNzc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDcgQEAgcHVibGljOgogICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRU
aHVua3M+IGppdFN0dWJzOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yKTsKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAjaWYgRU5BQkxFKEZUTF9KSVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429599</attachid>
            <date>2021-05-24 17:28:29 -0700</date>
            <delta_ts>2021-05-24 17:46:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>26167</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDIxLTA1LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZpbmFsaXplIERGRy9GVEwgY29kZSByZWZzIG9uIHRoZSBjb21waWxlciB0aHJlYWRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYwOTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBs
aW5rIHRhc2tzIHRoYXQgcmFuIHZpYSB0aGUgYWRkTGlua1Rhc2sgQVBJIHdlcmUgZ3VhcmFudGVl
ZCB0byBiZQorICAgICAgICBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLiBUaGlzIGlzIG5vIGxv
bmdlciB0aGUgY2FzZS4gTW9zdCBsaW5rIHRhc2tzIGFyZQorICAgICAgICBoYXBweSBydW5uaW5n
IG9uIGEgYmFja2dyb3VuZCB0aHJlYWQsIHNpbmNlIGFsbCB0aGV5J3JlIHJlYWxseSBkb2luZyBp
cworICAgICAgICBsaW5raW5nIGJyYW5jaGVzL2NhbGxzIG9yIGdyYWJiaW5nIGxhYmVscy4gSG93
ZXZlciwgYSBmZXcgdXNlcnMgb2YgYWRkTGlua1Rhc2sgd2VyZQorICAgICAgICByZWx5aW5nIG9u
IGl0IHJ1bm5pbmcgb24gdGhlIG1haW4gdGhyZWFkLiBGb3IgdGhvc2UgdXNlcnMsIHRoZXJlIGlz
IGEgbmV3CisgICAgICAgIGFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrIEFQSSwgd2hpY2gg
aXMgbm93IHVzZWQgaW5zdGVhZC4KKworICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOgorICAgICAgICAoSlND
OjpMaW5rQnVmZmVyOjpydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MpOgorICAgICAgICAq
IGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmNhbmNl
bCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25U
YXNrKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOgorICAgICAgICAqIGRmZy9ERkdGaW5hbGl6ZXIuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpGaW5hbGl6ZXI6OmNhbmNlbCk6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklU
RmluYWxpemVyOjpjYW5jZWwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6Zmlu
YWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNv
bW1vbik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5oOgorICAgICAg
ICAqIGRmZy9ERkdMYXp5SlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFs
dWU6OmVtaXQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjayk6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6Y2FuY2VsKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBm
dGwvRlRMSklURmluYWxpemVyLmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
OjpzY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCk6CisgICAgICAgICogZnRsL0ZUTFRodW5r
cy5oOgorICAgICAgICAoSlNDOjpGVEw6OlRodW5rczo6Z2V0U2xvd1BhdGhDYWxsVGh1bmspOgor
ICAgICAgICBBZGQgYSBsb2NrIHRvIEZUTFRodW5rcyBzaW5jZSB3ZSBub3cgbWF5IGJlIGNhbGxp
bmcgaW50byBpdCBmcm9tIG1vcmUgdGhhbgorICAgICAgICBvbmUgdGhyZWFkIGF0IGEgdGltZS4K
KworICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdFVubGlua2VkVmlydHVhbENhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorCiAyMDIxLTA1LTI0ICBSb2JpbiBNb3Jp
c3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBydW5uaW5nIHdpdGgg
LS1yZXBvcnRUb3RhbFBoYXNlVGltZXM9MSwgd2Ugc2hvdWxkIGFsc28gbG9nIHRoZSBtYXggdGlt
ZSBpbiBhIHBoYXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEy
IEBAIG5hbWVzcGFjZSBKU0Mgewogc2l6ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0
aXZlTGlua2VkU2l6ZXNbTGlua0J1ZmZlcjo6bnVtYmVyT2ZQcm9maWxlc107CiBzaXplX3QgTGlu
a0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRDb3VudHNbTGlua0J1ZmZlcjo6bnVt
YmVyT2ZQcm9maWxlc107CiAKK0xpbmtCdWZmZXI6On5MaW5rQnVmZmVyKCkKK3sKKyAgICBpZiAo
IWRpZEZhaWxUb0FsbG9jYXRlKCkpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbWFpblRocmVh
ZEZpbmFsaXphdGlvblRhc2tzLmlzRW1wdHkoKSk7Cit9CisKIGJvb2wgc2hvdWxkRHVtcERpc2Fz
c2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmIChjb2RlQmxvY2sgJiYg
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25z
OjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKQEAgLTQ4Nyw2ICs0OTMsMTMgQEAgdm9pZCBMaW5rQnVm
ZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCkKICAgICBNYWNyb0Fzc2VtYmxlcjo6Y2FjaGVGbHVz
aChjb2RlKCksIG1fc2l6ZSk7CiB9CiAKK3ZvaWQgTGlua0J1ZmZlcjo6cnVuTWFpblRocmVhZEZp
bmFsaXphdGlvblRhc2tzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX21haW5UaHJlYWRG
aW5hbGl6YXRpb25UYXNrcykKKyAgICAgICAgdGFzay0+cnVuKCk7CisgICAgbV9tYWluVGhyZWFk
RmluYWxpemF0aW9uVGFza3MuY2xlYXIoKTsKK30KKwogI2lmIERVTVBfTElOS19TVEFUSVNUSUNT
CiB2b2lkIExpbmtCdWZmZXI6OmR1bXBMaW5rU3RhdGlzdGljcyh2b2lkKiBjb2RlLCBzaXplX3Qg
aW5pdGlhbGl6ZVNpemUsIHNpemVfdCBmaW5hbFNpemUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjc3OTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MCw5ICsxNTAsMTEgQEAgcHVibGljOgogICAgICAgICBsaW5rQ29kZShtYWNyb0Fz
c2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKLSAgICB+TGlua0J1ZmZlcigpCi0gICAgewotICAg
IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB+TGlua0J1ZmZlcigpOworCisgICAgdm9pZCBjYW5j
ZWwoKSB7IG1fbWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzLmNsZWFyKCk7IH0KKworICAgIHZv
aWQgcnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAgICAgCiAgICAgYm9vbCBkaWRG
YWlsVG9BbGxvY2F0ZSgpIGNvbnN0CiAgICAgewpAQCAtMzQwLDYgKzM0MiwxMiBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2xlYXJQcm9maWxlU3RhdGlzdGlj
cygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlU3RhdGlz
dGljcyhPcHRpb25hbDxQcmludFN0cmVhbSo+ID0gV1RGOjpudWxsb3B0KTsKIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBhZGRNYWluVGhyZWFkRmluYWxpemF0aW9u
VGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9tYWluVGhyZWFk
RmluYWxpemF0aW9uVGFza3MuYXBwZW5kKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9y
KSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWY8TGlu
a0J1ZmZlclB0clRhZz4gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1wbCgpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gZmluYWxpemVDb2Rl
V2l0aERpc2Fzc2VtYmx5SW1wbChib29sIGR1bXBEaXNhc3NlbWJseSwgY29uc3QgY2hhciogZm9y
bWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDQpOwpAQCAtNDE5LDYgKzQyNyw3IEBA
IHByaXZhdGU6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+IG1f
Y29kZTsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4g
bV9saW5rVGFza3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZl
ciYpPj4+IG1fbGF0ZUxpbmtUYXNrczsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZCgpPj4+IG1fbWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzOwogCiAgICAgc3RhdGljIHNpemVf
dCBzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNpemVzW251bWJlck9mUHJvZmlsZXNdOwogICAg
IHN0YXRpYyBzaXplX3Qgc19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRDb3VudHNbbnVtYmVyT2ZQ
cm9maWxlc107CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFs
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWls
ZWRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDExICs0
OSw2IEBAIGJvb2wgRmFpbGVkRmluYWxpemVyOjpmaW5hbGl6ZSgpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFp
bGVkRmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGYWlsZWRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7CiAgICAg
Ym9vbCBmaW5hbGl6ZSgpIGZpbmFsOwotICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIGZpbmFs
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHNpemVfdCBjb2RlU2l6ZSgpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZmluYWxpemUoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGZpbmFs
aXplRnVuY3Rpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpIHsgfQogCiBwcm90
ZWN0ZWQ6CiAgICAgUGxhbiYgbV9wbGFuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZp
bmFsaXplci5oIgogI2luY2x1ZGUgIkRGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0zOTgsOCArMzk5LDExIEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGUoKQogCiAgICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIpOwogCi0gICAgbV9n
cmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8SklURmluYWxpemVyPigKLSAgICAg
ICAgbV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxp
bmtCdWZmZXIpKSk7CisgICAgYXV0byBjb2RlUmVmID0gRklOQUxJWkVfREZHX0NPREUoKmxpbmtC
dWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRhKCkp
OworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoY29kZVJlZiwgY29kZVJl
Zi5jb2RlKCkpOworCisgICAgYXV0byBmaW5hbGl6ZXIgPSBtYWtlVW5pcXVlPEpJVEZpbmFsaXpl
cj4obV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxp
bmtCdWZmZXIpKTsKKyAgICBtX2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIoV1RGTW92ZShmaW5h
bGl6ZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKQEAgLTUw
Miw4ICs1MDYsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxp
bmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CiAKLSAgICBt
X2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIobWFrZVVuaXF1ZTxKSVRGaW5hbGl6ZXI+KAotICAg
ICAgICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
bGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKSk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXpl
Q29kZVJlZkZvckRGRygKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKmxpbmtCdWZmZXIsIEpT
RW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRhKCkpLAorICAgICAg
ICB3aXRoQXJpdHlDaGVjayk7CisKKyAgICBhdXRvIGZpbmFsaXplciA9IG1ha2VVbmlxdWU8SklU
RmluYWxpemVyPihtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdU
Rk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsKKyAgICBtX2dyYXBoLm1fcGxhbi5z
ZXRGaW5hbGl6ZXIoV1RGTW92ZShmaW5hbGl6ZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6
ZGlzYXNzZW1ibGUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgSklURmluYWxpemVyOjp+SklURmluYWxpemVyKCkKIHsK
IH0KIAordm9pZCBKSVRGaW5hbGl6ZXI6OmNhbmNlbCgpCit7CisgICAgbV9saW5rQnVmZmVyLT5j
YW5jZWwoKTsKK30KKwogc2l6ZV90IEpJVEZpbmFsaXplcjo6Y29kZVNpemUoKQogewogICAgIHJl
dHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKQEAgLTU1LDQ2ICs2MCwzMSBAQCBzaXplX3QgSklU
RmluYWxpemVyOjpjb2RlU2l6ZSgpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBGSU5B
TElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2Rl
IGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2Nr
KCksIEpJVFR5cGU6OkRGR0pJVCkpLmRhdGEoKSk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXpl
Q29kZVJlZkZvckRGRyhjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSk7Ci0KLSAgICBtX3BsYW4uY29k
ZUJsb2NrKCktPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7Ci0KLSAgICBmaW5hbGl6
ZUNvbW1vbigpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIFZNJiB2bSA9ICptX3Bs
YW4udm0oKTsKIAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQotewotICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKLSAgICBt
X2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKAotICAgICAgICBGSU5BTElaRV9ERkdf
Q09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIs
IHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVFR5
cGU6OkRGR0pJVCkpLmRhdGEoKSksCi0gICAgICAgIG1fd2l0aEFyaXR5Q2hlY2spOwotICAgIG1f
cGxhbi5jb2RlQmxvY2soKS0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKKyAgICBX
VEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAKLSAgICBmaW5hbGl6ZUNvbW1vbigpOwot
ICAgIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVh
ZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLXZvaWQgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1v
bigpCi17CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3BsYW4uY29kZUJsb2NrKCk7CiAK
KyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CisKICNpZiBF
TkFCTEUoRlRMX0pJVCkKICAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJs
b2NrKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGlmIChVTkxJS0VMWShtX3Bs
YW4uY29tcGlsYXRpb24oKSkpCi0gICAgICAgIG1fcGxhbi52bSgpLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxhdGlvbigpKTsK
KyAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihjb2RlQmxv
Y2ssICptX3BsYW4uY29tcGlsYXRpb24oKSk7CiAKICAgICBpZiAoIW1fcGxhbi53aWxsVHJ5VG9U
aWVyVXAoKSkKICAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWls
RlRMQ29tcGlsYXRpb24gPSB0cnVlOwogCiAgICAgLy8gVGhlIGNvZGVCbG9jayBpcyBub3cgcmVz
cG9uc2libGUgZm9yIGtlZXBpbmcgbWFueSB0aGluZ3MgYWxpdmUgKGUuZy4gZnJvemVuIHZhbHVl
cykKICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBrZXB0IGFsaXZlIGJ5IHRoZSBwbGFuLgot
ICAgIG1fcGxhbi52bSgpLT5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5oCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7CiAgICAgYm9v
bCBmaW5hbGl6ZSgpIGZpbmFsOwotICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIGZpbmFsOwor
ICAgIHZvaWQgY2FuY2VsKCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBmaW5hbGl6ZUNv
bW1vbigpOwogICAgIAogICAgIFJlZjxKSVRDb2RlPiBtX2ppdENvZGU7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPExpbmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQ5LDggKzI0OSw5IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBq
aXQKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwogICAgIAot
ICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgW2NvZGVCbG9jaywgbGFiZWwsIHRoaXNWYWx1
ZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGF1dG8gcGF0Y2hMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKSVRDb21waWxhdGlvblB0clRhZz4obGFiZWwpOworICAgICAg
ICBsaW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9XSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZShjb2RlQmxvY2stPnZt
KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVhbFZhbHVlLmlzQ2VsbCgpKTsKIApA
QCAtMjU5LDggKzI2MCw5IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBq
aXQKICAgICAgICAgICAgIGlmICh0aGlzVmFsdWUubV9raW5kID09IE5ld1N0cmluZ0ltcGwpCiAg
ICAgICAgICAgICAgICAgdGhpc1ZhbHVlLnUuc3RyaW5nSW1wbC0+ZGVyZWYoKTsKIAotICAgICAg
ICAgICAgbGlua0J1ZmZlci5wYXRjaChsYWJlbCwgcmVhbFZhbHVlLmFzQ2VsbCgpKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXRjaExvY2F0aW9uLCByZWFs
VmFsdWUuYXNDZWxsKCkpOwogICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogdm9pZCBMYXp5SlNW
YWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjA1LDE2ICs2MDUsMTIgQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6
ZmluYWxpemVXaXRob3V0TgogCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gWyZdIHsK
ICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoKSB8fCAhaXNTdGlsbFZhbGlk
KCkpIHsKKyAgICAgICAgICAgIG1fZmluYWxpemVyLT5jYW5jZWwoKTsKICAgICAgICAgICAgIENP
REVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdGaW5hbGl6ZSIsICgiaW52YWxpZGF0
ZWQiKSk7CiAgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKICAgICAg
ICAgfQogCi0gICAgICAgIGJvb2wgcmVzdWx0OwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICAgICAgcmVzdWx0ID0gbV9maW5hbGl6
ZXItPmZpbmFsaXplRnVuY3Rpb24oKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0
ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplKCk7Ci0KKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX2Zp
bmFsaXplci0+ZmluYWxpemUoKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdGaW5hbGl6ZSIsICgiZmFpbGVk
IikpOwogICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtNzUyLDYgKzc0
OCw4IEBAIHZvaWQgUGxhbjo6Y2FuY2VsKCkKICAgICBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICBtX211c3RIYW5kbGVWYWx1ZXMuY2xlYXIoKTsKICAgICBtX2NvbXBpbGF0
aW9uID0gbnVsbHB0cjsKKyAgICBpZiAobV9maW5hbGl6ZXIpCisgICAgICAgIG1fZmluYWxpemVy
LT5jYW5jZWwoKTsKICAgICBtX2ZpbmFsaXplciA9IG51bGxwdHI7CiAgICAgbV9pbmxpbmVDYWxs
RnJhbWVzID0gbnVsbHB0cjsKICAgICBtX3dhdGNocG9pbnRzID0gRGVzaXJlZFdhdGNocG9pbnRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
Y3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJQcm9maWxlckRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNTksNDMgKzYwLDMxIEBAIHNpemVfdCBKSVRGaW5hbGl6
ZXI6OmNvZGVTaXplKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBy
ZXR1cm4gZmluYWxpemVDb21tb24oKTsKLX0KKyAgICBWTSYgdm0gPSAqbV9wbGFuLnZtKCk7Cisg
ICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogCi1ib29sIEpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIGZpbmFsaXplQ29tbW9uKCk7Ci19Cisg
ICAgYjNDb2RlTGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAK
LWJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCi17CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX3BsYW4uY29kZUJsb2NrKCk7Ci0gICAgYm9vbCBkdW1wRGlzYXNzZW1ibHkg
PSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCk7
Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYjNDb2RlUmVmID0K
LSAgICAgICAgRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVm
ZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAgICAgIkZUTCBCMyBjb2RlIGZvciAlcyIsIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJVFR5cGU6OkZUTEpJVCkp
LmRhdGEoKSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJp
dHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZlcgotICAgICAgICA/IEZJTkFMSVpF
X0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIEpTRW50cnlQ
dHJUYWcsCi0gICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMg
Z2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29k
ZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKQotICAgICAgICA6IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKGIzQ29kZVJlZi5jb2RlKCkpOwotCi0gICAgaml0Q29kZS0+aW5pdGlhbGl6ZUIzQ29kZShi
M0NvZGVSZWYpOwotICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChh
cml0eUNoZWNrQ29kZVJlZik7CiAKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoKmppdENvZGUp
OwogCiAgICAgaWYgKFVOTElLRUxZKG1fcGxhbi5jb21waWxhdGlvbigpKSkKLSAgICAgICAgbV9w
bGFuLnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24oY29kZUJsb2Nr
LCAqbV9wbGFuLmNvbXBpbGF0aW9uKCkpOworICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxhdGlvbigpKTsKIAog
ICAgIC8vIFRoZSBjb2RlQmxvY2sgaXMgbm93IHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIG1hbnkg
dGhpbmdzIGFsaXZlIChlLmcuIGZyb3plbiB2YWx1ZXMpCiAgICAgLy8gdGhhdCB3ZXJlIHByZXZp
b3VzbHkga2VwdCBhbGl2ZSBieSB0aGUgcGxhbi4KLSAgICBtX3BsYW4udm0oKS0+aGVhcC53cml0
ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2sp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSklURmluYWxpemVyOjpjYW5jZWwoKQor
eworICAgIGlmIChiM0NvZGVMaW5rQnVmZmVyKQorICAgICAgICBiM0NvZGVMaW5rQnVmZmVyLT5j
YW5jZWwoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFs
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmgJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEyICs1MiwxMCBAQCBwdWJs
aWM6CiAgICAgSklURmluYWxpemVyKERGRzo6UGxhbiYpOwogICAgIH5KSVRGaW5hbGl6ZXIoKSBm
aW5hbDsKIAorICAgIHZvaWQgY2FuY2VsKCkgZmluYWw7CiAgICAgc2l6ZV90IGNvZGVTaXplKCkg
ZmluYWw7CiAgICAgYm9vbCBmaW5hbGl6ZSgpIGZpbmFsOwotICAgIGJvb2wgZmluYWxpemVGdW5j
dGlvbigpIGZpbmFsOwogICAgIAotICAgIGJvb2wgZmluYWxpemVDb21tb24oKTsKLQogICAgIHN0
ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBiM0NvZGVMaW5rQnVmZmVyOwogCiAgICAgLy8gRXZl
bnR1YWxseSwgd2UgY2FuIGdldCByaWQgb2YgdGhpcyB3aXRoIEIzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2
LDIzIEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHsKKyAgICAgICAgYm9v
bCBkdW1wRGlzYXNzZW1ibHkgPSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjph
c3luY0Rpc2Fzc2VtYmx5KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGIzQ29kZVJlZiA9CisgICAgICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBE
aXNhc3NlbWJseSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0
clRhZywKKyAgICAgICAgICAgICAgICAiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVj
a0NvZGVSZWYgPSBsaW5rQnVmZmVyCisgICAgICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVt
cERpc2Fzc2VtYmx5LCAqbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKKyAgICAgICAgICAgICAg
ICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQg
JXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpG
VExKSVQpKS5kYXRhKCksIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKQorICAgICAgICAgICAgOiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKKworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFs
aXplQjNDb2RlKGIzQ29kZVJlZik7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVB
cml0eUNoZWNrRW50cnlwb2ludChhcml0eUNoZWNrQ29kZVJlZik7CisgICAgfQorCiAgICAgCiAg
ICAgc3RhdGUuZmluYWxpemVyLT5lbnRyeXBvaW50TGlua0J1ZmZlciA9IFdURk1vdmUobGlua0J1
ZmZlcik7CiAgICAgc3RhdGUuZmluYWxpemVyLT5mdW5jdGlvbiA9IHN0YXRlLmdlbmVyYXRlZEZ1
bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTUgQEAgdm9pZCBQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlOjpzY2hlZHVsZQogICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKICAgICAgICAgW2hh
bmRsZSwgaGFuZGxlciwgY2FsbFNpdGVJbmRleF0gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3SGFuZGxlciA9
IGhhbmRsZXI7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0
ZUluZGV4LmJpdHMoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxs
U2l0ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0
aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiho
YW5kbGUtPmxhYmVsKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyBuZXdIYW5kbGVy
ID0gaGFuZGxlcjsKKyAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLnN0YXJ0ID0gY2FsbFNpdGVJ
bmRleC5iaXRzKCk7CisgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxsU2l0ZUlu
ZGV4LmJpdHMoKSArIDE7CisgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGhhbmRsZS0+bGFi
ZWwpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlv
blRhc2soWz1dIHsKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRp
b25IYW5kbGVyKG5ld0hhbmRsZXIpOwogICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1
bmtzLmgJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIFRo
dW5rcygpID0gZGVmYXVsdDsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGdldFNsb3dQYXRoQ2FsbFRodW5rKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBr
ZXkpCiAgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CiAgICAgICAgIHJl
dHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KHZtLCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBz
bG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgfQogCkBAIC05MCw2ICs5MSw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOwogICAgIFRodW5r
TWFwPFNsb3dQYXRoQ2FsbEtleT4gbV9zbG93UGF0aENhbGxUaHVua3M7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MywyMiArNjQzLDE5IEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKICNlbmRpZgogfQogCi1Bc3NlbWJseUhlbHBlcnM6OkNh
bGwgQXNzZW1ibHlIZWxwZXJzOjplbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJ
bmZvOjpyZWdUMyk7Ci0gICAgcmV0dXJuIG5lYXJDYWxsKCk7Ci19Ci0KLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCi17Ci0gICAgQ2FsbCBjYWxsID0gZW1pdFVubGlua2Vk
VmlydHVhbENhbGwoZ2xvYmFsT2JqZWN0LCBpbmZvKTsKLSAgICBhZGRMaW5rVGFzaygKLSAgICAg
ICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICBDYWxsIGNhbGwgPSBu
ZWFyQ2FsbCgpOworICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOworICAgICAgICBsaW5rQnVmZmVy
LmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9LCAmdm1dICgpIHsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5r
ID0gdmlydHVhbFRodW5rRm9yKHZtLCAqaW5mbyk7CiAgICAgICAgICAgICBpbmZvLT5zZXRTbG93
U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1bmssIHZtKSk7Ci0g
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAgICB9
KTsKKyAgICB9KTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4MjgsNyArMTgyOCw2IEBAIHB1YmxpYzoKICAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBl
OjpVbmRlZmluZWQsIHRydWUpOwogICAgIH0KICAgICAKLSAgICBDYWxsIGVtaXRVbmxpbmtlZFZp
cnR1YWxDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CiAgICAgdm9pZCBlbWl0
VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOwogICAgIAog
ICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4OSwxNCArOTg5LDcgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogICAgIGlmICghbV9qaXRDb2RlKQogICAg
ICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAKLSAgICBmb3IgKGF1dG8gcGFpciA6IG1f
dmlydHVhbENhbGxzKSB7Ci0gICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbV9saW5rQnVmZmVy
LT5sb2NhdGlvbk9mTmVhckNhbGw8SklUVGh1bmtQdHJUYWc+KHBhaXIuZmlyc3QpOwotCi0gICAg
ICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IHBhaXIuc2Vjb25kOwotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxU
aHVua0ZvcigqbV92bSwgaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGUodmlydHVhbFRodW5rLCAqbV92bSkpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKLSAgICB9Cisg
ICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAogICAg
IHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc3OTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1Myw4ICsx
MDUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4OwogCiAgICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2pp
dENvZGU7Ci0KLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBDYWxsTGlua0luZm8mPj4g
bV92aXJ0dWFsQ2FsbHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyNzc5NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVv
ZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwg
cmVnVDApOwotICAgIG1fdmlydHVhbENhbGxzLmFwcGVuZChzdGQ6OnBhaXI8Q2FsbCwgQ2FsbExp
bmtJbmZvJj4geyBlbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pLCAqaW5mbyB9KTsKKyAgICBlbWl0VmlydHVhbENhbGwobV92bSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rl
ck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgbV92
aXJ0dWFsQ2FsbHMuYXBwZW5kKHN0ZDo6cGFpcjxDYWxsLCBDYWxsTGlua0luZm8mPiB7IGVtaXRV
bmxpbmtlZFZpcnR1YWxDYWxsKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyksICpp
bmZvIH0pOworICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCg==
</data>
<flag name="commit-queue"
          id="450825"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429602</attachid>
            <date>2021-05-24 17:46:09 -0700</date>
            <delta_ts>2021-05-25 11:15:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>26168</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDIxLTA1LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZpbmFsaXplIERGRy9GVEwgY29kZSByZWZzIG9uIHRoZSBjb21waWxlciB0aHJlYWRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYwOTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBs
aW5rIHRhc2tzIHRoYXQgcmFuIHZpYSB0aGUgYWRkTGlua1Rhc2sgQVBJIHdlcmUgZ3VhcmFudGVl
ZCB0byBiZQorICAgICAgICBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLiBUaGlzIGlzIG5vIGxv
bmdlciB0aGUgY2FzZS4gTW9zdCBsaW5rIHRhc2tzIGFyZQorICAgICAgICBoYXBweSBydW5uaW5n
IG9uIGEgYmFja2dyb3VuZCB0aHJlYWQsIHNpbmNlIGFsbCB0aGV5J3JlIHJlYWxseSBkb2luZyBp
cworICAgICAgICBsaW5raW5nIGJyYW5jaGVzL2NhbGxzIG9yIGdyYWJiaW5nIGxhYmVscy4gSG93
ZXZlciwgYSBmZXcgdXNlcnMgb2YgYWRkTGlua1Rhc2sgd2VyZQorICAgICAgICByZWx5aW5nIG9u
IGl0IHJ1bm5pbmcgb24gdGhlIG1haW4gdGhyZWFkLiBGb3IgdGhvc2UgdXNlcnMsIHRoZXJlIGlz
IGEgbmV3CisgICAgICAgIGFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrIEFQSSwgd2hpY2gg
aXMgbm93IHVzZWQgaW5zdGVhZC4KKworICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOgorICAgICAgICAoSlND
OjpMaW5rQnVmZmVyOjpydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MpOgorICAgICAgICAq
IGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmNhbmNl
bCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25U
YXNrKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOgorICAgICAgICAqIGRmZy9ERkdGaW5hbGl6ZXIuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpGaW5hbGl6ZXI6OmNhbmNlbCk6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklU
RmluYWxpemVyOjpjYW5jZWwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6Zmlu
YWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNv
bW1vbik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5oOgorICAgICAg
ICAqIGRmZy9ERkdMYXp5SlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFs
dWU6OmVtaXQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjayk6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6Y2FuY2VsKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBm
dGwvRlRMSklURmluYWxpemVyLmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
OjpzY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCk6CisgICAgICAgICogZnRsL0ZUTFRodW5r
cy5oOgorICAgICAgICAoSlNDOjpGVEw6OlRodW5rczo6Z2V0U2xvd1BhdGhDYWxsVGh1bmspOgor
ICAgICAgICBBZGQgYSBsb2NrIHRvIEZUTFRodW5rcyBzaW5jZSB3ZSBub3cgbWF5IGJlIGNhbGxp
bmcgaW50byBpdCBmcm9tIG1vcmUgdGhhbgorICAgICAgICBvbmUgdGhyZWFkIGF0IGEgdGltZS4K
KworICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdFVubGlua2VkVmlydHVhbENhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorCiAyMDIxLTA1LTI0ICBSb2JpbiBNb3Jp
c3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBydW5uaW5nIHdpdGgg
LS1yZXBvcnRUb3RhbFBoYXNlVGltZXM9MSwgd2Ugc2hvdWxkIGFsc28gbG9nIHRoZSBtYXggdGlt
ZSBpbiBhIHBoYXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEy
IEBAIG5hbWVzcGFjZSBKU0Mgewogc2l6ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0
aXZlTGlua2VkU2l6ZXNbTGlua0J1ZmZlcjo6bnVtYmVyT2ZQcm9maWxlc107CiBzaXplX3QgTGlu
a0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRDb3VudHNbTGlua0J1ZmZlcjo6bnVt
YmVyT2ZQcm9maWxlc107CiAKK0xpbmtCdWZmZXI6On5MaW5rQnVmZmVyKCkKK3sKKyAgICBpZiAo
IWRpZEZhaWxUb0FsbG9jYXRlKCkpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbWFpblRocmVh
ZEZpbmFsaXphdGlvblRhc2tzLmlzRW1wdHkoKSk7Cit9CisKIGJvb2wgc2hvdWxkRHVtcERpc2Fz
c2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmIChjb2RlQmxvY2sgJiYg
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25z
OjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKQEAgLTQ4Nyw2ICs0OTMsMTMgQEAgdm9pZCBMaW5rQnVm
ZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCkKICAgICBNYWNyb0Fzc2VtYmxlcjo6Y2FjaGVGbHVz
aChjb2RlKCksIG1fc2l6ZSk7CiB9CiAKK3ZvaWQgTGlua0J1ZmZlcjo6cnVuTWFpblRocmVhZEZp
bmFsaXphdGlvblRhc2tzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX21haW5UaHJlYWRG
aW5hbGl6YXRpb25UYXNrcykKKyAgICAgICAgdGFzay0+cnVuKCk7CisgICAgbV9tYWluVGhyZWFk
RmluYWxpemF0aW9uVGFza3MuY2xlYXIoKTsKK30KKwogI2lmIERVTVBfTElOS19TVEFUSVNUSUNT
CiB2b2lkIExpbmtCdWZmZXI6OmR1bXBMaW5rU3RhdGlzdGljcyh2b2lkKiBjb2RlLCBzaXplX3Qg
aW5pdGlhbGl6ZVNpemUsIHNpemVfdCBmaW5hbFNpemUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjc3OTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MCw5ICsxNTAsMTEgQEAgcHVibGljOgogICAgICAgICBsaW5rQ29kZShtYWNyb0Fz
c2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKLSAgICB+TGlua0J1ZmZlcigpCi0gICAgewotICAg
IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB+TGlua0J1ZmZlcigpOworCisgICAgdm9pZCBjYW5j
ZWwoKSB7IG1fbWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzLmNsZWFyKCk7IH0KKworICAgIHZv
aWQgcnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAgICAgCiAgICAgYm9vbCBkaWRG
YWlsVG9BbGxvY2F0ZSgpIGNvbnN0CiAgICAgewpAQCAtMzQwLDYgKzM0MiwxMiBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2xlYXJQcm9maWxlU3RhdGlzdGlj
cygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlU3RhdGlz
dGljcyhPcHRpb25hbDxQcmludFN0cmVhbSo+ID0gV1RGOjpudWxsb3B0KTsKIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBhZGRNYWluVGhyZWFkRmluYWxpemF0aW9u
VGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9tYWluVGhyZWFk
RmluYWxpemF0aW9uVGFza3MuYXBwZW5kKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9y
KSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWY8TGlu
a0J1ZmZlclB0clRhZz4gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1wbCgpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gZmluYWxpemVDb2Rl
V2l0aERpc2Fzc2VtYmx5SW1wbChib29sIGR1bXBEaXNhc3NlbWJseSwgY29uc3QgY2hhciogZm9y
bWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDQpOwpAQCAtNDE5LDYgKzQyNyw3IEBA
IHByaXZhdGU6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+IG1f
Y29kZTsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4g
bV9saW5rVGFza3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZl
ciYpPj4+IG1fbGF0ZUxpbmtUYXNrczsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZCgpPj4+IG1fbWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzOwogCiAgICAgc3RhdGljIHNpemVf
dCBzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNpemVzW251bWJlck9mUHJvZmlsZXNdOwogICAg
IHN0YXRpYyBzaXplX3Qgc19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRDb3VudHNbbnVtYmVyT2ZQ
cm9maWxlc107CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFs
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWls
ZWRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDExICs0
OSw2IEBAIGJvb2wgRmFpbGVkRmluYWxpemVyOjpmaW5hbGl6ZSgpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFp
bGVkRmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGYWlsZWRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7CiAgICAg
Ym9vbCBmaW5hbGl6ZSgpIGZpbmFsOwotICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIGZpbmFs
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHNpemVfdCBjb2RlU2l6ZSgpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZmluYWxpemUoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGZpbmFs
aXplRnVuY3Rpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpIHsgfQogCiBwcm90
ZWN0ZWQ6CiAgICAgUGxhbiYgbV9wbGFuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZp
bmFsaXplci5oIgogI2luY2x1ZGUgIkRGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0zOTgsOCArMzk5LDExIEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGUoKQogCiAgICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIpOwogCi0gICAgbV9n
cmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8SklURmluYWxpemVyPigKLSAgICAg
ICAgbV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxp
bmtCdWZmZXIpKSk7CisgICAgYXV0byBjb2RlUmVmID0gRklOQUxJWkVfREZHX0NPREUoKmxpbmtC
dWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRhKCkp
OworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoY29kZVJlZiwgY29kZVJl
Zi5jb2RlKCkpOworCisgICAgYXV0byBmaW5hbGl6ZXIgPSBtYWtlVW5pcXVlPEpJVEZpbmFsaXpl
cj4obV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxp
bmtCdWZmZXIpKTsKKyAgICBtX2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIoV1RGTW92ZShmaW5h
bGl6ZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKQEAgLTUw
Miw4ICs1MDYsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxp
bmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CiAKLSAgICBt
X2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIobWFrZVVuaXF1ZTxKSVRGaW5hbGl6ZXI+KAotICAg
ICAgICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
bGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKSk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXpl
Q29kZVJlZkZvckRGRygKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKmxpbmtCdWZmZXIsIEpT
RW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRhKCkpLAorICAgICAg
ICB3aXRoQXJpdHlDaGVjayk7CisKKyAgICBhdXRvIGZpbmFsaXplciA9IG1ha2VVbmlxdWU8SklU
RmluYWxpemVyPihtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdU
Rk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsKKyAgICBtX2dyYXBoLm1fcGxhbi5z
ZXRGaW5hbGl6ZXIoV1RGTW92ZShmaW5hbGl6ZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6
ZGlzYXNzZW1ibGUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgSklURmluYWxpemVyOjp+SklURmluYWxpemVyKCkKIHsK
IH0KIAordm9pZCBKSVRGaW5hbGl6ZXI6OmNhbmNlbCgpCit7CisgICAgbV9saW5rQnVmZmVyLT5j
YW5jZWwoKTsKK30KKwogc2l6ZV90IEpJVEZpbmFsaXplcjo6Y29kZVNpemUoKQogewogICAgIHJl
dHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKQEAgLTU1LDQ2ICs2MCwzMSBAQCBzaXplX3QgSklU
RmluYWxpemVyOjpjb2RlU2l6ZSgpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBGSU5B
TElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2Rl
IGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2Nr
KCksIEpJVFR5cGU6OkRGR0pJVCkpLmRhdGEoKSk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXpl
Q29kZVJlZkZvckRGRyhjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSk7Ci0KLSAgICBtX3BsYW4uY29k
ZUJsb2NrKCktPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7Ci0KLSAgICBmaW5hbGl6
ZUNvbW1vbigpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIFZNJiB2bSA9ICptX3Bs
YW4udm0oKTsKIAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQotewotICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKLSAgICBt
X2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKAotICAgICAgICBGSU5BTElaRV9ERkdf
Q09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIs
IHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVFR5
cGU6OkRGR0pJVCkpLmRhdGEoKSksCi0gICAgICAgIG1fd2l0aEFyaXR5Q2hlY2spOwotICAgIG1f
cGxhbi5jb2RlQmxvY2soKS0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKKyAgICBX
VEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAKLSAgICBmaW5hbGl6ZUNvbW1vbigpOwot
ICAgIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVh
ZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLXZvaWQgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1v
bigpCi17CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3BsYW4uY29kZUJsb2NrKCk7CiAK
KyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CisKICNpZiBF
TkFCTEUoRlRMX0pJVCkKICAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJs
b2NrKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGlmIChVTkxJS0VMWShtX3Bs
YW4uY29tcGlsYXRpb24oKSkpCi0gICAgICAgIG1fcGxhbi52bSgpLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxhdGlvbigpKTsK
KyAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihjb2RlQmxv
Y2ssICptX3BsYW4uY29tcGlsYXRpb24oKSk7CiAKICAgICBpZiAoIW1fcGxhbi53aWxsVHJ5VG9U
aWVyVXAoKSkKICAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWls
RlRMQ29tcGlsYXRpb24gPSB0cnVlOwogCiAgICAgLy8gVGhlIGNvZGVCbG9jayBpcyBub3cgcmVz
cG9uc2libGUgZm9yIGtlZXBpbmcgbWFueSB0aGluZ3MgYWxpdmUgKGUuZy4gZnJvemVuIHZhbHVl
cykKICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBrZXB0IGFsaXZlIGJ5IHRoZSBwbGFuLgot
ICAgIG1fcGxhbi52bSgpLT5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5oCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGNvZGVTaXplKCkgZmluYWw7CiAgICAgYm9v
bCBmaW5hbGl6ZSgpIGZpbmFsOwotICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIGZpbmFsOwor
ICAgIHZvaWQgY2FuY2VsKCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBmaW5hbGl6ZUNv
bW1vbigpOwogICAgIAogICAgIFJlZjxKSVRDb2RlPiBtX2ppdENvZGU7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPExpbmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQ5LDggKzI0OSw5IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBq
aXQKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwogICAgIAot
ICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgW2NvZGVCbG9jaywgbGFiZWwsIHRoaXNWYWx1
ZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGF1dG8gcGF0Y2hMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKSVRDb21waWxhdGlvblB0clRhZz4obGFiZWwpOworICAgICAg
ICBsaW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9XSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZShjb2RlQmxvY2stPnZt
KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVhbFZhbHVlLmlzQ2VsbCgpKTsKIApA
QCAtMjU5LDggKzI2MCw5IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBq
aXQKICAgICAgICAgICAgIGlmICh0aGlzVmFsdWUubV9raW5kID09IE5ld1N0cmluZ0ltcGwpCiAg
ICAgICAgICAgICAgICAgdGhpc1ZhbHVlLnUuc3RyaW5nSW1wbC0+ZGVyZWYoKTsKIAotICAgICAg
ICAgICAgbGlua0J1ZmZlci5wYXRjaChsYWJlbCwgcmVhbFZhbHVlLmFzQ2VsbCgpKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXRjaExvY2F0aW9uLCByZWFs
VmFsdWUuYXNDZWxsKCkpOwogICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogdm9pZCBMYXp5SlNW
YWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjA1LDE2ICs2MDUsMTIgQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6
ZmluYWxpemVXaXRob3V0TgogCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gWyZdIHsK
ICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoKSB8fCAhaXNTdGlsbFZhbGlk
KCkpIHsKKyAgICAgICAgICAgIG1fZmluYWxpemVyLT5jYW5jZWwoKTsKICAgICAgICAgICAgIENP
REVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdGaW5hbGl6ZSIsICgiaW52YWxpZGF0
ZWQiKSk7CiAgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKICAgICAg
ICAgfQogCi0gICAgICAgIGJvb2wgcmVzdWx0OwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICAgICAgcmVzdWx0ID0gbV9maW5hbGl6
ZXItPmZpbmFsaXplRnVuY3Rpb24oKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0
ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplKCk7Ci0KKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX2Zp
bmFsaXplci0+ZmluYWxpemUoKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdGaW5hbGl6ZSIsICgiZmFpbGVk
IikpOwogICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtNzUyLDYgKzc0
OCw4IEBAIHZvaWQgUGxhbjo6Y2FuY2VsKCkKICAgICBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICBtX211c3RIYW5kbGVWYWx1ZXMuY2xlYXIoKTsKICAgICBtX2NvbXBpbGF0
aW9uID0gbnVsbHB0cjsKKyAgICBpZiAobV9maW5hbGl6ZXIpCisgICAgICAgIG1fZmluYWxpemVy
LT5jYW5jZWwoKTsKICAgICBtX2ZpbmFsaXplciA9IG51bGxwdHI7CiAgICAgbV9pbmxpbmVDYWxs
RnJhbWVzID0gbnVsbHB0cjsKICAgICBtX3dhdGNocG9pbnRzID0gRGVzaXJlZFdhdGNocG9pbnRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
Y3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJQcm9maWxlckRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNTksNDMgKzYwLDMxIEBAIHNpemVfdCBKSVRGaW5hbGl6
ZXI6OmNvZGVTaXplKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBy
ZXR1cm4gZmluYWxpemVDb21tb24oKTsKLX0KKyAgICBWTSYgdm0gPSAqbV9wbGFuLnZtKCk7Cisg
ICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogCi1ib29sIEpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIGZpbmFsaXplQ29tbW9uKCk7Ci19Cisg
ICAgYjNDb2RlTGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAK
LWJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCi17CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX3BsYW4uY29kZUJsb2NrKCk7Ci0gICAgYm9vbCBkdW1wRGlzYXNzZW1ibHkg
PSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCk7
Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYjNDb2RlUmVmID0K
LSAgICAgICAgRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVm
ZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAgICAgIkZUTCBCMyBjb2RlIGZvciAlcyIsIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJVFR5cGU6OkZUTEpJVCkp
LmRhdGEoKSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJp
dHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZlcgotICAgICAgICA/IEZJTkFMSVpF
X0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIEpTRW50cnlQ
dHJUYWcsCi0gICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMg
Z2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29k
ZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKQotICAgICAgICA6IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKGIzQ29kZVJlZi5jb2RlKCkpOwotCi0gICAgaml0Q29kZS0+aW5pdGlhbGl6ZUIzQ29kZShi
M0NvZGVSZWYpOwotICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChh
cml0eUNoZWNrQ29kZVJlZik7CiAKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoKmppdENvZGUp
OwogCiAgICAgaWYgKFVOTElLRUxZKG1fcGxhbi5jb21waWxhdGlvbigpKSkKLSAgICAgICAgbV9w
bGFuLnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24oY29kZUJsb2Nr
LCAqbV9wbGFuLmNvbXBpbGF0aW9uKCkpOworICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxhdGlvbigpKTsKIAog
ICAgIC8vIFRoZSBjb2RlQmxvY2sgaXMgbm93IHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIG1hbnkg
dGhpbmdzIGFsaXZlIChlLmcuIGZyb3plbiB2YWx1ZXMpCiAgICAgLy8gdGhhdCB3ZXJlIHByZXZp
b3VzbHkga2VwdCBhbGl2ZSBieSB0aGUgcGxhbi4KLSAgICBtX3BsYW4udm0oKS0+aGVhcC53cml0
ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2sp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSklURmluYWxpemVyOjpjYW5jZWwoKQor
eworICAgIGlmIChiM0NvZGVMaW5rQnVmZmVyKQorICAgICAgICBiM0NvZGVMaW5rQnVmZmVyLT5j
YW5jZWwoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFs
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmgJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEyICs1MiwxMCBAQCBwdWJs
aWM6CiAgICAgSklURmluYWxpemVyKERGRzo6UGxhbiYpOwogICAgIH5KSVRGaW5hbGl6ZXIoKSBm
aW5hbDsKIAorICAgIHZvaWQgY2FuY2VsKCkgZmluYWw7CiAgICAgc2l6ZV90IGNvZGVTaXplKCkg
ZmluYWw7CiAgICAgYm9vbCBmaW5hbGl6ZSgpIGZpbmFsOwotICAgIGJvb2wgZmluYWxpemVGdW5j
dGlvbigpIGZpbmFsOwogICAgIAotICAgIGJvb2wgZmluYWxpemVDb21tb24oKTsKLQogICAgIHN0
ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBiM0NvZGVMaW5rQnVmZmVyOwogCiAgICAgLy8gRXZl
bnR1YWxseSwgd2UgY2FuIGdldCByaWQgb2YgdGhpcyB3aXRoIEIzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2
LDIzIEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHsKKyAgICAgICAgYm9v
bCBkdW1wRGlzYXNzZW1ibHkgPSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjph
c3luY0Rpc2Fzc2VtYmx5KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGIzQ29kZVJlZiA9CisgICAgICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBE
aXNhc3NlbWJseSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0
clRhZywKKyAgICAgICAgICAgICAgICAiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVj
a0NvZGVSZWYgPSBsaW5rQnVmZmVyCisgICAgICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVt
cERpc2Fzc2VtYmx5LCAqbGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKKyAgICAgICAgICAgICAg
ICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQg
JXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpG
VExKSVQpKS5kYXRhKCksIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKQorICAgICAgICAgICAgOiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKKworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFs
aXplQjNDb2RlKGIzQ29kZVJlZik7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVB
cml0eUNoZWNrRW50cnlwb2ludChhcml0eUNoZWNrQ29kZVJlZik7CisgICAgfQorCiAgICAgCiAg
ICAgc3RhdGUuZmluYWxpemVyLT5lbnRyeXBvaW50TGlua0J1ZmZlciA9IFdURk1vdmUobGlua0J1
ZmZlcik7CiAgICAgc3RhdGUuZmluYWxpemVyLT5mdW5jdGlvbiA9IHN0YXRlLmdlbmVyYXRlZEZ1
bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTUgQEAgdm9pZCBQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlOjpzY2hlZHVsZQogICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKICAgICAgICAgW2hh
bmRsZSwgaGFuZGxlciwgY2FsbFNpdGVJbmRleF0gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3SGFuZGxlciA9
IGhhbmRsZXI7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0
ZUluZGV4LmJpdHMoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxs
U2l0ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0
aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiho
YW5kbGUtPmxhYmVsKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyBuZXdIYW5kbGVy
ID0gaGFuZGxlcjsKKyAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLnN0YXJ0ID0gY2FsbFNpdGVJ
bmRleC5iaXRzKCk7CisgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxsU2l0ZUlu
ZGV4LmJpdHMoKSArIDE7CisgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGhhbmRsZS0+bGFi
ZWwpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlv
blRhc2soWz1dIHsKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRp
b25IYW5kbGVyKG5ld0hhbmRsZXIpOwogICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1
bmtzLmgJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIFRo
dW5rcygpID0gZGVmYXVsdDsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGdldFNsb3dQYXRoQ2FsbFRodW5rKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBr
ZXkpCiAgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CiAgICAgICAgIHJl
dHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KHZtLCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBz
bG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgfQogCkBAIC05MCw2ICs5MSw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOwogICAgIFRodW5r
TWFwPFNsb3dQYXRoQ2FsbEtleT4gbV9zbG93UGF0aENhbGxUaHVua3M7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MywyMiArNjQzLDE5IEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKICNlbmRpZgogfQogCi1Bc3NlbWJseUhlbHBlcnM6OkNh
bGwgQXNzZW1ibHlIZWxwZXJzOjplbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJ
bmZvOjpyZWdUMyk7Ci0gICAgcmV0dXJuIG5lYXJDYWxsKCk7Ci19Ci0KLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCi17Ci0gICAgQ2FsbCBjYWxsID0gZW1pdFVubGlua2Vk
VmlydHVhbENhbGwoZ2xvYmFsT2JqZWN0LCBpbmZvKTsKLSAgICBhZGRMaW5rVGFzaygKLSAgICAg
ICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICBDYWxsIGNhbGwgPSBu
ZWFyQ2FsbCgpOworICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOworICAgICAgICBsaW5rQnVmZmVy
LmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9LCAmdm1dICgpIHsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5r
ID0gdmlydHVhbFRodW5rRm9yKHZtLCAqaW5mbyk7CiAgICAgICAgICAgICBpbmZvLT5zZXRTbG93
U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1bmssIHZtKSk7Ci0g
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAgICB9
KTsKKyAgICB9KTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4MjgsNyArMTgyOCw2IEBAIHB1YmxpYzoKICAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBl
OjpVbmRlZmluZWQsIHRydWUpOwogICAgIH0KICAgICAKLSAgICBDYWxsIGVtaXRVbmxpbmtlZFZp
cnR1YWxDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CiAgICAgdm9pZCBlbWl0
VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOwogICAgIAog
ICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4OSwxNCArOTg5LDcgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogICAgIGlmICghbV9qaXRDb2RlKQogICAg
ICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAKLSAgICBmb3IgKGF1dG8gcGFpciA6IG1f
dmlydHVhbENhbGxzKSB7Ci0gICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbV9saW5rQnVmZmVy
LT5sb2NhdGlvbk9mTmVhckNhbGw8SklUVGh1bmtQdHJUYWc+KHBhaXIuZmlyc3QpOwotCi0gICAg
ICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IHBhaXIuc2Vjb25kOwotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxU
aHVua0ZvcigqbV92bSwgaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGUodmlydHVhbFRodW5rLCAqbV92bSkpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKLSAgICB9Cisg
ICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAogICAg
IHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc3OTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1Myw4ICsx
MDUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4OwogCiAgICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2pp
dENvZGU7Ci0KLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBDYWxsTGlua0luZm8mPj4g
bV92aXJ0dWFsQ2FsbHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyNzc5NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVv
ZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwg
cmVnVDApOwotICAgIG1fdmlydHVhbENhbGxzLmFwcGVuZChzdGQ6OnBhaXI8Q2FsbCwgQ2FsbExp
bmtJbmZvJj4geyBlbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pLCAqaW5mbyB9KTsKKyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0
ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIG1f
dmlydHVhbENhbGxzLmFwcGVuZChzdGQ6OnBhaXI8Q2FsbCwgQ2FsbExpbmtJbmZvJj4geyBlbWl0
VW5saW5rZWRWaXJ0dWFsQ2FsbChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pLCAq
aW5mbyB9KTsKKyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgaW5mbyk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAo=
</data>
<flag name="review"
          id="450829"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="450840"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429668</attachid>
            <date>2021-05-25 11:15:32 -0700</date>
            <delta_ts>2021-05-25 11:16:56 -0700</delta_ts>
            <desc>[fast-cq] patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24496</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDIxLTA1LTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZpbmFsaXplIERGRy9GVEwgY29kZSByZWZzIG9uIHRoZSBjb21waWxlciB0aHJlYWRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYwOTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBQcmV2aW91c2x5LCBsaW5rIHRh
c2tzIHRoYXQgcmFuIHZpYSB0aGUgYWRkTGlua1Rhc2sgQVBJIHdlcmUgZ3VhcmFudGVlZCB0byBi
ZQorICAgICAgICBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLiBUaGlzIGlzIG5vIGxvbmdlciB0
aGUgY2FzZS4gTW9zdCBsaW5rIHRhc2tzIGFyZQorICAgICAgICBoYXBweSBydW5uaW5nIG9uIGEg
YmFja2dyb3VuZCB0aHJlYWQsIHNpbmNlIGFsbCB0aGV5J3JlIHJlYWxseSBkb2luZyBpcworICAg
ICAgICBsaW5raW5nIGJyYW5jaGVzL2NhbGxzIG9yIGdyYWJiaW5nIGxhYmVscy4gSG93ZXZlciwg
YSBmZXcgdXNlcnMgb2YgYWRkTGlua1Rhc2sgd2VyZQorICAgICAgICByZWx5aW5nIG9uIGl0IHJ1
bm5pbmcgb24gdGhlIG1haW4gdGhyZWFkLiBGb3IgdGhvc2UgdXNlcnMsIHRoZXJlIGlzIGEgbmV3
CisgICAgICAgIGFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrIEFQSSwgd2hpY2ggaXMgbm93
IHVzZWQgaW5zdGVhZC4KKworICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmNhbmNlbCk6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKToK
KyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZhaWxl
ZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R0ZhaWxlZEZpbmFsaXplci5oOgorICAgICAgICAqIGRmZy9ERkdGaW5hbGl6ZXIuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaW5hbGl6ZXI6OmNhbmNlbCk6CisgICAgICAgICogZGZnL0RGR0pJVENv
bXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAg
ICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxp
emVyOjpjYW5jZWwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbik6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5oOgorICAgICAgICAqIGRm
Zy9ERkdMYXp5SlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OmVt
aXQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjayk6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6Y2FuY2VsKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkZUTDo6SklURmlu
YWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpK
SVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRM
SklURmluYWxpemVyLmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpzY2hl
ZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCk6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgor
ICAgICAgICAoSlNDOjpGVEw6OlRodW5rczo6Z2V0U2xvd1BhdGhDYWxsVGh1bmspOgorICAgICAg
ICBBZGQgYSBsb2NrIHRvIEZUTFRodW5rcyBzaW5jZSB3ZSBub3cgbWF5IGJlIGNhbGxpbmcgaW50
byBpdCBmcm9tIG1vcmUgdGhhbgorICAgICAgICBvbmUgdGhyZWFkIGF0IGEgdGltZS4KKworICAg
ICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdFVubGlua2VkVmlydHVhbENhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9Bc3NlbWJs
eUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorCiAyMDIxLTA1LTI0ICBSb2JpbiBNb3Jpc3NldCAg
PHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBydW5uaW5nIHdpdGggLS1yZXBv
cnRUb3RhbFBoYXNlVGltZXM9MSwgd2Ugc2hvdWxkIGFsc28gbG9nIHRoZSBtYXggdGltZSBpbiBh
IHBoYXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0ODcsMTMgQEAg
dm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCkKICAgICBNYWNyb0Fzc2VtYmxl
cjo6Y2FjaGVGbHVzaChjb2RlKCksIG1fc2l6ZSk7CiB9CiAKK3ZvaWQgTGlua0J1ZmZlcjo6cnVu
TWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBt
X21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcykKKyAgICAgICAgdGFzay0+cnVuKCk7CisgICAg
bV9tYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MuY2xlYXIoKTsKK30KKwogI2lmIERVTVBfTElO
S19TVEFUSVNUSUNTCiB2b2lkIExpbmtCdWZmZXI6OmR1bXBMaW5rU3RhdGlzdGljcyh2b2lkKiBj
b2RlLCBzaXplX3QgaW5pdGlhbGl6ZVNpemUsIHNpemVfdCBmaW5hbFNpemUpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24g
Mjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Myw2ICsxNTMsOCBAQCBwdWJsaWM6CiAgICAgfkxpbmtCdWZm
ZXIoKQogICAgIHsKICAgICB9CisKKyAgICB2b2lkIHJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25U
YXNrcygpOwogICAgIAogICAgIGJvb2wgZGlkRmFpbFRvQWxsb2NhdGUoKSBjb25zdAogICAgIHsK
QEAgLTM0MCw2ICszNDIsMTIgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGNsZWFyUHJvZmlsZVN0YXRpc3RpY3MoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBkdW1wUHJvZmlsZVN0YXRpc3RpY3MoT3B0aW9uYWw8UHJpbnRTdHJlYW0qPiA9
IFdURjo6bnVsbG9wdCk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIG1fbWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzLmFwcGVuZChjcmVh
dGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBK
U19FWFBPUlRfUFJJVkFURSBDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdp
dGhvdXREaXNhc3NlbWJseUltcGwoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlUmVmPExp
bmtCdWZmZXJQdHJUYWc+IGZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseUltcGwoYm9vbCBkdW1w
RGlzYXNzZW1ibHksIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5U
RigzLCA0KTsKQEAgLTQxOSw2ICs0MjcsNyBAQCBwcml2YXRlOgogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOwogICAgIFZlY3RvcjxSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CisgICAg
VmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiBtX21haW5UaHJlYWRGaW5hbGl6YXRp
b25UYXNrczsKIAogICAgIHN0YXRpYyBzaXplX3Qgc19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRT
aXplc1tudW1iZXJPZlByb2ZpbGVzXTsKICAgICBzdGF0aWMgc2l6ZV90IHNfcHJvZmlsZUN1bW11
bGF0aXZlTGlua2VkQ291bnRzW251bWJlck9mUHJvZmlsZXNdOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcAkocmV2aXNpb24gMjc3
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQCBib29sIEZhaWxlZEZpbmFsaXplcjo6
ZmluYWxpemUoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGYWlsZWRGaW5hbGl6ZXI6
OmZpbmFsaXplRnVuY3Rpb24oKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmgJKHJldmlzaW9u
IDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAgcHVibGljOgogICAgIAogICAgIHNp
emVfdCBjb2RlU2l6ZSgpIGZpbmFsOwogICAgIGJvb2wgZmluYWxpemUoKSBmaW5hbDsKLSAgICBi
b29sIGZpbmFsaXplRnVuY3Rpb24oKSBmaW5hbDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIuaAkocmV2
aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmly
dHVhbCBzaXplX3QgY29kZVNpemUoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGZpbmFsaXplKCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCkgPSAwOwogCiBwcm90ZWN0
ZWQ6CiAgICAgUGxhbiYgbV9wbGFuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFs
aXplci5oIgogI2luY2x1ZGUgIkRGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCkBAIC0zOTgsOCArMzk5LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6
OmNvbXBpbGUoKQogCiAgICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIpOwogCi0gICAgbV9ncmFw
aC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8SklURmluYWxpemVyPigKLSAgICAgICAg
bV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxpbmtC
dWZmZXIpKSk7CisgICAgYXV0byBjb2RlUmVmID0gRklOQUxJWkVfREZHX0NPREUoKmxpbmtCdWZm
ZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRhKCkpOwor
ICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoY29kZVJlZiwgY29kZVJlZi5j
b2RlKCkpOworCisgICAgYXV0byBmaW5hbGl6ZXIgPSBtYWtlVW5pcXVlPEpJVEZpbmFsaXplcj4o
bV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxpbmtC
dWZmZXIpKTsKKyAgICBtX2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIoV1RGTW92ZShmaW5hbGl6
ZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKQEAgLTUwMiw4
ICs1MDYsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxpbmtC
dWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CiAKLSAgICBtX2dy
YXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIobWFrZVVuaXF1ZTxKSVRGaW5hbGl6ZXI+KAotICAgICAg
ICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUobGlu
a0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKSk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29k
ZVJlZkZvckRGRygKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKmxpbmtCdWZmZXIsIEpTRW50
cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRhKCkpLAorICAgICAgICB3
aXRoQXJpdHlDaGVjayk7CisKKyAgICBhdXRvIGZpbmFsaXplciA9IG1ha2VVbmlxdWU8SklURmlu
YWxpemVyPihtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdURk1v
dmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsKKyAgICBtX2dyYXBoLm1fcGxhbi5zZXRG
aW5hbGl6ZXIoV1RGTW92ZShmaW5hbGl6ZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6ZGlz
YXNzZW1ibGUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNDYgKzU1LDMxIEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIAog
Ym9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZm
ZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklUKSkuZGF0
YSgpKTsKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKGNvZGVSZWYsIGNv
ZGVSZWYuY29kZSgpKTsKKyAgICBWTSYgdm0gPSAqbV9wbGFuLnZtKCk7CiAKLSAgICBtX3BsYW4u
Y29kZUJsb2NrKCktPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CisgICAgV1RGOjpj
cm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogCi0gICAgZmluYWxpemVDb21tb24oKTsKLSAgICAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rp
b24oKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1
ZSgpKTsKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmRm9yREZHKAotICAgICAgICBG
SU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrKCksIEpJVFR5cGU6OkRGR0pJVCkpLmRhdGEoKSksCi0gICAgICAgIG1fd2l0aEFyaXR5Q2hl
Y2spOwotICAgIG1fcGxhbi5jb2RlQmxvY2soKS0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJl
ZigpKTsKKyAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygp
OwogCi0gICAgZmluYWxpemVDb21tb24oKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKLXsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG1fcGxhbi5jb2RlQmxvY2soKTsKIAorICAgIGNvZGVCbG9jay0+c2V0SklUQ29k
ZShtX2ppdENvZGUuY29weVJlZigpKTsKKwogI2lmIEVOQUJMRShGVExfSklUKQogICAgIG1faml0
Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOwogI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQogCiAgICAgaWYgKFVOTElLRUxZKG1fcGxhbi5jb21waWxhdGlvbigpKSkKLSAgICAg
ICAgbV9wbGFuLnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24oY29k
ZUJsb2NrLCAqbV9wbGFuLmNvbXBpbGF0aW9uKCkpOworICAgICAgICB2bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywgKm1fcGxhbi5jb21waWxhdGlvbigp
KTsKIAogICAgIGlmICghbV9wbGFuLndpbGxUcnlUb1RpZXJVcCgpKQogICAgICAgICBjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbiA9IHRydWU7CiAK
ICAgICAvLyBUaGUgY29kZUJsb2NrIGlzIG5vdyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyBtYW55
IHRoaW5ncyBhbGl2ZSAoZS5nLiBmcm96ZW4gdmFsdWVzKQogICAgIC8vIHRoYXQgd2VyZSBwcmV2
aW91c2x5IGtlcHQgYWxpdmUgYnkgdGhlIHBsYW4uCi0gICAgbV9wbGFuLnZtKCktPmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgJKHJldmlz
aW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBz
aXplX3QgY29kZVNpemUoKSBmaW5hbDsKICAgICBib29sIGZpbmFsaXplKCkgZmluYWw7Ci0gICAg
Ym9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBmaW5h
bGl6ZUNvbW1vbigpOwogICAgIAogICAgIFJlZjxKSVRDb2RlPiBtX2ppdENvZGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ5LDggKzI0OSw5IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxw
ZXJzJiBqaXQKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwog
ICAgIAotICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgW2NvZGVCbG9jaywgbGFiZWwsIHRo
aXNWYWx1ZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGF1dG8gcGF0Y2hMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKSVRDb21waWxhdGlvblB0clRhZz4obGFiZWwpOwor
ICAgICAgICBsaW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9XSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZShjb2RlQmxv
Y2stPnZtKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVhbFZhbHVlLmlzQ2VsbCgp
KTsKIApAQCAtMjU5LDggKzI2MCw5IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxw
ZXJzJiBqaXQKICAgICAgICAgICAgIGlmICh0aGlzVmFsdWUubV9raW5kID09IE5ld1N0cmluZ0lt
cGwpCiAgICAgICAgICAgICAgICAgdGhpc1ZhbHVlLnUuc3RyaW5nSW1wbC0+ZGVyZWYoKTsKIAot
ICAgICAgICAgICAgbGlua0J1ZmZlci5wYXRjaChsYWJlbCwgcmVhbFZhbHVlLmFzQ2VsbCgpKTsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXRjaExvY2F0aW9u
LCByZWFsVmFsdWUuYXNDZWxsKCkpOwogICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogdm9pZCBM
YXp5SlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
cmV2aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDEyICs2MDksNyBAQCBDb21waWxhdGlvblJlc3VsdCBQ
bGFuOjpmaW5hbGl6ZVdpdGhvdXROCiAgICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZh
bGlkYXRlZDsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgcmVzdWx0OwotICAgICAgICBpZiAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICAgICAgcmVz
dWx0ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplRnVuY3Rpb24oKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmVzdWx0ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplKCk7Ci0KKyAgICAgICAgYm9v
bCByZXN1bHQgPSBtX2ZpbmFsaXplci0+ZmluYWxpemUoKTsKICAgICAgICAgaWYgKCFyZXN1bHQp
IHsKICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdGaW5h
bGl6ZSIsICgiZmFpbGVkIikpOwogICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNw
cAkocmV2aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRG
aW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKQEAgLTU5LDM5ICs2MCwyMSBAQCBzaXplX3QgSklURmluYWxpemVy
Ojpjb2RlU2l6ZSgpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7Ci0gICAgcmV0
dXJuIGZpbmFsaXplQ29tbW9uKCk7Ci19CisgICAgVk0mIHZtID0gKm1fcGxhbi52bSgpOworICAg
IFdURjo6Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKIAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZp
bmFsaXplRnVuY3Rpb24oKQotewotICAgIHJldHVybiBmaW5hbGl6ZUNvbW1vbigpOwotfQorICAg
IGIzQ29kZUxpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi1i
b29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQotewogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9wbGFuLmNvZGVCbG9jaygpOwotICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0g
c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwot
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9Ci0g
ICAgICAgIEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZl
ciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NT
dHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5k
YXRhKCkpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGFyaXR5
Q2hlY2tDb2RlUmVmID0gZW50cnlwb2ludExpbmtCdWZmZXIKLSAgICAgICAgPyBGSU5BTElaRV9D
T0RFX0lGKGR1bXBEaXNhc3NlbWJseSwgKmVudHJ5cG9pbnRMaW5rQnVmZmVyLCBKU0VudHJ5UHRy
VGFnLAotICAgICAgICAgICAgIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIEIzIGdl
bmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVC
bG9jaywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKLSAgICAgICAgOiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihiM0NvZGVSZWYuY29kZSgpKTsKLQotICAgIGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjND
b2RlUmVmKTsKLSAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJp
dHlDaGVja0NvZGVSZWYpOwogCiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKCpqaXRDb2RlKTsK
IAogICAgIGlmIChVTkxJS0VMWShtX3BsYW4uY29tcGlsYXRpb24oKSkpCi0gICAgICAgIG1fcGxh
bi52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKGNvZGVCbG9jaywg
Km1fcGxhbi5jb21waWxhdGlvbigpKTsKKyAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5hZGRDb21waWxhdGlvbihjb2RlQmxvY2ssICptX3BsYW4uY29tcGlsYXRpb24oKSk7CiAKICAg
ICAvLyBUaGUgY29kZUJsb2NrIGlzIG5vdyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyBtYW55IHRo
aW5ncyBhbGl2ZSAoZS5nLiBmcm96ZW4gdmFsdWVzKQogICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91
c2x5IGtlcHQgYWxpdmUgYnkgdGhlIHBsYW4uCi0gICAgbV9wbGFuLnZtKCktPmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMCArNTQs
NyBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgY29kZVNpemUoKSBmaW5hbDsKICAgICBib29sIGZp
bmFsaXplKCkgZmluYWw7Ci0gICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCkgZmluYWw7CiAgICAg
Ci0gICAgYm9vbCBmaW5hbGl6ZUNvbW1vbigpOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpbmtC
dWZmZXI+IGIzQ29kZUxpbmtCdWZmZXI7CiAKICAgICAvLyBFdmVudHVhbGx5LCB3ZSBjYW4gZ2V0
IHJpZCBvZiB0aGlzIHdpdGggQjMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsMjMgQEAgdm9pZCBsaW5rKFN0
YXRlJiBzdGF0ZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQorCisgICAgeworICAgICAgICBib29sIGR1bXBEaXNhc3NlbWJseSA9
IHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYjNDb2RlUmVm
ID0KKyAgICAgICAgICAgIEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqc3RhdGUu
ZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAorICAgICAgICAgICAg
ICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
Y29kZUJsb2NrLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCkpOworCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBhcml0eUNoZWNrQ29kZVJlZiA9IGxpbmtCdWZm
ZXIKKyAgICAgICAgICAgID8gRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpsaW5r
QnVmZmVyLCBKU0VudHJ5UHRyVGFnLAorICAgICAgICAgICAgICAgICJGVEwgZW50cnlwb2ludCB0
aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShjb2RlQmxvY2ssIEpJVFR5cGU6OkZUTEpJVCkpLmRhdGEoKSwgc3Rh
dGUuZ2VuZXJhdGVkRnVuY3Rpb24pCisgICAgICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGIzQ29kZVJlZi5jb2Rl
KCkpOworCisgICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVm
KTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50
KGFyaXR5Q2hlY2tDb2RlUmVmKTsKKyAgICB9CisKICAgICAKICAgICBzdGF0ZS5maW5hbGl6ZXIt
PmVudHJ5cG9pbnRMaW5rQnVmZmVyID0gV1RGTW92ZShsaW5rQnVmZmVyKTsKICAgICBzdGF0ZS5m
aW5hbGl6ZXItPmZ1bmN0aW9uID0gc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb247CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDE0ICs4NiwxNSBAQCB2b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OnNjaGVkdWxl
CiAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAogICAgICAgICBbaGFuZGxlLCBoYW5kbGVyLCBjYWxs
U2l0ZUluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAotICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgICAgICAgICBIYW5kbGVySW5mbyBuZXdIYW5kbGVyID0gaGFuZGxlcjsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3SGFuZGxlci5zdGFydCA9IGNhbGxTaXRlSW5kZXguYml0cygpOwotICAg
ICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLmVuZCA9IGNhbGxTaXRlSW5kZXguYml0cygpICsg
MTsKLSAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGhhbmRsZS0+bGFiZWwpOworICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIG5ld0hhbmRsZXIgPSBoYW5kbGVyOworICAgICAg
ICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKKyAgICAg
ICAgICAgICAgICBuZXdIYW5kbGVyLmVuZCA9IGNhbGxTaXRlSW5kZXguYml0cygpICsgMTsKKyAg
ICAgICAgICAgICAgICBuZXdIYW5kbGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oaGFuZGxlLT5sYWJlbCk7CisgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPV0gewogICAgICAg
ICAgICAgICAgICAgICBjb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxl
cik7CiAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMjc3
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBj
b3B5KQpAQCAtODEsNiArODEsNyBAQCBwdWJsaWM6CiAgICAgVGh1bmtzKCkgPSBkZWZhdWx0Owog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0U2xvd1BhdGhDYWxs
VGh1bmsoVk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKICAgICB7CisgICAgICAg
IExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlSWZOZWNl
c3Nhcnkodm0sIG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2Vu
ZXJhdG9yKTsKICAgICB9CiAKQEAgLTkwLDYgKzkxLDcgQEAgcHVibGljOgogICAgIH0KICAgICAK
IHByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CiAgICAgVGh1bmtNYXA8U2xvd1BhdGhDYWxsS2V5
PiBtX3Nsb3dQYXRoQ2FsbFRodW5rczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQzLDIyICs2NDMsMTkgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlcwogI2VuZGlmCiB9CiAKLUFzc2VtYmx5SGVscGVyczo6Q2FsbCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRVbmxpbmtlZFZpcnR1YWxDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxMaW5rSW5mbyogaW5mbykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8p
CiB7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBy
ZXR1cm4gbmVhckNhbGwoKTsKLX0KLQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyog
aW5mbykKLXsKLSAgICBDYWxsIGNhbGwgPSBlbWl0VW5saW5rZWRWaXJ0dWFsQ2FsbChnbG9iYWxP
YmplY3QsIGluZm8pOwotICAgIGFkZExpbmtUYXNrKAotICAgICAgICBbPSwgJnZtXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CisgICAgYWRk
TGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgYXV0
byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxh
dGlvblB0clRhZz4oY2FsbCk7CisgICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFs
aXphdGlvblRhc2soWz0sICZ2bV0gKCkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Io
dm0sICppbmZvKTsKICAgICAgICAgICAgIGluZm8tPnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHVi
Um91dGluZTo6Y3JlYXRlKHZpcnR1YWxUaHVuaywgdm0pKTsKLSAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4odmly
dHVhbFRodW5rLmNvZGUoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPih2aXJ0dWFsVGh1bmsuY29kZSgpKSk7CiAgICAgICAgIH0pOworICAgIH0pOwogfQogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyOCw3ICsxODI4LDYg
QEAgcHVibGljOgogICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCwgdHJ1ZSk7
CiAgICAgfQogICAgIAotICAgIENhbGwgZW1pdFVubGlua2VkVmlydHVhbENhbGwoSlNHbG9iYWxP
YmplY3QqLCBDYWxsTGlua0luZm8qKTsKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VP
blN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTg5LDE0ICs5ODksNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFs
aXplT25NYWluVGhyCiAgICAgaWYgKCFtX2ppdENvZGUpCiAgICAgICAgIHJldHVybiBDb21waWxh
dGlvbkZhaWxlZDsKIAotICAgIGZvciAoYXV0byBwYWlyIDogbV92aXJ0dWFsQ2FsbHMpIHsKLSAg
ICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBtX2xpbmtCdWZmZXItPmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxKSVRUaHVua1B0clRhZz4ocGFpci5maXJzdCk7Ci0KLSAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gcGFpci5zZWNvbmQ7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCptX3ZtLCBpbmZv
KTsKLSAgICAgICAgaW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0
ZSh2aXJ0dWFsVGh1bmssICptX3ZtKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwotICAgIH0KKyAgICBtX2xpbmtCdWZmZXItPnJ1
bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCiAgICAgewogICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDggKzEwNTMsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7
CiAKICAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKLQotICAgICAgICBW
ZWN0b3I8c3RkOjpwYWlyPENhbGwsIENhbGxMaW5rSW5mbyY+PiBtX3ZpcnR1YWxDYWxsczsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1
OCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbV92aXJ0
dWFsQ2FsbHMuYXBwZW5kKHN0ZDo6cGFpcjxDYWxsLCBDYWxsTGlua0luZm8mPiB7IGVtaXRVbmxp
bmtlZFZpcnR1YWxDYWxsKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyksICppbmZv
IH0pOworICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3Nzk3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihS
ZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgbV92aXJ0dWFsQ2FsbHMuYXBwZW5k
KHN0ZDo6cGFpcjxDYWxsLCBDYWxsTGlua0luZm8mPiB7IGVtaXRVbmxpbmtlZFZpcnR1YWxDYWxs
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyksICppbmZvIH0pOworICAgIGVtaXRW
aXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>