<?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>226180</bug_id>
          
          <creation_ts>2021-05-24 10:33:00 -0700</creation_ts>
          <short_desc>Allow CTI stubs to be generated off the main thread</short_desc>
          <delta_ts>2021-05-24 15:35:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>226096</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763188</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 10:33:00 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763221</commentid>
    <comment_count>1</comment_count>
      <attachid>429554</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 12:57:09 -0700</bug_when>
    <thetext>Created attachment 429554
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763248</commentid>
    <comment_count>2</comment_count>
      <attachid>429554</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-24 14:18:12 -0700</bug_when>
    <thetext>Comment on attachment 429554
patch

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

r=me

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:138
&gt; +        if (entry.needsCrossModifyingCodeFence &amp;&amp; !isCompilationThread()) {

Can you add a comment here as to why compilation threads don&apos;t need the crossModifyingCodeFence?  It isn&apos;t obvious from reading this section of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763276</commentid>
    <comment_count>3</comment_count>
      <attachid>429573</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 15:20:16 -0700</bug_when>
    <thetext>Created attachment 429573
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763283</commentid>
    <comment_count>4</comment_count>
      <attachid>429575</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 15:32:51 -0700</bug_when>
    <thetext>Created attachment 429575
[fast-cq] patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763284</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-24 15:34:27 -0700</bug_when>
    <thetext>Committed r277974 (238095@main): &lt;https://commits.webkit.org/238095@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429575.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763285</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-24 15:35:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/78422315&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429554</attachid>
            <date>2021-05-24 12:57:09 -0700</date>
            <delta_ts>2021-05-24 15:20:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24308</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDIxLTA1LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IENUSSBzdHVicyB0byBiZSBnZW5lcmF0ZWQgb2ZmIHRoZSBtYWluIHRocmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgbWFrZSB0aGlz
IHdvcmsgYnkgdHJhY2tpbmcgaWYgd2UncmUgYSBjb21waWxlciB0aHJlYWQgd2hlbiBnZW5lcmF0
aW5nCisgICAgICAgIHRoZSBDVEkgc3R1Yi4gSWYgc28sIGl0IG1lYW5zIHRoYXQgdGhlIG1haW4g
dGhyZWFkIG5lZWRzIHRvIGlzc3VlIGEKKyAgICAgICAgY3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2Ug
d2hlbiBpdCdzIGdvaW5nIHRvIHJ1biB0aGUgQ1RJIHN0dWIgZm9yIHRoZSBmaXJzdAorICAgICAg
ICB0aW1lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXMgYXdheSB3aXRo
IHByZS1nZW5lcmF0aW5nIHRodW5rcy4gVGh1bmtzIGNhbiBub3cgZ2VuZXJhdGUKKyAgICAgICAg
b3RoZXIgdGh1bmtzIHdoaWxlIHRoZXkncmUgcnVubmluZy4gVG8gZG8gdGhpcywgd2UgbWFrZSBK
SVRUaHVua3MgbG9jayBhCisgICAgICAgIHJlY3Vyc2l2ZSBsb2NrLiBUaGUgcmVhc29uIHRoaXMg
aXMgb2sgaXMgdGhhdCB3ZSBkb24ndCBoYXZlIGFueSByZWN1cnNpdmUKKyAgICAgICAgdGh1bmtz
IGluIHRoZSB0aHVuayBncmFwaC4gSXQncyBhIERBRy4KKworICAgICAgICAqIGRmZy9ERkdEcml2
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxl
ckdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjpzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgICogaml0
L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5j
dGlvbkNhbGwpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25D
b25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWJJbXBsKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpjdGlTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpj
dGlTbG93UGF0aEZ1bmN0aW9uU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6ZXhpc3Rp
bmdDVElTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpwcmVpbml0aWFs
aXplQ1RJVGh1bmtzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAg
ICAgICogaml0L1Nsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2Fs
bDo6Z2VuZXJhdGVUaHVuayk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6Cisg
ICAgICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAg
ICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIxLTA1LTI0
ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJldmVydCByMjc2NjEwIGJlY2F1c2UgaXQgY2F1c2VzIGEgMSUgUExUIHJlZ3Jlc3Np
b24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAyNzc5NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDE0ICs3OCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlSW1wbCgKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpKQogICAgICAg
ICBkYXRhTG9nKCJERkcoRHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIs
IG1vZGUsICIsIGluc3RydWN0aW9ucyBzaXplID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNT
aXplKCksICJcbiIpOwogICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0
IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwotICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0
aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAg
dm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIAog
ICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgdm0udHlwZVByb2ZpbGVyTG9nKCkt
PnByb2Nlc3NMb2dFbnRyaWVzKHZtLCAiUHJlcGFyaW5nIGZvciBERkcgY29tcGlsYXRpb24uIl9z
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1OSw3ICsxNDU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
CiAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uSGFuZGxlVHJhcHMpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRT
dHVicy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0g
dm0uZ2V0Q1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2Vu
ZXJhdG9yKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRp
b25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9j
aGVja190cmFwc19oYW5kbGVyIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjc3OTU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5MDUsNyArMTkwNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEZy
b21TY29wZSkpOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0
dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9M
b2NraW5nTmVjZXNzYXJ5KTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRo
dW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUi
KTsKIH0KQEAgLTIxMjYsNyArMjEyNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
blB1dFRvU2NvcGUpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdD
VElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Is
IE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1Yihw
b3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVy
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF90b19zY29w
ZSIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2
aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNjEgKzExNyw2MiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNh
bGwoVk0mIHZtLCBPcHRpb25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vz
c2FyeSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpj
dGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVz
ZUpJVCgpKTsKLSAgICBpZiAobm9Mb2NraW5nTmVjZXNzYXJ5KQotICAgICAgICByZXR1cm4gZXhp
c3RpbmdDVElTdHViKGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNl
c3NhcnkpLmNvZGUoKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNh
bGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtLCBP
cHRpb25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vzc2FyeSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1
bmN0aW9uQ29uc3RydWN0KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkp
OwotICAgIGlmIChub0xvY2tpbmdOZWNlc3NhcnkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ0NU
SVN0dWIoaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNz
YXJ5KS5jb2RlKCk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25z
dHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0mIHZtLCBUaHVua0dlbmVyYXRvciBnZW5l
cmF0b3IpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdGVUaHVuaz4KK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTdHViSW1wbChUaHVua0dlbmVy
YXRvciBrZXksIEdlbmVyYXRlVGh1bmsgZ2VuZXJhdGVUaHVuaykKIHsKICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9sb2NrIH07Ci0gICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jdGlT
dHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4oKSk7Ci0gICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAgICAgLy8gQ29tcGlsYXRp
b24gdGhyZWFkIGNhbiBvbmx5IHJldHJpZXZlIGV4aXN0aW5nIGVudHJpZXMuCi0gICAgICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZh
bHVlID0gZ2VuZXJhdG9yKHZtKTsKKworICAgIGF1dG8gaGFuZGxlRW50cnkgPSBbJl0gKEVudHJ5
JiBlbnRyeSkgeworICAgICAgICBpZiAoZW50cnkubmVlZHNDcm9zc01vZGlmeWluZ0NvZGVGZW5j
ZSAmJiAhaXNDb21waWxhdGlvblRocmVhZCgpKSB7CisgICAgICAgICAgICBXVEY6OmNyb3NzTW9k
aWZ5aW5nQ29kZUZlbmNlKCk7CisgICAgICAgICAgICBlbnRyeS5uZWVkc0Nyb3NzTW9kaWZ5aW5n
Q29kZUZlbmNlID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPigqZW50cnkuaGFuZGxlKTsKKyAgICB9OworCisg
ICAgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX2N0aVN0dWJNYXAuZmluZChrZXkpOworICAgICAg
ICBpZiAoaXRlciAhPSBtX2N0aVN0dWJNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaGFu
ZGxlRW50cnkoaXRlci0+dmFsdWUpOwogICAgIH0KLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3It
PnZhbHVlOwotfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRo
dW5rczo6ZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKLXsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07Ci0gICAgcmV0dXJuIGV4aXN0aW5nQ1RJU3R1YihnZW5l
cmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgLy8gV2UgZG8gdHdvIGxvb2t1cHMgb24g
Zmlyc3QgYWRkaXRpb24gdG8gdGhlIGhhc2ggdGFibGUgYmVjYXVzZSBnZW5lcmF0ZVRodW5rIG1h
eSBhZGQgdG8gaXQuCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBj
b2RlUmVmID0gZ2VuZXJhdGVUaHVuaygpOworCisgICAgYm9vbCBuZWVkc0Nyb3NzTW9kaWZ5aW5n
Q29kZUZlbmNlID0gaXNDb21waWxhdGlvblRocmVhZCgpOworICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9jdGlTdHViTWFwLmFkZChrZXksIEVudHJ5IHsgUGFja2VkUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+KGNvZGVSZWYuZXhlY3V0YWJsZU1lbW9yeSgpKSwgbmVlZHNDcm9zc01vZGlmeWlu
Z0NvZGVGZW5jZSB9KTsKKyAgICBSRUxFQVNFX0FTU0VSVChhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
IC8vIFRodW5rcyBhcmVuJ3QgcmVjdXJzaXZlLCBzbyBhbnl0aGluZyB3ZSBnZW5lcmF0ZWQgdHJh
bnNpdGl2ZWx5IHNob3VsZG4ndCBoYXZlIGdlbmVyYXRlZCAna2V5Jy4KKyAgICByZXR1cm4gaGFu
ZGxlRW50cnkoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpU3R1YihWTSYgdm0sIFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKLSAgICBDVElTdHViTWFwOjppdGVyYXRvciBlbnRyeSA9
IG1fY3RpU3R1Yk1hcC5maW5kKGdlbmVyYXRvcik7Ci0gICAgaWYgKGVudHJ5ID09IG1fY3RpU3R1
Yk1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4oKTsKLSAgICByZXR1cm4gZW50cnktPnZhbHVlOworICAgIHJldHVybiBjdGlTdHVi
SW1wbChnZW5lcmF0b3IsIFsmXSB7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3Iodm0pOworICAg
IH0pOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTbG93UGF0aEZ1bmN0aW9uU3R1
YihWTSYgdm0sIFNsb3dQYXRoRnVuY3Rpb24gc2xvd1BhdGhGdW5jdGlvbikKIHsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9sb2NrIH07CiAgICAgYXV0byBrZXkgPSBiaXR3aXNlX2Nhc3Q8VGh1bmtH
ZW5lcmF0b3I+KHNsb3dQYXRoRnVuY3Rpb24pOwotICAgIENUSVN0dWJNYXA6OkFkZFJlc3VsdCBl
bnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoa2V5LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+KCkpOwotICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KSB7Ci0gICAgICAgIC8vIENv
bXBpbGF0aW9uIHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlzdGluZyBlbnRyaWVzLgotICAg
ICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIGVudHJ5Lml0ZXJh
dG9yLT52YWx1ZSA9IEpJVFNsb3dQYXRoQ2FsbDo6Z2VuZXJhdGVUaHVuayh2bSwgc2xvd1BhdGhG
dW5jdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CisgICAg
cmV0dXJuIGN0aVN0dWJJbXBsKGtleSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIEpJVFNsb3dQYXRo
Q2FsbDo6Z2VuZXJhdGVUaHVuayh2bSwgc2xvd1BhdGhGdW5jdGlvbik7CisgICAgfSk7CiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2MiwxMzMgKzI2Myw2IEBA
IE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KICAgICByZXR1cm4gaG9z
dEZ1bmN0aW9uU3R1Yih2bSwgZnVuY3Rpb24sIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
LCBnZW5lcmF0b3IsIGludHJpbnNpYywgbnVsbHB0ciwgbmFtZSk7CiB9CiAKLXZvaWQgSklUVGh1
bmtzOjpwcmVpbml0aWFsaXplQ1RJVGh1bmtzKFZNJiB2bSkKLXsKLSAgICBpZiAoIU9wdGlvbnM6
OnVzZUpJVCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICAvLyBUaGVzZSA0IHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgZmlyc3QgaW4g
dGhlIGZvbGxvd2luZyBvcmRlciBiZWNhdXNlCi0gICAgLy8gdGhlIG90aGVyIHRodW5rIGdlbmVy
YXRvcnMgcmVseSBvbiB0aGVzZSBhbHJlYWR5IGJlaW5nIGluaXRpYWxpemVkLgotICAgIGN0aVN0
dWIodm0sIGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgaGFuZGxl
RXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZt
LCBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKLSAg
ICBjdGlTdHViKHZtLCBjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcik7Ci0KLSNkZWZpbmUgSU5JVF9C
QVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5hbWUpIGN0aVNsb3dQYXRoRnVuY3Rpb25T
dHViKHZtLCBzbG93X3BhdGhfIyNuYW1lKQotCi0gICAgLy8gRnJvbSB0aGUgQmFzZWxpbmVKSVQg
REVGSU5FX1NMT1dfT1AgbGlzdDoKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JP
VVRJTkUoaW5fYnlfdmFsKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJ
TkUoaGFzX3ByaXZhdGVfbmFtZSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9S
T1VUSU5FKGhhc19wcml2YXRlX2JyYW5kKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9D
QUxMX1JPVVRJTkUobGVzcyk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VU
SU5FKGxlc3NlcSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGdy
ZWF0ZXIpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShncmVhdGVy
ZXEpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShpc19jYWxsYWJs
ZSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGlzX2NvbnN0cnVj
dG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodHlwZW9mKTsK
LSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodHlwZW9mX2lzX29iamVj
dCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHR5cGVvZl9pc19m
dW5jdGlvbik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHN0cmNh
dCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHB1c2hfd2l0aF9z
Y29wZSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JP
VVRJTkUoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORShwdXRfYnlfaWRfd2l0aF90aGlzKTsKLSAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUocHV0X2J5X3ZhbF93aXRoX3RoaXMpOwotICAgIElOSVRfQkFT
RUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19m
dW5jX2RlY2xfaW5fZXZhbCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VU
SU5FKGRlZmluZV9kYXRhX3Byb3BlcnR5KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9D
QUxMX1JPVVRJTkUoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KTsKLSAgICBJTklUX0JBU0VMSU5F
X1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodW5yZWFjaGFibGUpOwotICAgIElOSVRfQkFTRUxJTkVf
U0xPV19QQVRIX0NBTExfUk9VVElORSh0aHJvd19zdGF0aWNfZXJyb3IpOwotICAgIElOSVRfQkFT
RUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShuZXdfYXJyYXlfd2l0aF9zcHJlYWQpOwotICAg
IElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShuZXdfYXJyYXlfYnVmZmVyKTsK
LSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoc3ByZWFkKTsKLSAgICBJ
TklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoaGFzX2VudW1lcmFi
bGVfcHJvcGVydHkpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShn
ZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FM
TF9ST1VUSU5FKHRvX2luZGV4X3N0cmluZyk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhf
Q0FMTF9ST1VUSU5FKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsKLSAgICBJTklUX0JBU0VMSU5F
X1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpOwotICAgIElO
SVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjcmVhdGVfY2xvbmVkX2FyZ3VtZW50
cyk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV9hcmd1
bWVudHNfYnV0dGVyZmx5KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJ
TkUoY3JlYXRlX3Jlc3QpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElO
RShjcmVhdGVfcHJvbWlzZSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VU
SU5FKG5ld19wcm9taXNlKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJ
TkUoY3JlYXRlX2dlbmVyYXRvcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9S
T1VUSU5FKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19Q
QVRIX0NBTExfUk9VVElORShuZXdfZ2VuZXJhdG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1df
UEFUSF9DQUxMX1JPVVRJTkUocG93KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxM
X1JPVVRJTkUobW9kKTsKLQotICAgIGN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKHZtLCBpdGVyYXRv
cl9vcGVuX3RyeV9mYXN0X25hcnJvdyk7Ci0gICAgY3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0s
IGl0ZXJhdG9yX29wZW5fdHJ5X2Zhc3Rfd2lkZTE2KTsKLSAgICBjdGlTbG93UGF0aEZ1bmN0aW9u
U3R1Yih2bSwgaXRlcmF0b3Jfb3Blbl90cnlfZmFzdF93aWRlMzIpOwotICAgIGN0aVNsb3dQYXRo
RnVuY3Rpb25TdHViKHZtLCBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdyk7Ci0gICAgY3Rp
U2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3Rfd2lkZTE2KTsK
LSAgICBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1Yih2bSwgaXRlcmF0b3JfbmV4dF90cnlfZmFzdF93
aWRlMzIpOwotCi0gICAgLy8gRnJvbSB0aGUgQmFzZWxpbmVKSVQgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AgbGlzdDoKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodW5z
aWduZWQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShpbmMpOwot
ICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShkZWMpOwotICAgIElOSVRf
QkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShiaXRub3QpOwotICAgIElOSVRfQkFTRUxJ
TkVfU0xPV19QQVRIX0NBTExfUk9VVElORShiaXRhbmQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xP
V19QQVRIX0NBTExfUk9VVElORShiaXRvcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhf
Q0FMTF9ST1VUSU5FKGJpdHhvcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9S
T1VUSU5FKGxzaGlmdCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5F
KHJzaGlmdCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHVyc2hp
ZnQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShkaXYpOwotICAg
IElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjcmVhdGVfdGhpcyk7Ci0gICAg
SU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV9wcm9taXNlKTsKLSAg
ICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY3JlYXRlX2dlbmVyYXRvcik7
Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV9hc3luY19n
ZW5lcmF0b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0b190
aGlzKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodG9fcHJpbWl0
aXZlKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodG9fbnVtYmVy
KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodG9fbnVtZXJpYyk7
Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRvX3N0cmluZyk7Ci0g
ICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRvX29iamVjdCk7Ci0gICAg
SU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5vdCk7Ci0gICAgSU5JVF9CQVNF
TElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHN0cmljdGVxKTsKLSAgICBJTklUX0JBU0VMSU5F
X1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUobnN0cmljdGVxKTsKLSAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUoZ2V0X2RpcmVjdF9wbmFtZSk7Ci0gICAgSU5JVF9CQVNFTElO
RV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGdldF9wcm90b3R5cGVfb2YpOwotICAgIElOSVRfQkFT
RUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHkpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShoYXNfb3du
X3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9S
T1VUSU5FKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BB
VEhfQ0FMTF9ST1VUSU5FKHJlc29sdmVfc2NvcGUpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19Q
QVRIX0NBTExfUk9VVElORShjaGVja190ZHopOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORSh0b19wcm9wZXJ0eV9rZXkpOwotCi0gICAgSU5JVF9CQVNFTElORV9TTE9X
X1BBVEhfQ0FMTF9ST1VUSU5FKHRocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dy
aXRlX2Vycm9yKTsKLSN1bmRlZiBJTklUX0JBU0VMSU5FX1JPVVRJTkUKLQotICAgIC8vIEZyb20g
dGhlIEJhc2VsaW5lSklUIERFRklORV9TTE9XQ0FTRV9PUCBsaXN0OgotICAgIGN0aVN0dWIodm0s
IEpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwotICAgIGN0aVN0
dWIodm0sIEpJVDo6c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKLSAg
ICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KTsKLSAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVw
YXJlQ2FsbEdlbmVyYXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX2dl
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwotICAgIGN0aVN0dWIodm0sIEpJ
VDo6c2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwotICAgIGN0aVN0dWIo
dm0sIEpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKLSAgICBj
dGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRv
cik7Ci0KLSAgICBjdGlTdHViKHZtLCBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0
b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcik7Ci0g
ICAgY3RpU3R1Yih2bSwgSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcik7Ci0gICAgY3RpU3R1
Yih2bSwgSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKTsKLSNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLQotICAgIGN0aVN0dWIodm0sIGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpOwotICAgIGN0aVN0dWIodm0sIGFyaXR5Rml4dXBHZW5lcmF0b3IpOwotfQotCi0KIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuaAkocmV2aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBA
QAogI2luY2x1ZGUgPHR1cGxlPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFja2VkUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUzLDE4ICs1NSwxNCBAQCBwdWJsaWM6CiAgICAg
SklUVGh1bmtzKCk7CiAgICAgfkpJVFRodW5rcygpIGZpbmFsOwogCi0gICAgdm9pZCBwcmVpbml0
aWFsaXplQ1RJVGh1bmtzKFZNJik7Ci0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwoVk0mKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSYpOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGwoVk0mKTsKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsV2l0
aG91dFNhdmVkVGFncyhWTSYpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mLCBPcHRpb25hbDxOb0xvY2tpbmdOZWNl
c3NhcnlUYWc+ID0gV1RGOjpudWxsb3B0KTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mLCBPcHRpb25hbDxO
b0xvY2tpbmdOZWNlc3NhcnlUYWc+ID0gV1RGOjpudWxsb3B0KTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0
aW9uQ29uc3RydWN0KFZNJik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IpOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdDVElTdHVi
KFRodW5rR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnlUYWcpOwogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIoVk0mLCBTbG93UGF0aEZ1bmN0aW9uKTsKICNlbmRpZgpA
QCAtNzQsOSArNzIsMTYgQEAgcHVibGljOgogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5j
dGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIEludHJp
bnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdGVUaHVuaz4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGN0aVN0dWJJbXBsKFRodW5rR2VuZXJhdG9yIGtleSwgR2VuZXJhdGVUaHVuayk7CisK
ICAgICB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgZmluYWw7
CiAgICAgCi0gICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBDVElTdHViTWFwOworICAgIHN0cnVjdCBFbnRyeSB7
CisgICAgICAgIFBhY2tlZFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBoYW5kbGU7Cisg
ICAgICAgIGJvb2wgbmVlZHNDcm9zc01vZGlmeWluZ0NvZGVGZW5jZTsKKyAgICB9OworICAgIHVz
aW5nIENUSVN0dWJNYXAgPSBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBFbnRyeT47CiAgICAgQ1RJ
U3R1Yk1hcCBtX2N0aVN0dWJNYXA7CiAKICAgICB1c2luZyBIb3N0RnVuY3Rpb25LZXkgPSBzdGQ6
OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5n
PjsKQEAgLTExNiw3ICsxMjEsOCBAQCBwcml2YXRlOgogCiAgICAgdXNpbmcgV2Vha05hdGl2ZUV4
ZWN1dGFibGVTZXQgPSBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4sIFdlYWtOYXRpdmVF
eGVjdXRhYmxlSGFzaD47CiAgICAgV2Vha05hdGl2ZUV4ZWN1dGFibGVTZXQgbV9uYXRpdmVFeGVj
dXRhYmxlU2V0OwotICAgIExvY2sgbV9sb2NrOworCisgICAgV1RGOjpSZWN1cnNpdmVMb2NrIG1f
bG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMjc3OTU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICNlbmRp
ZgogICAgIGppdC5yZXQoKTsKIAotICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlz
dGluZ0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElT
dHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHNsb3dQYXRoRnVuY3Rpb24pKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlz
aW9uIDI3Nzk1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHBvCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlv
biA9IGppdC5qdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRv
IGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRD
VElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFu
ZGxlcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwpAQCAtMTMyLDcgKzEzMiw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2gKICNlbmRpZgogCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0
cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIoaGFuZGxlckdlbmVyYXRv
ciwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0
Q1RJU3R1YihoYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJDaGVj
a0V4Y2VwdGlvbiIpOwogfQogCkBAIC0zMjQsNyArMzI0LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0cgogICAgIC8vIE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgZG9l
cyBub3QgZ2V0IHRoZSBmYXN0IHBhdGggc3VwcG9ydC4gQnV0IGl0IGlzIE9LIHNpbmNlIHVzaW5n
IE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgaXMgZXh0cmVtZWx5IHJhcmUuCiAgICAgbm90SlNGdW5j
dGlvbi5saW5rKCZqaXQpOwogICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUeXBl
KEdQUkluZm86OnJlZ1QwLCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSkpOwotICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2lu
ZCwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Io
a2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZXhlY3V0YWJsZUFkZHJlc3MpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgaml0
Lmp1bXAoKS5saW5rVG8oY2FsbENvZGUsICZqaXQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyNzc5NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw4ICs1NjcsNiBAQCBWTTo6
Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUsCiAjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCiAgICAgICAgIGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVG
b3JDYWxsKTsKICAgICAgICAgZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29k
ZUZvckNvbnN0cnVjdCk7Ci0KLSAgICAgICAgaml0U3R1YnMtPnByZWluaXRpYWxpemVDVElUaHVu
a3MoKnRoaXMpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC04ODgsMTQgKzg4
NiwxMyBAQCBOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0Qm91bmRGdW5jdGlvbihiCiAgICAgcmV0
dXJuIGdldE9yQ3JlYXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1w
b2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBPcHRpb25hbDxOb0xvY2tpbmdO
ZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vzc2FyeSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewotICAgIFVOVVNFRF9QQVJBTShub0xvY2tpbmdO
ZWNlc3NhcnkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7
CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIGpp
dFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCgqdGhpcywgbm9Mb2NraW5nTmVjZXNzYXJ5
KS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0
aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoKnRoaXMsIG5vTG9ja2luZ05lY2Vzc2FyeSkucmV0
YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyAgICAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3Rp
SW50ZXJuYWxGdW5jdGlvbkNhbGwoKnRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Cisg
ICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCgqdGhp
cykucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtODUxLDcgKzg1MSw3IEBAIHB1YmxpYzoKIAogICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29uc3Ry
dWN0KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJ
bnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBPcHRp
b25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+ID0gV1RGOjpudWxsb3B0KTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1w
b2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IGV4Y2VwdGlvbk9mZnNldCgpCiAgICAgewo=
</data>
<flag name="review"
          id="450768"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429573</attachid>
            <date>2021-05-24 15:20:16 -0700</date>
            <delta_ts>2021-05-24 15:32:51 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24829</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDIxLTA1LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IENUSSBzdHVicyB0byBiZSBnZW5lcmF0ZWQgb2ZmIHRoZSBtYWluIHRocmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgV2UgbWFrZSB0aGlzIHdvcmsg
YnkgdHJhY2tpbmcgaWYgd2UncmUgYSBjb21waWxlciB0aHJlYWQgd2hlbiBnZW5lcmF0aW5nCisg
ICAgICAgIHRoZSBDVEkgc3R1Yi4gSWYgc28sIGl0IG1lYW5zIHRoYXQgdGhlIG1haW4gdGhyZWFk
IG5lZWRzIHRvIGlzc3VlIGEKKyAgICAgICAgY3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2Ugd2hlbiBp
dCdzIGdvaW5nIHRvIHJ1biB0aGUgQ1RJIHN0dWIgZm9yIHRoZSBmaXJzdAorICAgICAgICB0aW1l
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXMgYXdheSB3aXRoIHByZS1n
ZW5lcmF0aW5nIHRodW5rcy4gVGh1bmtzIGNhbiBub3cgZ2VuZXJhdGUKKyAgICAgICAgb3RoZXIg
dGh1bmtzIHdoaWxlIHRoZXkncmUgcnVubmluZy4gVG8gZG8gdGhpcywgd2UgbWFrZSBKSVRUaHVu
a3MgbG9jayBhCisgICAgICAgIHJlY3Vyc2l2ZSBsb2NrLiBUaGUgcmVhc29uIHRoaXMgaXMgb2sg
aXMgdGhhdCB3ZSBkb24ndCBoYXZlIGFueSByZWN1cnNpdmUKKyAgICAgICAgdGh1bmtzIGluIHRo
ZSB0aHVuayBncmFwaC4gSXQncyBhIERBRy4KKworICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
SklUOjpzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVFRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNh
bGwpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWJJbXBsKToKKyAgICAgICAgKEpT
Qzo6SklUVGh1bmtzOjpjdGlTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlTbG93
UGF0aEZ1bmN0aW9uU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6ZXhpc3RpbmdDVElT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpwcmVpbml0aWFsaXplQ1RJ
VGh1bmtzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgICog
aml0L1Nsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Z2Vu
ZXJhdGVUaHVuayk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAg
IChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJh
bXBvbGluZUZvcik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIxLTA1LTI0ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJldmVydCByMjc2NjEwIGJlY2F1c2UgaXQgY2F1c2VzIGEgMSUgUExUIHJlZ3Jlc3Npb24uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAyNzc5
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDE0ICs3OCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
SW1wbCgKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpKQogICAgICAgICBkYXRh
TG9nKCJERkcoRHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIsIG1vZGUs
ICIsIGluc3RydWN0aW9ucyBzaXplID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCks
ICJcbiIpOwogICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0IHRoZSBE
RkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwotICAgIC8vIG1h
a2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9u
IHRoZSBtYWluIHRocmVhZC4KLSAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3Ip
OwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7Ci0g
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
OwotICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgdm0uZ2V0
Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIAogICAgIGlm
ICh2bS50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nl
c3NMb2dFbnRyaWVzKHZtLCAiUHJlcGFyaW5nIGZvciBERkcgY29tcGlsYXRpb24uIl9zKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ1OSw3ICsxNDU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSGFuZGxlVHJhcHMpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+
ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0
Q1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJl
bChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9jaGVja190
cmFwc19oYW5kbGVyIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MDUsNyArMTkwNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEZyb21TY29w
ZSkpOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIocG9w
VGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5n
TmVjZXNzYXJ5KTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0K
QEAgLTIxMjYsNyArMjEyNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblB1dFRv
U2NvcGUpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9j
a2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1Yihwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF90b19zY29wZSIpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24g
Mjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNjEgKzExNyw2OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0
aG91dFNhdmVkVGFnc0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0m
IHZtLCBPcHRpb25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vzc2FyeSkK
K01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRl
cm5hbEZ1bmN0aW9uQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgp
KTsKLSAgICBpZiAobm9Mb2NraW5nTmVjZXNzYXJ5KQotICAgICAgICByZXR1cm4gZXhpc3RpbmdD
VElTdHViKGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3Nhcnkp
LmNvZGUoKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5l
cmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtLCBPcHRpb25h
bDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vzc2FyeSkKK01hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9u
Q29uc3RydWN0KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwotICAg
IGlmIChub0xvY2tpbmdOZWNlc3NhcnkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ0NUSVN0dWIo
aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5j
b2RlKCk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RH
ZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0mIHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Ip
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdGVUaHVuaz4KK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTdHViSW1wbChUaHVua0dlbmVyYXRvciBr
ZXksIEdlbmVyYXRlVGh1bmsgZ2VuZXJhdGVUaHVuaykKIHsKICAgICBMb2NrZXIgbG9ja2VyIHsg
bV9sb2NrIH07Ci0gICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jdGlTdHViTWFw
LmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4oKSk7
Ci0gICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAgICAgLy8gQ29tcGlsYXRpb24gdGhy
ZWFkIGNhbiBvbmx5IHJldHJpZXZlIGV4aXN0aW5nIGVudHJpZXMuCi0gICAgICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0g
Z2VuZXJhdG9yKHZtKTsKKworICAgIGF1dG8gaGFuZGxlRW50cnkgPSBbJl0gKEVudHJ5JiBlbnRy
eSkgeworICAgICAgICBpZiAoZW50cnkubmVlZHNDcm9zc01vZGlmeWluZ0NvZGVGZW5jZSAmJiAh
aXNDb21waWxhdGlvblRocmVhZCgpKSB7CisgICAgICAgICAgICAvLyBDb21waWxlciB0aHJlYWRz
IHdpbGwgaXNzdWUgYSBjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSBiZWZvcmUKKyAgICAgICAgICAg
IC8vIHJ1bm5pbmcgYW55IGNvZGUgdGhleSBnZW5lcmF0ZSwgaW5jbHVkaW5nIGFueSB0aHVua3Mg
dGhhdCB0aGV5CisgICAgICAgICAgICAvLyBnZW5lcmF0ZS4gSG93ZXZlciwgdGhlIG1haW4gdGhy
ZWFkIG1heSBncmFiIHRoZSB0aHVuayBhIGNvbXBpbGVyCisgICAgICAgICAgICAvLyB0aHJlYWQg
Z2VuZXJhdGVkIGJlZm9yZSB3ZSd2ZSBpc3N1ZWQgdGhhdCBjcm9zc01vZGlmeWluZ0NvZGVGZW5j
ZS4KKyAgICAgICAgICAgIC8vIEhlbmNlLCB3ZSBjb25zZXJ2YXRpdmVseSBzYXkgdGhhdCB3aGVu
IHRoZSBtYWluIHRocmVhZCBncmFicworICAgICAgICAgICAgLy8gYSB0aHVuayBnZW5lcmF0ZWQg
ZnJvbSBhIGNvbXBpbGVyIHRocmVhZCBmb3IgdGhlIGZpcnN0IHRpbWUsCisgICAgICAgICAgICAv
LyBpdCBpc3N1ZXMgYSBjcm9zc01vZGlmeWluZ0NvZGVGZW5jZS4KKyAgICAgICAgICAgIFdURjo6
Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKKyAgICAgICAgICAgIGVudHJ5Lm5lZWRzQ3Jvc3NN
b2RpZnlpbmdDb2RlRmVuY2UgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCplbnRyeS5oYW5kbGUpOworICAg
IH07CisKKyAgICB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fY3RpU3R1Yk1hcC5maW5kKGtleSk7
CisgICAgICAgIGlmIChpdGVyICE9IG1fY3RpU3R1Yk1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBoYW5kbGVFbnRyeShpdGVyLT52YWx1ZSk7CiAgICAgfQotICAgIHJldHVybiBlbnRyeS5p
dGVyYXRvci0+dmFsdWU7Ci19CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQot
ewotICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICByZXR1cm4gZXhpc3RpbmdDVElT
dHViKGdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICAvLyBXZSBkbyB0d28gbG9v
a3VwcyBvbiBmaXJzdCBhZGRpdGlvbiB0byB0aGUgaGFzaCB0YWJsZSBiZWNhdXNlIGdlbmVyYXRl
VGh1bmsgbWF5IGFkZCB0byBpdC4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNvZGVSZWYgPSBnZW5lcmF0ZVRodW5rKCk7CisKKyAgICBib29sIG5lZWRzQ3Jvc3NN
b2RpZnlpbmdDb2RlRmVuY2UgPSBpc0NvbXBpbGF0aW9uVGhyZWFkKCk7CisgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2N0aVN0dWJNYXAuYWRkKGtleSwgRW50cnkgeyBQYWNrZWRSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4oY29kZVJlZi5leGVjdXRhYmxlTWVtb3J5KCkpLCBuZWVkc0Nyb3Nz
TW9kaWZ5aW5nQ29kZUZlbmNlIH0pOworICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05l
d0VudHJ5KTsgLy8gVGh1bmtzIGFyZW4ndCByZWN1cnNpdmUsIHNvIGFueXRoaW5nIHdlIGdlbmVy
YXRlZCB0cmFuc2l0aXZlbHkgc2hvdWxkbid0IGhhdmUgZ2VuZXJhdGVkICdrZXknLgorICAgIHJl
dHVybiBoYW5kbGVFbnRyeShhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1
YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTdHViKFZNJiB2
bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIENUSVN0dWJNYXA6Oml0ZXJhdG9y
IGVudHJ5ID0gbV9jdGlTdHViTWFwLmZpbmQoZ2VuZXJhdG9yKTsKLSAgICBpZiAoZW50cnkgPT0g
bV9jdGlTdHViTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPigpOwotICAgIHJldHVybiBlbnRyeS0+dmFsdWU7CisgICAgcmV0dXJu
IGN0aVN0dWJJbXBsKGdlbmVyYXRvciwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvcih2
bSk7CisgICAgfSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVNsb3dQYXRoRnVu
Y3Rpb25TdHViKFZNJiB2bSwgU2xvd1BhdGhGdW5jdGlvbiBzbG93UGF0aEZ1bmN0aW9uKQogewot
ICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKICAgICBhdXRvIGtleSA9IGJpdHdpc2VfY2Fz
dDxUaHVua0dlbmVyYXRvcj4oc2xvd1BhdGhGdW5jdGlvbik7Ci0gICAgQ1RJU3R1Yk1hcDo6QWRk
UmVzdWx0IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChrZXksIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4oKSk7Ci0gICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgLy8gQ29tcGlsYXRpb24gdGhyZWFkIGNhbiBvbmx5IHJldHJpZXZlIGV4aXN0aW5nIGVudHJp
ZXMuCi0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgZW50
cnkuaXRlcmF0b3ItPnZhbHVlID0gSklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKHZtLCBz
bG93UGF0aEZ1bmN0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1
ZTsKKyAgICByZXR1cm4gY3RpU3R1YkltcGwoa2V5LCBbJl0geworICAgICAgICByZXR1cm4gSklU
U2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKHZtLCBzbG93UGF0aEZ1bmN0aW9uKTsKKyAgICB9
KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjYyLDEzMyAr
MjcwLDYgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogICAgIHJl
dHVybiBob3N0RnVuY3Rpb25TdHViKHZtLCBmdW5jdGlvbiwgY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IsIGdlbmVyYXRvciwgaW50cmluc2ljLCBudWxscHRyLCBuYW1lKTsKIH0KIAotdm9p
ZCBKSVRUaHVua3M6OnByZWluaXRpYWxpemVDVElUaHVua3MoVk0mIHZtKQotewotICAgIGlmICgh
T3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIC8vIFRoZXNlIDQgc2hvdWxkIGFsd2F5cyBiZSBpbml0aWFsaXplZCBm
aXJzdCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIGJlY2F1c2UKLSAgICAvLyB0aGUgb3RoZXIgdGh1
bmsgZ2VuZXJhdG9ycyByZWx5IG9uIHRoZXNlIGFscmVhZHkgYmVpbmcgaW5pdGlhbGl6ZWQuCi0g
ICAgY3RpU3R1Yih2bSwgaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZt
LCBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IpOwotICAgIGN0
aVN0dWIodm0sIHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpOwotICAgIGN0aVN0dWIodm0sIGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKTsKLQotI2RlZmlu
ZSBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUobmFtZSkgY3RpU2xvd1BhdGhG
dW5jdGlvblN0dWIodm0sIHNsb3dfcGF0aF8jI25hbWUpCi0KLSAgICAvLyBGcm9tIHRoZSBCYXNl
bGluZUpJVCBERUZJTkVfU0xPV19PUCBsaXN0OgotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORShpbl9ieV92YWwpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NB
TExfUk9VVElORShoYXNfcHJpdmF0ZV9uYW1lKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFU
SF9DQUxMX1JPVVRJTkUoaGFzX3ByaXZhdGVfYnJhbmQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xP
V19QQVRIX0NBTExfUk9VVElORShsZXNzKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9D
QUxMX1JPVVRJTkUobGVzc2VxKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JP
VVRJTkUoZ3JlYXRlcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5F
KGdyZWF0ZXJlcSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGlz
X2NhbGxhYmxlKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoaXNf
Y29uc3RydWN0b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0
eXBlb2YpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0eXBlb2Zf
aXNfb2JqZWN0KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodHlw
ZW9mX2lzX2Z1bmN0aW9uKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJ
TkUoc3RyY2F0KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUocHVz
aF93aXRoX3Njb3BlKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUo
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORShnZXRfYnlfdmFsX3dpdGhfdGhpcyk7Ci0gICAgSU5JVF9CQVNFTElORV9T
TE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHB1dF9ieV9pZF93aXRoX3RoaXMpOwotICAgIElOSVRfQkFT
RUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShwdXRfYnlfdmFsX3dpdGhfdGhpcyk7Ci0gICAg
SU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHJlc29sdmVfc2NvcGVfZm9yX2hv
aXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9D
QUxMX1JPVVRJTkUoZGVmaW5lX2RhdGFfcHJvcGVydHkpOwotICAgIElOSVRfQkFTRUxJTkVfU0xP
V19QQVRIX0NBTExfUk9VVElORShkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpOwotICAgIElOSVRf
QkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh1bnJlYWNoYWJsZSk7Ci0gICAgSU5JVF9C
QVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRocm93X3N0YXRpY19lcnJvcik7Ci0gICAg
SU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5ld19hcnJheV93aXRoX3NwcmVh
ZCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5ld19hcnJheV9i
dWZmZXIpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShzcHJlYWQp
OwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShnZXRfZW51bWVyYWJs
ZV9sZW5ndGgpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShoYXNf
ZW51bWVyYWJsZV9wcm9wZXJ0eSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9S
T1VUSU5FKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1df
UEFUSF9DQUxMX1JPVVRJTkUodG9faW5kZXhfc3RyaW5nKTsKLSAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpOwotICAgIElOSVRf
QkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyk7
Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV9jbG9uZWRf
YXJndW1lbnRzKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY3Jl
YXRlX2FyZ3VtZW50c19idXR0ZXJmbHkpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NB
TExfUk9VVElORShjcmVhdGVfcmVzdCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FM
TF9ST1VUSU5FKGNyZWF0ZV9wcm9taXNlKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9D
QUxMX1JPVVRJTkUobmV3X3Byb21pc2UpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NB
TExfUk9VVElORShjcmVhdGVfZ2VuZXJhdG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFU
SF9DQUxMX1JPVVRJTkUoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcik7Ci0gICAgSU5JVF9CQVNFTElO
RV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5ld19nZW5lcmF0b3IpOwotICAgIElOSVRfQkFTRUxJ
TkVfU0xPV19QQVRIX0NBTExfUk9VVElORShwb3cpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19Q
QVRIX0NBTExfUk9VVElORShtb2QpOwotCi0gICAgY3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0s
IGl0ZXJhdG9yX29wZW5fdHJ5X2Zhc3RfbmFycm93KTsKLSAgICBjdGlTbG93UGF0aEZ1bmN0aW9u
U3R1Yih2bSwgaXRlcmF0b3Jfb3Blbl90cnlfZmFzdF93aWRlMTYpOwotICAgIGN0aVNsb3dQYXRo
RnVuY3Rpb25TdHViKHZtLCBpdGVyYXRvcl9vcGVuX3RyeV9mYXN0X3dpZGUzMik7Ci0gICAgY3Rp
U2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93KTsK
LSAgICBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1Yih2bSwgaXRlcmF0b3JfbmV4dF90cnlfZmFzdF93
aWRlMTYpOwotICAgIGN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKHZtLCBpdGVyYXRvcl9uZXh0X3Ry
eV9mYXN0X3dpZGUzMik7Ci0KLSAgICAvLyBGcm9tIHRoZSBCYXNlbGluZUpJVCBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUCBsaXN0OgotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9V
VElORSh1bnNpZ25lZCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5F
KGluYyk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGRlYyk7Ci0g
ICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGJpdG5vdCk7Ci0gICAgSU5J
VF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGJpdGFuZCk7Ci0gICAgSU5JVF9CQVNF
TElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGJpdG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUoYml0eG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFU
SF9DQUxMX1JPVVRJTkUobHNoaWZ0KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxM
X1JPVVRJTkUocnNoaWZ0KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJ
TkUodXJzaGlmdCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGRp
dik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV90aGlz
KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY3JlYXRlX3Byb21p
c2UpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjcmVhdGVfZ2Vu
ZXJhdG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY3JlYXRl
X2FzeW5jX2dlbmVyYXRvcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VU
SU5FKHRvX3RoaXMpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0
b19wcmltaXRpdmUpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0
b19udW1iZXIpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0b19u
dW1lcmljKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodG9fc3Ry
aW5nKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodG9fb2JqZWN0
KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUobm90KTsKLSAgICBJ
TklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoc3RyaWN0ZXEpOwotICAgIElOSVRf
QkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShuc3RyaWN0ZXEpOwotICAgIElOSVRfQkFT
RUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShnZXRfZGlyZWN0X3BuYW1lKTsKLSAgICBJTklU
X0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoZ2V0X3Byb3RvdHlwZV9vZik7Ci0gICAg
SU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGhhc19lbnVtZXJhYmxlX3N0cnVj
dHVyZV9wcm9wZXJ0eSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5F
KGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFU
SF9DQUxMX1JPVVRJTkUoaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsKLSAgICBJTklUX0JBU0VMSU5F
X1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUocmVzb2x2ZV9zY29wZSk7Ci0gICAgSU5JVF9CQVNFTElO
RV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNoZWNrX3Rkeik7Ci0gICAgSU5JVF9CQVNFTElORV9T
TE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRvX3Byb3BlcnR5X2tleSk7Ci0KLSAgICBJTklUX0JBU0VM
SU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJv
cGVydHlfd3JpdGVfZXJyb3IpOwotI3VuZGVmIElOSVRfQkFTRUxJTkVfUk9VVElORQotCi0gICAg
Ly8gRnJvbSB0aGUgQmFzZWxpbmVKSVQgREVGSU5FX1NMT1dDQVNFX09QIGxpc3Q6Ci0gICAgY3Rp
U3R1Yih2bSwgSklUOjpzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7Ci0g
ICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3Bf
Z2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZtLCBKSVQ6OnNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7Ci0gICAgY3RpU3R1
Yih2bSwgSklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7Ci0gICAg
Y3RpU3R1Yih2bSwgSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
OwotICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3Bl
R2VuZXJhdG9yKTsKLQotICAgIGN0aVN0dWIodm0sIEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxl
ckdlbmVyYXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJh
dG9yKTsKLSAgICBjdGlTdHViKHZtLCBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTsKLSAg
ICBjdGlTdHViKHZtLCBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IpOwotI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi0gICAgY3RpU3R1Yih2bSwgbGlua0NhbGxUaHVu
a0dlbmVyYXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgYXJpdHlGaXh1cEdlbmVyYXRvcik7Ci19Ci0K
LQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCShyZXZpc2lvbiAyNzc5NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw4IEBACiAjaW5jbHVkZSA8dHVwbGU+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYWNrZWRSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTMsMTggKzU1LDE0IEBAIHB1Ymxp
YzoKICAgICBKSVRUaHVua3MoKTsKICAgICB+SklUVGh1bmtzKCkgZmluYWw7CiAKLSAgICB2b2lk
IHByZWluaXRpYWxpemVDVElUaHVua3MoVk0mKTsKLQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlQ2FsbChWTSYpOwogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlQ29uc3RydWN0KFZNJik7CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbChWTSYp
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSYsIE9wdGlvbmFsPE5vTG9j
a2luZ05lY2Vzc2FyeVRhZz4gPSBXVEY6Om51bGxvcHQpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYsIE9w
dGlvbmFsPE5vTG9ja2luZ05lY2Vzc2FyeVRhZz4gPSBXVEY6Om51bGxvcHQpOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwo
Vk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVy
bmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gY3RpU3R1YihWTSYsIFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVy
YXRvcik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlzdGlu
Z0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeVRhZyk7CiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24pOwog
I2VuZGlmCkBAIC03NCw5ICs3MiwxNiBAQCBwdWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSog
aG9zdEZ1bmN0aW9uU3R1YihWTSYsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
ciwgSW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiBwcml2YXRlOgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0ZVRodW5rPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gY3RpU3R1YkltcGwoVGh1bmtHZW5lcmF0b3Iga2V5LCBHZW5lcmF0ZVRo
dW5rKTsKKwogICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
KSBmaW5hbDsKICAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IENUSVN0dWJNYXA7CisgICAgc3RydWN0
IEVudHJ5IHsKKyAgICAgICAgUGFja2VkUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGhh
bmRsZTsKKyAgICAgICAgYm9vbCBuZWVkc0Nyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlOworICAgIH07
CisgICAgdXNpbmcgQ1RJU3R1Yk1hcCA9IEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIEVudHJ5PjsK
ICAgICBDVElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKIAogICAgIHVzaW5nIEhvc3RGdW5jdGlvbktl
eSA9IHN0ZDo6dHVwbGU8VGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9u
LCBTdHJpbmc+OwpAQCAtMTE2LDcgKzEyMSw4IEBAIHByaXZhdGU6CiAKICAgICB1c2luZyBXZWFr
TmF0aXZlRXhlY3V0YWJsZVNldCA9IEhhc2hTZXQ8V2VhazxOYXRpdmVFeGVjdXRhYmxlPiwgV2Vh
a05hdGl2ZUV4ZWN1dGFibGVIYXNoPjsKICAgICBXZWFrTmF0aXZlRXhlY3V0YWJsZVNldCBtX25h
dGl2ZUV4ZWN1dGFibGVTZXQ7Ci0gICAgTG9jayBtX2xvY2s7CisKKyAgICBXVEY6OlJlY3Vyc2l2
ZUxvY2sgbV9sb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAyNzc5NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDcgKzg0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogI2VuZGlmCiAgICAgaml0LnJldCgpOwogCi0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1
YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0
aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIGF1dG8gaGFuZGxlciA9IHZt
LmdldENUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcik7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oc2xvd1BhdGhGdW5jdGlvbikp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkocmV2aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG8KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29u
dGludWF0aW9uID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwot
ICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIoaGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIGF1dG8gaGFuZGxlciA9
IHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKICAgICBSRUxFQVNFX0FT
U0VSVChoYW5kbGVyKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0
YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7CkBAIC0xMzIsNyArMTMyLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaAogI2VuZGlmCiAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwodm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1YihoYW5kbGVy
R2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bCh2bS5nZXRDVElTdHViKGhhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkNoZWNrRXhjZXB0aW9uIik7CiB9CiAKQEAgLTMyNCw3ICszMjQsNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAgICAgLy8gTnVsbFNldHRlckZ1bmN0aW9u
VHlwZSBkb2VzIG5vdCBnZXQgdGhlIGZhc3QgcGF0aCBzdXBwb3J0LiBCdXQgaXQgaXMgT0sgc2lu
Y2UgdXNpbmcgTnVsbFNldHRlckZ1bmN0aW9uVHlwZSBpcyBleHRyZW1lbHkgcmFyZS4KICAgICBu
b3RKU0Z1bmN0aW9uLmxpbmsoJmppdCk7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdFR5cGUoR1BSSW5mbzo6cmVnVDAsIEludGVybmFsRnVuY3Rpb25UeXBlKSk7Ci0gICAgdm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihraW5kLCBOb0xvY2tpbmdOZWNlc3NhcnkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVzcyksIEdQUkluZm86OnJlZ1Q0KTsK
ICAgICBqaXQuanVtcCgpLmxpbmtUbyhjYWxsQ29kZSwgJmppdCk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI3Nzk1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDggKzU2Nyw2
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKICAgICAgICAgZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3IoQ29kZUZvckNhbGwpOwogICAgICAgICBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihDb2RlRm9yQ29uc3RydWN0KTsKLQotICAgICAgICBqaXRTdHVicy0+cHJlaW5pdGlhbGl6
ZUNUSVRodW5rcygqdGhpcyk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTg4
OCwxNCArODg2LDEzIEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRCb3VuZEZ1bmN0aW9uKGIK
ICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobV9mYXN0Qm91bmRFeGVjdXRhYmxlKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIE9wdGlvbmFsPE5v
TG9ja2luZ05lY2Vzc2FyeVRhZz4gbm9Mb2NraW5nTmVjZXNzYXJ5KQorTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG5v
TG9ja2luZ05lY2Vzc2FyeSk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICBy
ZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25DYWxsKCp0aGlzLCBub0xvY2tpbmdO
ZWNlc3NhcnkpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIHJldHVybiBqaXRT
dHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCgqdGhpcywgbm9Mb2NraW5nTmVjZXNz
YXJ5KS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworICAgICAgICAgICAgcmV0dXJuIGppdFN0
dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCgqdGhpcykucmV0YWdnZWQ8SlNFbnRyeVB0clRh
Zz4oKTsKKyAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3Ry
dWN0KCp0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgIH0KICNlbmRpZgogICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCShyZXZpc2lvbiAyNzc5NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDcgQEAgcHVibGljOgogCiAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBj
YW5Db25zdHJ1Y3QpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIE9wdGlvbmFsPE5vTG9ja2luZ05lY2Vzc2FyeVRhZz4gPSBXVEY6Om51bGxvcHQpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAogICAgIHN0YXRpYyBw
dHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7Cg==
</data>
<flag name="commit-queue"
          id="450793"
          type_id="3"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429575</attachid>
            <date>2021-05-24 15:32:51 -0700</date>
            <delta_ts>2021-05-24 15:34:28 -0700</delta_ts>
            <desc>[fast-cq] patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24828</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDIxLTA1LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IENUSSBzdHVicyB0byBiZSBnZW5lcmF0ZWQgb2ZmIHRoZSBtYWluIHRocmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgV2UgbWFrZSB0aGlzIHdvcmsg
YnkgdHJhY2tpbmcgaWYgd2UncmUgYSBjb21waWxlciB0aHJlYWQgd2hlbiBnZW5lcmF0aW5nCisg
ICAgICAgIHRoZSBDVEkgc3R1Yi4gSWYgc28sIGl0IG1lYW5zIHRoYXQgdGhlIG1haW4gdGhyZWFk
IG5lZWRzIHRvIGlzc3VlIGEKKyAgICAgICAgY3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2Ugd2hlbiBp
dCdzIGdvaW5nIHRvIHJ1biB0aGUgQ1RJIHN0dWIgZm9yIHRoZSBmaXJzdAorICAgICAgICB0aW1l
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXMgYXdheSB3aXRoIHByZS1n
ZW5lcmF0aW5nIHRodW5rcy4gVGh1bmtzIGNhbiBub3cgZ2VuZXJhdGUKKyAgICAgICAgb3RoZXIg
dGh1bmtzIHdoaWxlIHRoZXkncmUgcnVubmluZy4gVG8gZG8gdGhpcywgd2UgbWFrZSBKSVRUaHVu
a3MgbG9jayBhCisgICAgICAgIHJlY3Vyc2l2ZSBsb2NrLiBUaGUgcmVhc29uIHRoaXMgaXMgb2sg
aXMgdGhhdCB3ZSBkb24ndCBoYXZlIGFueSByZWN1cnNpdmUKKyAgICAgICAgdGh1bmtzIGluIHRo
ZSB0aHVuayBncmFwaC4gSXQncyBhIERBRy4KKworICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
SklUOjpzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVFRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNh
bGwpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWJJbXBsKToKKyAgICAgICAgKEpT
Qzo6SklUVGh1bmtzOjpjdGlTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlTbG93
UGF0aEZ1bmN0aW9uU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6ZXhpc3RpbmdDVElT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpwcmVpbml0aWFsaXplQ1RJ
VGh1bmtzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgICog
aml0L1Nsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Z2Vu
ZXJhdGVUaHVuayk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAg
IChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJh
bXBvbGluZUZvcik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIxLTA1LTI0ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJldmVydCByMjc2NjEwIGJlY2F1c2UgaXQgY2F1c2VzIGEgMSUgUExUIHJlZ3Jlc3Npb24uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAyNzc5
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDE0ICs3OCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
SW1wbCgKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpKQogICAgICAgICBkYXRh
TG9nKCJERkcoRHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIsIG1vZGUs
ICIsIGluc3RydWN0aW9ucyBzaXplID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCks
ICJcbiIpOwogICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0IHRoZSBE
RkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwotICAgIC8vIG1h
a2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9u
IHRoZSBtYWluIHRocmVhZC4KLSAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3Ip
OwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7Ci0g
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
OwotICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgdm0uZ2V0
Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIAogICAgIGlm
ICh2bS50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nl
c3NMb2dFbnRyaWVzKHZtLCAiUHJlcGFyaW5nIGZvciBERkcgY29tcGlsYXRpb24uIl9zKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ1OSw3ICsxNDU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSGFuZGxlVHJhcHMpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+
ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0
Q1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJl
bChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9jaGVja190
cmFwc19oYW5kbGVyIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MDUsNyArMTkwNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEZyb21TY29w
ZSkpOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIocG9w
VGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5n
TmVjZXNzYXJ5KTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0K
QEAgLTIxMjYsNyArMjEyNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblB1dFRv
U2NvcGUpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9j
a2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1Yihwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF90b19zY29wZSIpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24g
Mjc3OTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNjEgKzExNyw2OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0
aG91dFNhdmVkVGFnc0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0m
IHZtLCBPcHRpb25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vzc2FyeSkK
K01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRl
cm5hbEZ1bmN0aW9uQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgp
KTsKLSAgICBpZiAobm9Mb2NraW5nTmVjZXNzYXJ5KQotICAgICAgICByZXR1cm4gZXhpc3RpbmdD
VElTdHViKGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3Nhcnkp
LmNvZGUoKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5l
cmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtLCBPcHRpb25h
bDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vzc2FyeSkKK01hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9u
Q29uc3RydWN0KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwotICAg
IGlmIChub0xvY2tpbmdOZWNlc3NhcnkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ0NUSVN0dWIo
aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5j
b2RlKCk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RH
ZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0mIHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Ip
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdGVUaHVuaz4KK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTdHViSW1wbChUaHVua0dlbmVyYXRvciBr
ZXksIEdlbmVyYXRlVGh1bmsgZ2VuZXJhdGVUaHVuaykKIHsKICAgICBMb2NrZXIgbG9ja2VyIHsg
bV9sb2NrIH07Ci0gICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jdGlTdHViTWFw
LmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4oKSk7
Ci0gICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAgICAgLy8gQ29tcGlsYXRpb24gdGhy
ZWFkIGNhbiBvbmx5IHJldHJpZXZlIGV4aXN0aW5nIGVudHJpZXMuCi0gICAgICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0g
Z2VuZXJhdG9yKHZtKTsKKworICAgIGF1dG8gaGFuZGxlRW50cnkgPSBbJl0gKEVudHJ5JiBlbnRy
eSkgeworICAgICAgICBpZiAoZW50cnkubmVlZHNDcm9zc01vZGlmeWluZ0NvZGVGZW5jZSAmJiAh
aXNDb21waWxhdGlvblRocmVhZCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQg
d2lsbCBpc3N1ZSBhIGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlIGJlZm9yZSBydW5uaW5nCisgICAg
ICAgICAgICAvLyBhbnkgY29kZSB0aGUgY29tcGlsZXIgdGhyZWFkIGdlbmVyYXRlcywgaW5jbHVk
aW5nIGFueSB0aHVua3MgdGhhdCB0aGV5CisgICAgICAgICAgICAvLyBnZW5lcmF0ZS4gSG93ZXZl
ciwgdGhlIG1haW4gdGhyZWFkIG1heSBncmFiIHRoZSB0aHVuayBhIGNvbXBpbGVyIHRocmVhZAor
ICAgICAgICAgICAgLy8gZ2VuZXJhdGVkIGJlZm9yZSB3ZSd2ZSBpc3N1ZWQgdGhhdCBjcm9zc01v
ZGlmeWluZ0NvZGVGZW5jZS4gSGVuY2UsIHdlCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVs
eSBzYXkgdGhhdCB3aGVuIHRoZSBtYWluIHRocmVhZCBncmFicyBhIHRodW5rIGdlbmVyYXRlZAor
ICAgICAgICAgICAgLy8gZnJvbSBhIGNvbXBpbGVyIHRocmVhZCBmb3IgdGhlIGZpcnN0IHRpbWUs
IGl0IGlzc3VlcyBhIGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlLgorICAgICAgICAgICAgV1RGOjpj
cm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOworICAgICAgICAgICAgZW50cnkubmVlZHNDcm9zc01v
ZGlmeWluZ0NvZGVGZW5jZSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4oKmVudHJ5LmhhbmRsZSk7CisgICAg
fTsKKworICAgIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9jdGlTdHViTWFwLmZpbmQoa2V5KTsK
KyAgICAgICAgaWYgKGl0ZXIgIT0gbV9jdGlTdHViTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGhhbmRsZUVudHJ5KGl0ZXItPnZhbHVlKTsKICAgICB9Ci0gICAgcmV0dXJuIGVudHJ5Lml0
ZXJhdG9yLT52YWx1ZTsKLX0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCi17
Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIHJldHVybiBleGlzdGluZ0NUSVN0
dWIoZ2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIC8vIFdlIGRvIHR3byBsb29r
dXBzIG9uIGZpcnN0IGFkZGl0aW9uIHRvIHRoZSBoYXNoIHRhYmxlIGJlY2F1c2UgZ2VuZXJhdGVU
aHVuayBtYXkgYWRkIHRvIGl0LgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gY29kZVJlZiA9IGdlbmVyYXRlVGh1bmsoKTsKKworICAgIGJvb2wgbmVlZHNDcm9zc01v
ZGlmeWluZ0NvZGVGZW5jZSA9IGlzQ29tcGlsYXRpb25UaHJlYWQoKTsKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fY3RpU3R1Yk1hcC5hZGQoa2V5LCBFbnRyeSB7IFBhY2tlZFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPihjb2RlUmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksIG5lZWRzQ3Jvc3NN
b2RpZnlpbmdDb2RlRmVuY2UgfSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3
RW50cnkpOyAvLyBUaHVua3MgYXJlbid0IHJlY3Vyc2l2ZSwgc28gYW55dGhpbmcgd2UgZ2VuZXJh
dGVkIHRyYW5zaXRpdmVseSBzaG91bGRuJ3QgaGF2ZSBnZW5lcmF0ZWQgJ2tleScuCisgICAgcmV0
dXJuIGhhbmRsZUVudHJ5KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6ZXhpc3RpbmdDVElTdHVi
KFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0mIHZt
LCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3Ig
ZW50cnkgPSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOwotICAgIGlmIChlbnRyeSA9PSBt
X2N0aVN0dWJNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+KCk7Ci0gICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKKyAgICByZXR1cm4g
Y3RpU3R1YkltcGwoZ2VuZXJhdG9yLCBbJl0geworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yKHZt
KTsKKyAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpU2xvd1BhdGhGdW5j
dGlvblN0dWIoVk0mIHZtLCBTbG93UGF0aEZ1bmN0aW9uIHNsb3dQYXRoRnVuY3Rpb24pCiB7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwogICAgIGF1dG8ga2V5ID0gYml0d2lzZV9jYXN0
PFRodW5rR2VuZXJhdG9yPihzbG93UGF0aEZ1bmN0aW9uKTsKLSAgICBDVElTdHViTWFwOjpBZGRS
ZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGtleSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPigpKTsKLSAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkgewotICAgICAg
ICAvLyBDb21waWxhdGlvbiB0aHJlYWQgY2FuIG9ubHkgcmV0cmlldmUgZXhpc3RpbmcgZW50cmll
cy4KLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBlbnRy
eS5pdGVyYXRvci0+dmFsdWUgPSBKSVRTbG93UGF0aENhbGw6OmdlbmVyYXRlVGh1bmsodm0sIHNs
b3dQYXRoRnVuY3Rpb24pOwotICAgIH0KLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVl
OworICAgIHJldHVybiBjdGlTdHViSW1wbChrZXksIFsmXSB7CisgICAgICAgIHJldHVybiBKSVRT
bG93UGF0aENhbGw6OmdlbmVyYXRlVGh1bmsodm0sIHNsb3dQYXRoRnVuY3Rpb24pOworICAgIH0p
OwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjIsMTMzICsy
NjksNiBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiAgICAgcmV0
dXJuIGhvc3RGdW5jdGlvblN0dWIodm0sIGZ1bmN0aW9uLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25z
dHJ1Y3RvciwgZ2VuZXJhdG9yLCBpbnRyaW5zaWMsIG51bGxwdHIsIG5hbWUpOwogfQogCi12b2lk
IEpJVFRodW5rczo6cHJlaW5pdGlhbGl6ZUNUSVRodW5rcyhWTSYgdm0pCi17Ci0gICAgaWYgKCFP
cHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgLy8gVGhlc2UgNCBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIGZp
cnN0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgYmVjYXVzZQotICAgIC8vIHRoZSBvdGhlciB0aHVu
ayBnZW5lcmF0b3JzIHJlbHkgb24gdGhlc2UgYWxyZWFkeSBiZWluZyBpbml0aWFsaXplZC4KLSAg
ICBjdGlTdHViKHZtLCBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwotICAgIGN0aVN0dWIodm0s
IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcik7Ci0gICAgY3Rp
U3R1Yih2bSwgcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cik7Ci0gICAgY3RpU3R1Yih2bSwgY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpOwotCi0jZGVmaW5l
IElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShuYW1lKSBjdGlTbG93UGF0aEZ1
bmN0aW9uU3R1Yih2bSwgc2xvd19wYXRoXyMjbmFtZSkKLQotICAgIC8vIEZyb20gdGhlIEJhc2Vs
aW5lSklUIERFRklORV9TTE9XX09QIGxpc3Q6Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhf
Q0FMTF9ST1VUSU5FKGluX2J5X3ZhbCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FM
TF9ST1VUSU5FKGhhc19wcml2YXRlX25hbWUpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORShoYXNfcHJpdmF0ZV9icmFuZCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9X
X1BBVEhfQ0FMTF9ST1VUSU5FKGxlc3MpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NB
TExfUk9VVElORShsZXNzZXEpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9V
VElORShncmVhdGVyKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUo
Z3JlYXRlcmVxKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoaXNf
Y2FsbGFibGUpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShpc19j
b25zdHJ1Y3Rvcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHR5
cGVvZik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHR5cGVvZl9p
c19vYmplY3QpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0eXBl
b2ZfaXNfZnVuY3Rpb24pOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElO
RShzdHJjYXQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShwdXNo
X3dpdGhfc2NvcGUpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShj
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhf
Q0FMTF9ST1VUSU5FKGdldF9ieV92YWxfd2l0aF90aGlzKTsKLSAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUocHV0X2J5X2lkX3dpdGhfdGhpcyk7Ci0gICAgSU5JVF9CQVNF
TElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHB1dF9ieV92YWxfd2l0aF90aGlzKTsKLSAgICBJ
TklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUocmVzb2x2ZV9zY29wZV9mb3JfaG9p
c3RpbmdfZnVuY19kZWNsX2luX2V2YWwpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NB
TExfUk9VVElORShkZWZpbmVfZGF0YV9wcm9wZXJ0eSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9X
X1BBVEhfQ0FMTF9ST1VUSU5FKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSk7Ci0gICAgSU5JVF9C
QVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHVucmVhY2hhYmxlKTsKLSAgICBJTklUX0JB
U0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUodGhyb3dfc3RhdGljX2Vycm9yKTsKLSAgICBJ
TklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUobmV3X2FycmF5X3dpdGhfc3ByZWFk
KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUobmV3X2FycmF5X2J1
ZmZlcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHNwcmVhZCk7
Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGdldF9lbnVtZXJhYmxl
X2xlbmd0aCk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGhhc19l
bnVtZXJhYmxlX3Byb3BlcnR5KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JP
VVRJTkUoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19Q
QVRIX0NBTExfUk9VVElORSh0b19pbmRleF9zdHJpbmcpOwotICAgIElOSVRfQkFTRUxJTkVfU0xP
V19QQVRIX0NBTExfUk9VVElORShjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyk7Ci0gICAgSU5JVF9C
QVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKTsK
LSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY3JlYXRlX2Nsb25lZF9h
cmd1bWVudHMpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjcmVh
dGVfYXJndW1lbnRzX2J1dHRlcmZseSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FM
TF9ST1VUSU5FKGNyZWF0ZV9yZXN0KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxM
X1JPVVRJTkUoY3JlYXRlX3Byb21pc2UpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NB
TExfUk9VVElORShuZXdfcHJvbWlzZSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FM
TF9ST1VUSU5FKGNyZWF0ZV9nZW5lcmF0b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORShjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKTsKLSAgICBJTklUX0JBU0VMSU5F
X1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUobmV3X2dlbmVyYXRvcik7Ci0gICAgSU5JVF9CQVNFTElO
RV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHBvdyk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BB
VEhfQ0FMTF9ST1VUSU5FKG1vZCk7Ci0KLSAgICBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1Yih2bSwg
aXRlcmF0b3Jfb3Blbl90cnlfZmFzdF9uYXJyb3cpOwotICAgIGN0aVNsb3dQYXRoRnVuY3Rpb25T
dHViKHZtLCBpdGVyYXRvcl9vcGVuX3RyeV9mYXN0X3dpZGUxNik7Ci0gICAgY3RpU2xvd1BhdGhG
dW5jdGlvblN0dWIodm0sIGl0ZXJhdG9yX29wZW5fdHJ5X2Zhc3Rfd2lkZTMyKTsKLSAgICBjdGlT
bG93UGF0aEZ1bmN0aW9uU3R1Yih2bSwgaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3cpOwot
ICAgIGN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKHZtLCBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X3dp
ZGUxNik7Ci0gICAgY3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIGl0ZXJhdG9yX25leHRfdHJ5
X2Zhc3Rfd2lkZTMyKTsKLQotICAgIC8vIEZyb20gdGhlIEJhc2VsaW5lSklUIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QIGxpc3Q6Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VU
SU5FKHVuc2lnbmVkKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUo
aW5jKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoZGVjKTsKLSAg
ICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoYml0bm90KTsKLSAgICBJTklU
X0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoYml0YW5kKTsKLSAgICBJTklUX0JBU0VM
SU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoYml0b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xP
V19QQVRIX0NBTExfUk9VVElORShiaXR4b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORShsc2hpZnQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExf
Uk9VVElORShyc2hpZnQpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElO
RSh1cnNoaWZ0KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoZGl2
KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY3JlYXRlX3RoaXMp
OwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjcmVhdGVfcHJvbWlz
ZSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGNyZWF0ZV9nZW5l
cmF0b3IpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjcmVhdGVf
YXN5bmNfZ2VuZXJhdG9yKTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJ
TkUodG9fdGhpcyk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRv
X3ByaW1pdGl2ZSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRv
X251bWJlcik7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRvX251
bWVyaWMpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0b19zdHJp
bmcpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0b19vYmplY3Qp
OwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShub3QpOwotICAgIElO
SVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShzdHJpY3RlcSk7Ci0gICAgSU5JVF9C
QVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5zdHJpY3RlcSk7Ci0gICAgSU5JVF9CQVNF
TElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGdldF9kaXJlY3RfcG5hbWUpOwotICAgIElOSVRf
QkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShnZXRfcHJvdG90eXBlX29mKTsKLSAgICBJ
TklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoaGFzX2VudW1lcmFibGVfc3RydWN0
dXJlX3Byb3BlcnR5KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUo
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRI
X0NBTExfUk9VVElORShpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgIElOSVRfQkFTRUxJTkVf
U0xPV19QQVRIX0NBTExfUk9VVElORShyZXNvbHZlX3Njb3BlKTsKLSAgICBJTklUX0JBU0VMSU5F
X1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoY2hlY2tfdGR6KTsKLSAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUodG9fcHJvcGVydHlfa2V5KTsKLQotICAgIElOSVRfQkFTRUxJ
TkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9w
ZXJ0eV93cml0ZV9lcnJvcik7Ci0jdW5kZWYgSU5JVF9CQVNFTElORV9ST1VUSU5FCi0KLSAgICAv
LyBGcm9tIHRoZSBCYXNlbGluZUpJVCBERUZJTkVfU0xPV0NBU0VfT1AgbGlzdDoKLSAgICBjdGlT
dHViKHZtLCBKSVQ6OnNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKLSAg
ICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik7Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcik7Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9n
ZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZtLCBKSVQ6OnNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6c2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKLSAgICBjdGlTdHVi
KHZtLCBKSVQ6OnNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKLSAgICBj
dGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7
Ci0gICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9wdXRfdG9fc2NvcGVH
ZW5lcmF0b3IpOwotCi0gICAgY3RpU3R1Yih2bSwgSklUOjpvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZtLCBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0
b3IpOwotICAgIGN0aVN0dWIodm0sIEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOwotICAg
IGN0aVN0dWIodm0sIEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcik7Ci0jZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLSAgICBjdGlTdHViKHZtLCBsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKTsKLSAgICBjdGlTdHViKHZtLCBhcml0eUZpeHVwR2VuZXJhdG9yKTsKLX0KLQot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHJldmlzaW9uIDI3Nzk1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDggQEAKICNpbmNsdWRlIDx0dXBsZT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1BhY2tlZFJlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01MywxOCArNTUsMTQgQEAgcHVibGlj
OgogICAgIEpJVFRodW5rcygpOwogICAgIH5KSVRUaHVua3MoKSBmaW5hbDsKIAotICAgIHZvaWQg
cHJlaW5pdGlhbGl6ZUNUSVRodW5rcyhWTSYpOwotCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDYWxsKFZNJik7CiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mKTsKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWls
Q2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0mKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiwgT3B0aW9uYWw8Tm9Mb2Nr
aW5nTmVjZXNzYXJ5VGFnPiA9IFdURjo6bnVsbG9wdCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJiwgT3B0
aW9uYWw8Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnPiA9IFdURjo6bnVsbG9wdCk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChW
TSYpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJu
YWxGdW5jdGlvbkNvbnN0cnVjdChWTSYpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjdGlTdHViKFZNJiwgVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJh
dG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5n
Q1RJU3R1YihUaHVua0dlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKTsKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKFZNJiwgU2xvd1BhdGhGdW5jdGlvbik7CiAj
ZW5kaWYKQEAgLTc0LDkgKzcyLDE2IEBAIHB1YmxpYzoKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBo
b3N0RnVuY3Rpb25TdHViKFZNJiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9y
LCBJbnRyaW5zaWMsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKIHByaXZhdGU6CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEdlbmVyYXRlVGh1bms+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjdGlTdHViSW1wbChUaHVua0dlbmVyYXRvciBrZXksIEdlbmVyYXRlVGh1
bmspOworCiAgICAgdm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQp
IGZpbmFsOwogICAgIAotICAgIHR5cGVkZWYgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gQ1RJU3R1Yk1hcDsKKyAgICBzdHJ1Y3Qg
RW50cnkgeworICAgICAgICBQYWNrZWRSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gaGFu
ZGxlOworICAgICAgICBib29sIG5lZWRzQ3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2U7CisgICAgfTsK
KyAgICB1c2luZyBDVElTdHViTWFwID0gSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgRW50cnk+Owog
ICAgIENUSVN0dWJNYXAgbV9jdGlTdHViTWFwOwogCiAgICAgdXNpbmcgSG9zdEZ1bmN0aW9uS2V5
ID0gc3RkOjp0dXBsZTxUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24s
IFN0cmluZz47CkBAIC0xMTYsNyArMTIxLDggQEAgcHJpdmF0ZToKIAogICAgIHVzaW5nIFdlYWtO
YXRpdmVFeGVjdXRhYmxlU2V0ID0gSGFzaFNldDxXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LCBXZWFr
TmF0aXZlRXhlY3V0YWJsZUhhc2g+OwogICAgIFdlYWtOYXRpdmVFeGVjdXRhYmxlU2V0IG1fbmF0
aXZlRXhlY3V0YWJsZVNldDsKLSAgICBMb2NrIG1fbG9jazsKKworICAgIFdURjo6UmVjdXJzaXZl
TG9jayBtX2xvY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDI3Nzk1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODQsNyArODQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVi
cy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0u
Z2V0Q1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJh
dG9yKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0aW9uKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CShyZXZpc2lvbiAyNzc5NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwbwogICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250
aW51YXRpb24gPSBqaXQuanVtcCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0g
ICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1YihoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0g
dm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwogICAgIFJFTEVBU0VfQVNT
RVJUKGhhbmRsZXIpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKQEAgLTEzMiw3ICsxMzIsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAjZW5kaWYKIAogICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZXJH
ZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIoaGFuZGxlckdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiQ2hlY2tFeGNlcHRpb24iKTsKIH0KIApAQCAtMzI0LDcgKzMyNCw3IEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAgICAvLyBOdWxsU2V0dGVyRnVuY3Rpb25U
eXBlIGRvZXMgbm90IGdldCB0aGUgZmFzdCBwYXRoIHN1cHBvcnQuIEJ1dCBpdCBpcyBPSyBzaW5j
ZSB1c2luZyBOdWxsU2V0dGVyRnVuY3Rpb25UeXBlIGlzIGV4dHJlbWVseSByYXJlLgogICAgIG5v
dEpTRnVuY3Rpb24ubGluaygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElm
Tm90VHlwZShHUFJJbmZvOjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKLSAgICB2b2lk
KiBleGVjdXRhYmxlQWRkcmVzcyA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGtpbmQsIE5vTG9ja2luZ05lY2Vzc2FyeSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2
b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9s
aW5lRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGVBZGRyZXNzKSwgR1BSSW5mbzo6cmVnVDQpOwog
ICAgIGppdC5qdW1wKCkubGlua1RvKGNhbGxDb2RlLCAmaml0KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjc3OTU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsOCArNTY3LDYg
QEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlLAogI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQogICAgICAgICBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlRm9yQ2FsbCk7CiAgICAgICAgIGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKENvZGVGb3JDb25zdHJ1Y3QpOwotCi0gICAgICAgIGppdFN0dWJzLT5wcmVpbml0aWFsaXpl
Q1RJVGh1bmtzKCp0aGlzKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApAQCAtODg4
LDE0ICs4ODYsMTMgQEAgTmF0aXZlRXhlY3V0YWJsZSogVk06OmdldEJvdW5kRnVuY3Rpb24oYgog
ICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RCb3VuZEV4ZWN1dGFibGUpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rp
b25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgT3B0aW9uYWw8Tm9M
b2NraW5nTmVjZXNzYXJ5VGFnPiBub0xvY2tpbmdOZWNlc3NhcnkpCitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBVTlVTRURfUEFSQU0obm9M
b2NraW5nTmVjZXNzYXJ5KTsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChPcHRpb25zOjp1c2VK
SVQoKSkgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJl
dHVybiBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoKnRoaXMsIG5vTG9ja2luZ05l
Y2Vzc2FyeSkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKLSAgICAgICAgcmV0dXJuIGppdFN0
dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KCp0aGlzLCBub0xvY2tpbmdOZWNlc3Nh
cnkpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICByZXR1cm4gaml0U3R1
YnMtPmN0aUludGVybmFsRnVuY3Rpb25DYWxsKCp0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFn
PigpOworICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1
Y3QoKnRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgfQogI2VuZGlmCiAgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHJldmlzaW9uIDI3Nzk1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw3ICs4NTEsNyBAQCBwdWJsaWM6CiAKICAgICBOYXRp
dmVFeGVjdXRhYmxlKiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uLCBib29sIGNh
bkNvbnN0cnVjdCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgT3B0aW9uYWw8Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnPiA9IFdURjo6bnVsbG9wdCk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rp
b25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBleGNlcHRpb25PZmZzZXQoKQogICAgIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>