<?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>217677</bug_id>
          
          <creation_ts>2020-10-13 15:25:45 -0700</creation_ts>
          <short_desc>JSObject::getPropertyNames should have a stack overflow check</short_desc>
          <delta_ts>2020-10-13 20:03:49 -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>Other</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>jsc32</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1697451</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-13 15:25:45 -0700</bug_when>
    <thetext>For objects with really long prototype chains</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697457</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-13 15:31:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/69286436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697496</commentid>
    <comment_count>2</comment_count>
      <attachid>411278</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-13 16:42:46 -0700</bug_when>
    <thetext>Created attachment 411278
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697516</commentid>
    <comment_count>3</comment_count>
      <attachid>411281</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-13 17:15:54 -0700</bug_when>
    <thetext>Created attachment 411281
patch

wrong patch before</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697521</commentid>
    <comment_count>4</comment_count>
      <attachid>411281</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2020-10-13 17:18:35 -0700</bug_when>
    <thetext>Comment on attachment 411281
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697594</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-13 20:03:47 -0700</bug_when>
    <thetext>Committed r268442: &lt;https://trac.webkit.org/changeset/268442&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411281.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411278</attachid>
            <date>2020-10-13 16:42:46 -0700</date>
            <delta_ts>2020-10-13 17:15:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>217684</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDAp
OwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQs
NiArMTY4NiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE5NzcsNTQ2IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdD
b21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRl
KEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1bXBMaXN0
IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBj
b21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFs
bG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFu
azo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRv
UmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8
fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQu
YWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJl
c3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5j
b25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sK
KyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29k
ZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworR1BSUmVn
IEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBy
ZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjph
bGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzog
Zml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1
ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcp
Cit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRo
YXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZyku
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1
ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVy
YW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQ
UlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9
OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGZv
ciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBw
YWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25k
OworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3VsdCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNT
RVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERv
dWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnBy
LCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgcmVnVmFsdWUoZ3By
KS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOwor
ICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcp
Cit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQ
UlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJl
ZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAg
IDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisK
K0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9
IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVn
IEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8g
T09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6
OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3Bl
cmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dw
ciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+
Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWND
ZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
ZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJh
bmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRo
ZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdw
ciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zw
cik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnBy
OworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7
CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAg
fTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVl
ZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFk
ZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxs
KQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxs
KSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVB
c0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihK
U1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2Jq
ZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY09iamVjdDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBz
dHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQbGFu
IHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0
aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21l
IG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UK
ICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5j
dGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJ
bnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAg
IC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxl
IGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMs
NiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAK
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBs
KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAg
ICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAg
ICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1w
KTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1w
TGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7Cisg
ICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQg
YWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYs
IENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Jik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAg
IGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVt
cFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTA1LDE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBl
bWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0
YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzUzNiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAt
NjQzLDY5ICs2NjcsNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1
bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0
X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dD
YXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRT
aGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQg
ZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRS
aWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNV
bnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcyOCw4ICs3NTIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3NjgsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbios
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJv
bTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+
ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAg
ICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dD
YXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQg
bGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAg
ICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0Fs
bFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2Fz
ZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2Vz
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVy
LCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93
Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAg
Ym9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dD
YXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShp
dGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
Ly9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9i
eXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPik7CkBAIC05MjUsNiArOTI3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAg
ICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9v
bCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBp
bGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NDAsMjA1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJp
dGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3Mg
R1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJik7Cisg
ICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJU
ZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAg
ICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnBy
IHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGlu
dDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBu
b3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3Vi
bGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFu
ZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92
ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0
ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAg
ICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBH
UFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChv
cGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAg
IH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxs
b2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVy
YW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVn
VmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1Zh
bHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdW
YWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAg
ICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RD
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+
U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVP
dGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7
CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
KTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcg
cHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUigpOworICAgICAgICBGUFJSZWcg
YWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsK
KyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAg
ICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNh
dmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJw
cmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyAr
MTE1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2pt
cFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAg
ICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29w
aWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTE5NCw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAg
Ly8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAg
ICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BS
UmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5n
cHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0Fs
bG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFs
dWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9
IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVy
LmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAg
T3BlcmFuZHM8QWxsb2NlZFJlZz4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJN
YXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0
YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFu
ZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1Jl
Z1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90
aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJv
dmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkg
PT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2Rl
QmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBW
ZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8Qmxv
Y2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+
IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWws
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwg
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25k
aXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91Ymxl
Q29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9s
bG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRv
IGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUg
dG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRl
CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
bGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBs
aHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBk
aXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwog
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiAr
Mjk0LDE2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBj
b25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0
aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJikKIHsKIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUg
Zm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQg
aW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5n
LXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CkBAIC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKQEAgLTMyNSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDEpOwpAQCAtMzUwLDEyICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAg
ICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1w
IGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFu
Y2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBm
YWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWls
NC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlz
IG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAg
IC8vIE9PUFM6IHNsb3cgcGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
CiB9CkBAIC00NjMsNyArNDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00
NzMsNiArNDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwx
NSArNTc2LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTcyMywxMCArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2lu
c3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1F
OiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwg
c2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BO
ZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2JpdG5vdChjb25zdCBJbnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AxKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
bW92ZShpbnB1dC5ncHIoKSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJl
c3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5n
cHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUwor
ICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRk
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMy
KE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNl
dEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBP
T1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
SklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBh
ZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQo
Y3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBA
IC0xMjE1LDMyICsxMjcwLDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxo
cy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09Q
UworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVs
SUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCBy
aHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1
YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdp
c2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3Ry
dWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVT
dWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCAr
MTQ1LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NF
UlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQg
KzMzMCw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAg
Y29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJn
cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3Ry
dWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwx
NCArNDA3LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChqdW1wKCkpOwogCiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMK
KyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5s
aW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09Q
UworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsK
QEAgLTUyNiw3ICs1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsK
ICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoc2xvd0Nhc2UpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgs
NyArNTQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAg
IH0KIAogICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NiwyNSArMTY2LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5k
ZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3
aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8g
PT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTg3LDM2IEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52
YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1
bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVn
IHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUlu
ZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAg
IG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkp
OworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3Qo
KS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQp
OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1w
IDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
LCBkc3QpLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0
aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVt
cCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVu
ZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAs
IGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTM5MywxMSArMzgzLDYgQEAgQUxXQVlTX0lOTElORSBk
b3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNV
bmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCAr
MTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEy
NDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgLy8gT09QUzog
TWFrZSB0aGlzIGJldHRlciBmb3IgY29uc3RhbnRzIHdoaWNoIGFyZW4ndCByZWdpc3RlciBhbGxv
Y2F0ZWQgeWV0LgorICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0Lmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTAxLDUzIEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdU
MDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFs
bG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcg
PSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAg
ICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAg
ICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAg
ICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5h
bE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE1Nyw1MCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQ
UjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVu
dCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9y
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywg
Y29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFz
SW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBp
bnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQ
UiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VW
YWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAg
aWYgKCFtX3VzZUxPTCkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1w
bGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJ
IHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMTAsOTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0g
Ynl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZh
bCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8v
IFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlz
IGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2Vs
bHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9i
eV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1
ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2Zz
LmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVt
cENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3Rv
R1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3By
KCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2Uo
KnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywg
cHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOwor
ICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVt
cC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCks
IGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQ
UiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAg
ICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBz
Y3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
KworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5j
ZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0
IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11
c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJv
bC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qy
LCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJv
dG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAg
cmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAg
IHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNb
bV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVH
UFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzExLDI5IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM0MSw3MiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7Ci0KLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
anVtcCgpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090
aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1
bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1w
IG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MTUsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
dW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSBzcGVjdWxhdGUgb3Ro
ZXIgaGVyZT8KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NTAsMzAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUik7CisgICAgICAgICAgICB0ZXN0NjQo
WmVybywgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAg
ICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0ODEsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVz
dDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSBzcGVj
dWxhdGUgbnVtYmVyIGhlcmUgaWYgcHJvZmlsaW5nIHNheXMgc28/CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BS
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUxMiw1NiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQo
cmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJ
TlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3Ry
dWN0aW9uKikKQEAgLTMxMywxOCArNTc4LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxf
d2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAot
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjI3
LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVU
ZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzY5MiwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJl
c3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUg
KzcxMSw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5r
KHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92
ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAg
ICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5r
KHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYs
NTIgKzc1NCwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0
cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
eW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJp
bmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNT
dHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNw
ZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAo
c3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25l
ID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYg
KHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAg
ICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcg
bmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9u
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFu
KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8s
IHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTog
c3RyaW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAv
LyBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblpl
cm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwg
dGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJp
dCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3Rp
dmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3
aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAg
ICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMg
dGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNs
ZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxz
ZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBh
Z2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5k
IGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5v
blplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24p
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUg
Y2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29u
ZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBm
cFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0
aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3Jh
dGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwg
dmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMg
aW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0
Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJG
UFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
Uiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1
ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk1OSwxMjkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAg
ICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1
bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCiAKLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24u
bGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAg
YWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
cmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8v
IE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24u
bGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qw
KSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAg
ICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5MCwyNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8g
Tm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNTAwLDEwICsxMTE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZp
bmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVy
KSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1
LDU0ICsxMTQ5LDE3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRl
cikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNw
ZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBBU1NFUlQobV91c2VMT0wpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1
ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVx
dWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
YmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMy
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21w
YXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
VGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQg
ZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9
IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDgsMjAgKzE1MDUsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwpAQCAtMTAyMyw4ICsxNzc2LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9p
ZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGlu
Y3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51
bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAg
ICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VM
T0wpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9
CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsxNzky
LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVn
VDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIo
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBz
Y29wZSk7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNj
b3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMDk2LDU0ICsxODY3LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJ
bnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKLQotLy8g
U2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKQEAgLTExODcsMTMgKzE5MjgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGlt
aXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9y
UmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIxMCw3ICsxOTQ5LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlm
CiB9CiAKQEAgLTEyMzMsMTAgKzE5NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1w
bGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
Yml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4
MSwxMCArMjIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
ICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhi
eVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2Rl
LCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhl
ZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEs
OCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNb
bV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsK
ICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byBy
ZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCAr
NjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYz
LDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCAr
MTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIw
MSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAg
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cgogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYg
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9n
ZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRC
eVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0
QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQsNyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0
MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsK
IAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5i
eVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKQEAgLTUzNywxMCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAs
MTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsK
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUp
LnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNy
b0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6
ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjph
cnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7
IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0
aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAg
SklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2Ug
anVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1f
aml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAg
ICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1f
aml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRd
LCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhw
ciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9y
TElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxs
b3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24s
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411281</attachid>
            <date>2020-10-13 17:15:54 -0700</date>
            <delta_ts>2020-10-13 20:03:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>3266</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjg0MjQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTEwLTEzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzIHNob3VsZCBoYXZlIGEg
c3RhY2sgb3ZlcmZsb3cgY2hlY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzY3NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjkyODY0MzY+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mv
Z2V0LXByb3BlcnR5LW5hbWVzLXN0YWNrLW92ZXJmbG93LmpzOiBBZGRlZC4KKwogMjAyMC0xMC0x
MiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBcnJheS5wcm90
b3R5cGUuc29ydCdzIHNvcnRCdWNrZXRTb3J0IGFjY2Vzc2VzIGFuIGFycmF5IGluIGFuIGludmFs
aWQgd2F5IHRoYXQgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IHJlc3VsdHMgd2l0aCBpbmRleGVkIHBy
b3BlcnRpZXMgb24gdGhlIHByb3RvdHlwZSBjaGFpbgpJbmRleDogSlNUZXN0cy9zdHJlc3MvZ2V0
LXByb3BlcnR5LW5hbWVzLXN0YWNrLW92ZXJmbG93LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
c3RyZXNzL2dldC1wcm9wZXJ0eS1uYW1lcy1zdGFjay1vdmVyZmxvdy5qcwkobm9uZXhpc3RlbnQp
CisrKyBKU1Rlc3RzL3N0cmVzcy9nZXQtcHJvcGVydHktbmFtZXMtc3RhY2stb3ZlcmZsb3cuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisvLyBUaGlzIHNob3VsZCBub3QgY3Jhc2gu
CisKK2xldCBvID0gJHZtLmNyZWF0ZVByb3h5KHt9KTsKK28uX19wcm90b19fID0gbzsKKwordHJ5
IHsKKyAgICBmb3IgKGxldCBxIGluIG8pIHsgfQorfSBjYXRjaCB7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4NDIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDIwLTEwLTEzICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eU5hbWVzIHNob3VsZCBoYXZlIGEgc3RhY2sgb3ZlcmZsb3cgY2hlY2sKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzY3NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjkyODY0MzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQSBwcm90b3R5cGUgY2hhaW4gY2FuIGJlIGxvbmcgZW5vdWdoIHdo
ZXJlIHRoZSByZWN1cnNpb24gY2F1c2VzIGEgc3RhY2sKKyAgICAgICAgb3ZlcmZsb3cuIFRoZSBh
dHRhY2hlZCB0ZXN0IGNhc2UgdXNlcyAkdm0gdG8gbWltaWMgc3VjaCBhIHByb3RvdHlwZSBjaGFp
bgorICAgICAgICBieSB1c2luZyBKU1Byb3h5IHRvIG1ha2UgYSBjeWNsaWMgcHJvdG90eXBlIGNo
YWluLiBCdXQgdGhlIHNhbWUgd29ya3MgYnkKKyAgICAgICAgbWFraW5nIGEgcHJvdG90eXBlIGNo
YWluIHZlcnkgbG9uZywgYnV0IHRoZSB0ZXN0IGNhc2UgdGFrZXMgdG9vIGxvbmcgdG8KKyAgICAg
ICAgcnVuIHRvIGp1c3RpZnkgbGFuZGluZy4gRm9yIHBvc3Rlcml0eSwgdGhlIGFsdGVybmF0ZSB0
ZXN0IGNhc2UgaXM6CisgICAgICAgIAorICAgICAgICBgYGAKKyAgICAgICAgZnVuY3Rpb24gbWFr
ZUxvbmdQcm90b0NoYWluKGxlbmd0aCkgeworICAgICAgICAgICAgbGV0IG9iamVjdCA9IC9mb28v
OworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgICAgIG5leHQgPSAvZm9vLzsKKyAgICAgICAgICAgICAgICBuZXh0Ll9fcHJvdG9fXyA9
IG9iamVjdDsKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXh0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bGV0IG8gPSBtYWtlTG9uZ1Byb3RvQ2hhaW4oMzAwMDApOworICAgICAgICBmb3IgKGxldCBxIGlu
IG8pIHt9CisgICAgICAgIGBgYAorCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKToKKwogMjAyMC0xMC0xMyAg
S2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGxlZnRv
dmVyIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF9tYWNvc3ggc3VwcG9ydApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjY4NDIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzg0LDYgKzIzODQsMTIgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdAogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>