<?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>233333</bug_id>
          
          <creation_ts>2021-11-18 13:32:28 -0800</creation_ts>
          <short_desc>Rename PropertyMapHashTable.h to PropertyTable.h to match the class.</short_desc>
          <delta_ts>2021-11-18 15:19:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>232849</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1816608</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-11-18 13:32:28 -0800</bug_when>
    <thetext>This is just a refactoring patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816609</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-18 13:33:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/85565760&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816613</commentid>
    <comment_count>2</comment_count>
      <attachid>444731</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-11-18 13:47:47 -0800</bug_when>
    <thetext>Created attachment 444731
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816616</commentid>
    <comment_count>3</comment_count>
      <attachid>444732</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-11-18 13:52:26 -0800</bug_when>
    <thetext>Created attachment 444732
[fast-cq] proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816643</commentid>
    <comment_count>4</comment_count>
      <attachid>444732</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-18 14:51:55 -0800</bug_when>
    <thetext>Comment on attachment 444732
[fast-cq] proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816653</commentid>
    <comment_count>5</comment_count>
      <attachid>444732</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-11-18 15:17:39 -0800</bug_when>
    <thetext>Comment on attachment 444732
[fast-cq] proposed patch.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816655</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-18 15:19:11 -0800</bug_when>
    <thetext>Committed r286034 (244422@main): &lt;https://commits.webkit.org/244422@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444732.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444731</attachid>
            <date>2021-11-18 13:47:47 -0800</date>
            <delta_ts>2021-11-18 13:52:26 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-233333.patch</filename>
            <type>text/plain</type>
            <size>51308</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2MDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDIxLTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgUHJvcGVydHlNYXBIYXNoVGFibGUuaCB0byBQcm9wZXJ0eVRhYmxlLmggdG8gbWF0Y2gg
dGhlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzMzMzCisgICAgICAgIHJkYXI6Ly84NTU2NTc2MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gcmVuYW1lZCBzb21lIHN1cHBvcnRpbmcg
ZGF0YSBzdHJ1Y3R1cmVzIHRvIG1hdGNoLiAgVGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcKKyAg
ICAgICAgcGF0Y2guICBUaGVyZSBhcmUgbm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHA6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVRhYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmguCisgICAgICAgIChKU0M6OlByb3BlcnR5
VGFibGU6OmZpbmQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpnZXQpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxl
OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpyZWluc2VydCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5VGFibGU6OnJlaGFzaCk6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dn
ZXI6OlByb3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcik6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcnR5VGFibGVTdGF0aXN0aWNz
RXhpdExvZ2dlcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dn
ZXI6OlByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVydHlNYXBTdGF0aXN0
aWNzRXhpdExvZ2dlcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisKIDIwMjEtMTEtMTggIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBBZGQgYnJhbmNoVGVz
dDE2IG9wZXJhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMjg2MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xMTM5LDEyICsxMTM5LDEyIEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL1ByaXZhdGVOYW1lLmgKICAgICBydW50
aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5o
Ci0gICAgcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCiAgICAgcnVudGltZS9Qcm9wZXJ0
eU5hbWUuaAogICAgIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAogICAgIHJ1bnRpbWUvUHJv
cGVydHlPZmZzZXQuaAogICAgIHJ1bnRpbWUvUHJvcGVydHlTbG90LmgKICAgICBydW50aW1lL1By
b3BlcnR5U3RvcmFnZS5oCisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgKICAgICBydW50aW1l
L1Byb3RlY3QuaAogICAgIHJ1bnRpbWUvUHJvdG90eXBlS2V5LmgKICAgICBydW50aW1lL1Byb3h5
T2JqZWN0LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODYw
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc1MCw3ICsxNzUwLDcgQEAKIAkJQkM3
NTZGQzkwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc1NkZDNzBFMjAzMUIy
MDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzg3Q0RCOTEwNzEyQUQ0MDAwNjE0Q0Yg
LyogSlNPTk9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDODdDREI4MTA3MTJBQ0EwMDA2MTRDRiAvKiBKU09OT2JqZWN0Lmx1dC5oICov
OyB9OwogCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzkw
NDE0NzBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkM5NTQzN0QwRUJB
NzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFwSGFzaFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk1NDM3QzBFQkE3MEZEMDA3MkI2RDMgLyog
UHJvcGVydHlNYXBIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyogUHJvcGVydHlUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5NTQz
N0MwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5VGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0JFMkNBRTE0RTk4NUFBMDAwNTkzQUQg
LyogR0NBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0JFMkNBRDE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNDRjBEMDgwRUYw
QUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NGMEQwNzBFRjBBQUI5MDA0MTNDOEYgLyogU3Ry
dWN0dXJlU3R1YkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDIwMkJF
MEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtNDk5MSw3
ICs0OTkxLDcgQEAKIAkJQkM4N0NEQjgxMDcxMkFDQTAwMDYxNENGIC8qIEpTT05PYmplY3QubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT05PYmplY3QubHV0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEYzQ0NGMERBRjE3QkEwMDU3N0E4MCAvKiBD
b25zdHJ1Y3REYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cnVj
dERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5MDQxNDcwRUI5MjUwOTAw
RkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkM5NTQzN0MwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFwSGFz
aFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5TWFwSGFz
aFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOTU0MzdDMEVCQTcwRkQw
MDcyQjZEMyAvKiBQcm9wZXJ0eVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3BlcnR5VGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5QkI5
NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJuYWxGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBD
b25zdHJ1Y3REYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bnN0cnVjdERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzk1OCw3ICs3
OTU4LDYgQEAKIAkJCQkxNDczNDFEMzFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFi
bGUuaCAqLywKIAkJCQlBN0ZCNjBBMzEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlw
dG9yLmNwcCAqLywKIAkJCQlBN0ZCNjA0QjEwM0Y1RUFCMDAxN0EyODYgLyogUHJvcGVydHlEZXNj
cmlwdG9yLmggKi8sCi0JCQkJQkM5NTQzN0MwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFw
SGFzaFRhYmxlLmggKi8sCiAJCQkJODYxNThBQjIxNTVDOEIzRjAwQjQ1QzlDIC8qIFByb3BlcnR5
TmFtZS5oICovLAogCQkJCTY1NDAwQzEwMEE2OUJBRjIwMDUwOTg4NyAvKiBQcm9wZXJ0eU5hbWVB
cnJheS5oICovLAogCQkJCTBGRjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNl
dC5oICovLApAQCAtNzk2Niw2ICs3OTY1LDcgQEAKIAkJCQk2NTYyMUU2QzA4OUU4NTk3MDA3NjBG
MzUgLyogUHJvcGVydHlTbG90LmggKi8sCiAJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8q
IFByb3BlcnR5U3RvcmFnZS5oICovLAogCQkJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCAqLywKKwkJCQlCQzk1NDM3QzBFQkE3MEZEMDA3MkI2RDMgLyogUHJv
cGVydHlUYWJsZS5oICovLAogCQkJCTY1QzAyRkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBQcm90ZWN0
LmggKi8sCiAJCQkJMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5oICov
LAogCQkJCTc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAq
LywKQEAgLTEwNjc2LDcgKzEwNjc2LDcgQEAKIAkJCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEg
LyogUHJvZ3JhbUV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBFMUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdG
QjYxMDAxMDQwQzM4QjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQkM5NTQzN0QwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFwSGFzaFRhYmxl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyogUHJvcGVy
dHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYxNThBQjMxNTVDOEI0MDAwQjQ1QzlDIC8q
IFByb3BlcnR5TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTQwRTE2RjVDRDAwQjM0
NDYwIC8qIFByb3BlcnR5TmFtZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MTY4QzE1
QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oCShyZXZpc2lvbiAyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShub25leGlzdGVudCkKQEAgLTEsNTg3ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hUYWJs
ZS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nSW1wbC5oPgotCi0KLSNkZWZpbmUgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUyAwCi0jZGVm
aW5lIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUyAwCi0KLSNkZWZpbmUgUFJPUEVSVFlfTUFQ
X0RFTEVURURfRU5UUllfS0VZICgoVW5pcXVlZFN0cmluZ0ltcGwqKTEpCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihQcm9wZXJ0eVRh
YmxlKTsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLQotc3RydWN0IFByb3BlcnR5TWFw
SGFzaFRhYmxlU3RhdHMgewotICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1GaW5kczsKLSAg
ICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQ29sbGlzaW9uczsKLSAgICBzdGQ6OmF0b21pYzx1
bnNpZ25lZD4gbnVtTG9va3VwczsKLSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtTG9va3Vw
UHJvYmluZzsKLSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQWRkczsKLSAgICBzdGQ6OmF0
b21pYzx1bnNpZ25lZD4gbnVtUmVtb3ZlczsKLSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVt
UmVoYXNoZXM7Ci0gICAgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bVJlaW5zZXJ0czsKLX07Ci0K
LUpTX0VYUE9SVF9QUklWQVRFIGV4dGVybiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBwcm9w
ZXJ0eU1hcEhhc2hUYWJsZVN0YXRzOwotCi0jZW5kaWYKLQotaW5saW5lIGJvb2wgaXNQb3dlck9m
Mih1bnNpZ25lZCB2KQotewotICAgIHJldHVybiBoYXNPbmVCaXRTZXQodik7Ci19Ci0KLWlubGlu
ZSB1bnNpZ25lZCBuZXh0UG93ZXJPZjIodW5zaWduZWQgdikKLXsKLSAgICAvLyBUYWtlbiBmcm9t
IGh0dHA6Ly93d3cuY3MudXRrLmVkdS9+dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKLSAgICAv
LyBEZXZpc2VkIGJ5IFNlYW4gQW5kZXJzb24sIFNlcGVtYmVyIDE0LCAyMDAxCi0KLSAgICB2LS07
Ci0gICAgdiB8PSB2ID4+IDE7Ci0gICAgdiB8PSB2ID4+IDI7Ci0gICAgdiB8PSB2ID4+IDQ7Ci0g
ICAgdiB8PSB2ID4+IDg7Ci0gICAgdiB8PSB2ID4+IDE2OwotICAgIHYrKzsKLQotICAgIHJldHVy
biB2OwotfQotCi1jbGFzcyBQcm9wZXJ0eVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Ci0K
LSAgICAvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgJ2l0ZXJhdG9yJyBhbmQgJ2Nv
bnN0X2l0ZXJhdG9yJywKLSAgICAvLyB1c2VkIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgdGFibGUg
aW4gaW5zZXJ0aW9uIG9yZGVyLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgY2xhc3Mg
b3JkZXJlZF9pdGVyYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBvcmRlcmVkX2l0ZXJhdG9y
PFQ+JiBvcGVyYXRvcisrKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV92YWx1ZVB0ciA9IHNr
aXBEZWxldGVkRW50cmllcyhtX3ZhbHVlUHRyICsgMSwgbV9lbmRWYWx1ZVB0cik7Ci0gICAgICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBtX3ZhbHVlUHRyID09IG90aGVyLm1fdmFsdWVQdHI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlUHRyICE9IG90aGVyLm1fdmFsdWVQ
dHI7Ci0gICAgICAgIH0KLQotICAgICAgICBUJiBvcGVyYXRvciooKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKm1fdmFsdWVQdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBUKiBvcGVy
YXRvci0+KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVQdHI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvcmRlcmVkX2l0ZXJhdG9yKFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1
ZVB0cikKLSAgICAgICAgICAgIDogbV92YWx1ZVB0cih2YWx1ZVB0cikKLSAgICAgICAgICAgICwg
bV9lbmRWYWx1ZVB0cihlbmRWYWx1ZVB0cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBUKiBtX3ZhbHVlUHRyOwotICAgICAgICBUKiBtX2VuZFZhbHVlUHRy
OwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCi0gICAgewotICAgICAgICByZXR1cm4gJnZtLnByb3BlcnR5VGFibGVTcGFjZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwotCi0gICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBLZXlUeXBlOwotICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBWYWx1ZVR5cGU7Ci0K
LSAgICAvLyBUaGUgaW4gb3JkZXIgaXRlcmF0b3IgcHJvdmlkZXMgb3ZlcmxvYWRlZCAqIGFuZCAt
PiB0byBhY2Nlc3MgdGhlIFZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgIHR5cGVk
ZWYgb3JkZXJlZF9pdGVyYXRvcjxWYWx1ZVR5cGU+IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgb3Jk
ZXJlZF9pdGVyYXRvcjxjb25zdCBWYWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOwotCi0gICAgLy8g
VGhlIGZpbmRfaXRlcmF0b3IgaXMgYSBwYWlyIG9mIGEgcG9pbnRlciB0byBhIFZhbHVlKiBhbiB0
aGUgZW50cnkgaW4gdGhlIGluZGV4LgotICAgIC8vIElmICdmaW5kJyBkb2VzIG5vdCBmaW5kIGFu
IGVudHJ5IHRoZW4gaXRlci5maXJzdCB3aWxsIGJlIDAsIGFuZCBpdGVyLnNlY29uZCB3aWxsCi0g
ICAgLy8gZ2l2ZSB0aGUgcG9pbnQgaW4gbV9pbmRleCB3aGVyZSBhbiBlbnRyeSBzaG91bGQgYmUg
aW5zZXJ0ZWQuCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgdW5zaWduZWQ+IGZp
bmRfaXRlcmF0b3I7Ci0KLSAgICAvLyBDb25zdHJ1Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlhbCBj
YXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNvcHksIG9yIGJvdGguCi0gICAgc3RhdGljIFBy
b3BlcnR5VGFibGUqIGNyZWF0ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAg
c3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwot
ICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwotICAgIH5Qcm9wZXJ0eVRhYmxlKCk7Ci0KLSAg
ICAvLyBPcmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgotICAgIGl0ZXJhdG9yIGJlZ2luKCk7Ci0g
ICAgaXRlcmF0b3IgZW5kKCk7Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKLQotICAgIC8vIEZpbmQgYSB2YWx1ZSBpbiB0
aGUgdGFibGUuCi0gICAgZmluZF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmKTsKLSAgICBW
YWx1ZVR5cGUqIGdldChjb25zdCBLZXlUeXBlJik7Ci0gICAgLy8gQWRkIGEgdmFsdWUgdG8gdGhl
IHRhYmxlCi0gICAgc3RkOjpwYWlyPGZpbmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGQoVk0mLCBjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKLSAgICAvLyBSZW1vdmUgYSB2
YWx1ZSBmcm9tIHRoZSB0YWJsZS4KLSAgICB2b2lkIHJlbW92ZShWTSYsIGNvbnN0IGZpbmRfaXRl
cmF0b3ImIGl0ZXIpOwotICAgIHZvaWQgcmVtb3ZlKFZNJiwgY29uc3QgS2V5VHlwZSYga2V5KTsK
LQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJsZS4K
LSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7Ci0KLSAgICAvLyBDaGVja3MgaWYgdGhlcmUgYXJl
IGFueSB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJsZS4KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
LQotICAgIC8vIE51bWJlciBvZiBzbG90cyBpbiB0aGUgcHJvcGVydHkgc3RvcmFnZSBhcnJheSBp
biB1c2UsIGluY2x1ZGVkIGRlbGV0ZWRPZmZzZXRzLgotICAgIHVuc2lnbmVkIHByb3BlcnR5U3Rv
cmFnZVNpemUoKSBjb25zdDsKLQotICAgIC8vIFVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHVu
dXNlZCBlbnRyaWVzIGluIHRoZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgIHZvaWQgY2xlYXJEZWxl
dGVkT2Zmc2V0cygpOwotICAgIGJvb2wgaGFzRGVsZXRlZE9mZnNldCgpOwotICAgIFByb3BlcnR5
T2Zmc2V0IGdldERlbGV0ZWRPZmZzZXQoKTsKLSAgICB2b2lkIGFkZERlbGV0ZWRPZmZzZXQoUHJv
cGVydHlPZmZzZXQpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVy
dHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwotCi0gICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFi
bGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQu
Ci0gICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7Ci0gICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KCk7Ci0jZW5kaWYKLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5kZXhTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5VGFibGUsIG1f
aW5kZXhTaXplKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleE1hc2soKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlUYWJsZSwgbV9pbmRleE1hc2spOyB9Ci0g
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFByb3BlcnR5VGFibGUsIG1faW5kZXgpOyB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgUHJvcGVydHlUYWJs
ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShWTSYs
IGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0KLSAgICBQcm9wZXJ0eVRh
YmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKLQotICAgIC8vIFVzZWQgdG8gaW5zZXJ0IGEgdmFsdWUga25vd24gbm90IHRvIGJlIGluIHRo
ZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cgY2FwYWNpdHkgdG8gYmUgYXZhaWxhYmxlLgotICAg
IHZvaWQgcmVpbnNlcnQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSk7Ci0KLSAgICAvLyBSZWhhc2gg
dGhlIHRhYmxlLiAgVXNlZCB0byBncm93LCBvciB0byByZWNvdmVyIGRlbGV0ZWQgc2xvdHMuCi0g
ICAgdm9pZCByZWhhc2goVk0mLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7Ci0KLSAgICAvLyBUaGUg
Y2FwYWNpdHkgb2YgdGhlIHRhYmxlIG9mIHZhbHVlcyBpcyBoYWxmIG9mIHRoZSBzaXplIG9mIHRo
ZSBpbmRleC4KLSAgICB1bnNpZ25lZCB0YWJsZUNhcGFjaXR5KCkgY29uc3Q7Ci0KLSAgICAvLyBX
ZSBrZWVwIGFuIGV4dHJhIGRlbGV0ZWQgc2xvdCBhZnRlciB0aGUgYXJyYXkgdG8gbWFrZSBpdGVy
YXRpb24gd29yaywKLSAgICAvLyBhbmQgdG8gdXNlIGZvciBkZWxldGVkIHZhbHVlcy4gSW5kZXgg
dmFsdWVzIGludG8gdGhlIGFycmF5IGFyZSAxLWJhc2VkLAotICAgIC8vIHNvIHRoaXMgaXMgdGFi
bGVDYXBhY2l0eSgpICsgMS4KLSAgICAvLyBGb3IgZXhhbXBsZSwgaWYgbV90YWJsZVNpemUgaXMg
MTYsIHRoZW4gdGFibGVDYXBhY2l0eSgpIGlzIDggLSBidXQgdGhlCi0gICAgLy8gdmFsdWVzIGFy
cmF5IGlzIGFjdHVhbGx5IDkgbG9uZyAodGhlIDl0aCB1c2VkIGZvciB0aGUgZGVsZXRlZCB2YWx1
ZS8KLSAgICAvLyBpdGVyYXRpb24gZ3VhcmQpLiAgVGhlIDggdmFsaWQgZW50cmllcyBhcmUgbnVt
YmVyZWQgMS4uOCwgc28gdGhlCi0gICAgLy8gZGVsZXRlZCBpbmRleCBpcyA5ICgwIGJlaW5nIHJl
c2VydmVkIGZvciBlbXB0eSkuCi0gICAgdW5zaWduZWQgZGVsZXRlZEVudHJ5SW5kZXgoKSBjb25z
dDsKLQotICAgIC8vIFVzZWQgaW4gaXRlcmF0b3IgY3JlYXRpb24vcHJvZ3Jlc3Npb24uCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCogc2tpcERlbGV0ZWRFbnRyaWVzKFQq
IHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cik7Ci0KLSAgICAvLyBUaGUgdGFibGUgb2YgdmFsdWVz
IGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCi0gICAgVmFsdWVUeXBlKiB0YWJsZSgpOwotICAg
IGNvbnN0IFZhbHVlVHlwZSogdGFibGUoKSBjb25zdDsKLQotICAgIFZhbHVlVHlwZSogdGFibGVF
bmQoKSB7IHJldHVybiB0YWJsZSgpICsgdXNlZENvdW50KCk7IH0KLSAgICBjb25zdCBWYWx1ZVR5
cGUqIHRhYmxlRW5kKCkgY29uc3QgeyByZXR1cm4gdGFibGUoKSArIHVzZWRDb3VudCgpOyB9Ci0K
LSAgICAvLyB0b3RhbCBudW1iZXIgb2YgIHVzZWQgZW50cmllcyBpbiB0aGUgdmFsdWVzIGFycmF5
IC0gYnkgZWl0aGVyIHZhbGlkIGVudHJpZXMsIG9yIGRlbGV0ZWQgb25lcy4KLSAgICB1bnNpZ25l
ZCB1c2VkQ291bnQoKSBjb25zdDsKLQotICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRhdGEg
bmVlZGVkIGZvciBieSB0aGUgdGFibGUuCi0gICAgc2l6ZV90IGRhdGFTaXplKCk7Ci0KLSAgICAv
LyBDYWxjdWxhdGVzIHRoZSBhcHByb3ByaWF0ZSB0YWJsZSBzaXplIChyb3VuZHMgdXAgdG8gYSBw
b3dlciBvZiB0d28pLgotICAgIHN0YXRpYyB1bnNpZ25lZCBzaXplRm9yQ2FwYWNpdHkodW5zaWdu
ZWQgY2FwYWNpdHkpOwotCi0gICAgLy8gQ2hlY2sgaWYgY2FwYWNpdHkgaXMgYXZhaWxhYmxlLgot
ICAgIGJvb2wgY2FuSW5zZXJ0KCk7Ci0KLSAgICB1bnNpZ25lZCBtX2luZGV4U2l6ZTsKLSAgICB1
bnNpZ25lZCBtX2luZGV4TWFzazsKLSAgICB1bnNpZ25lZCogbV9pbmRleDsKLSAgICB1bnNpZ25l
ZCBtX2tleUNvdW50OwotICAgIHVuc2lnbmVkIG1fZGVsZXRlZENvdW50OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+PiBtX2RlbGV0ZWRPZmZzZXRzOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNaW5pbXVtVGFibGVTaXplID0gMTY7Ci19OwotCi1p
bmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6YmVnaW4oKQotewot
ICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKLSAgICByZXR1cm4gaXRlcmF0
b3Ioc2tpcERlbGV0ZWRFbnRyaWVzKHRhYmxlKCksIHRhYmxlRW5kKSwgdGFibGVFbmQpOwotfQot
Ci1pbmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZW5kKCkKLXsK
LSAgICBhdXRvKiB0YWJsZUVuZCA9IHRoaXMtPnRhYmxlRW5kKCk7Ci0gICAgcmV0dXJuIGl0ZXJh
dG9yKHRhYmxlRW5kLCB0YWJsZUVuZCk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpjb25z
dF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjpiZWdpbigpIGNvbnN0Ci17Ci0gICAgYXV0byogdGFi
bGVFbmQgPSB0aGlzLT50YWJsZUVuZCgpOwotICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihza2lw
RGVsZXRlZEVudHJpZXModGFibGUoKSwgdGFibGVFbmQpLCB0YWJsZUVuZCk7Ci19Ci0KLWlubGlu
ZSBQcm9wZXJ0eVRhYmxlOjpjb25zdF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjplbmQoKSBjb25z
dAotewotICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKLSAgICByZXR1cm4g
Y29uc3RfaXRlcmF0b3IodGFibGVFbmQsIHRhYmxlRW5kKTsKLX0KLQotaW5saW5lIFByb3BlcnR5
VGFibGU6OmZpbmRfaXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZmluZChjb25zdCBLZXlUeXBlJiBr
ZXkpCi17Ci0gICAgQVNTRVJUKGtleSk7Ci0gICAgQVNTRVJUKGtleS0+aXNBdG9tKCkgfHwga2V5
LT5pc1N5bWJvbCgpKTsKLSAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpZmllclJlcEhhc2g6Omhh
c2goa2V5KTsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICArK3Byb3BlcnR5TWFw
SGFzaFRhYmxlU3RhdHMtPm51bUZpbmRzOwotI2VuZGlmCi0KLSAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1hc2td
OwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKFZhbHVlVHlwZSopbnVsbHB0ciwgaGFzaCAmIG1faW5k
ZXhNYXNrKTsKLSAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5rZXkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoJnRhYmxlKClbZW50cnlJbmRleCAt
IDFdLCBoYXNoICYgbV9pbmRleE1hc2spOwotCi0jaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwot
ICAgICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUNvbGxpc2lvbnM7Ci0jZW5k
aWYKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUwotICAgICAgICBkYXRhTG9nKCJQ
cm9wZXJ0eVRhYmxlIGNvbGxpc2lvbiBmb3IgIiwga2V5LCAiICgiLCBoYXNoLCAiKVxuIik7Ci0g
ICAgICAgIGRhdGFMb2coIkNvbGxpZGVkIHdpdGggIiwgdGFibGUoKVtlbnRyeUluZGV4IC0gMV0u
a2V5LCAiKCIsIElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHRhYmxlKClbZW50cnlJbmRleCAtIDFd
LmtleSksICIpXG4iKTsKLSNlbmRpZgotCi0gICAgICAgIGhhc2grKzsKLSAgICB9Ci19Ci0KLWlu
bGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OmdldChjb25zdCBL
ZXlUeXBlJiBrZXkpCi17Ci0gICAgQVNTRVJUKGtleSk7Ci0gICAgQVNTRVJUKGtleS0+aXNBdG9t
KCkgfHwga2V5LT5pc1N5bWJvbCgpKTsKLSAgICBBU1NFUlQoa2V5ICE9IFBST1BFUlRZX01BUF9E
RUxFVEVEX0VOVFJZX0tFWSk7Ci0KLSAgICBpZiAoIW1fa2V5Q291bnQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgdW5zaWduZWQgaGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNo
KGtleSk7Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhh
c2hUYWJsZVN0YXRzLT5udW1Mb29rdXBzOwotI2VuZGlmCi0KLSAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1hc2td
OwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5kZXgg
LSAxXS5rZXkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cyB8fCAhbV9k
ZWxldGVkT2Zmc2V0cy0+Y29udGFpbnModGFibGUoKVtlbnRyeUluZGV4IC0gMV0ub2Zmc2V0KSk7
Ci0gICAgICAgICAgICByZXR1cm4gJnRhYmxlKClbZW50cnlJbmRleCAtIDFdOwotICAgICAgICB9
Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgICAgICsrcHJvcGVydHlNYXBIYXNo
VGFibGVTdGF0cy0+bnVtTG9va3VwUHJvYmluZzsKLSNlbmRpZgotCi0gICAgICAgIGhhc2grKzsK
LSAgICB9Ci19Ci0KLWlubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRv
ciwgYm9vbD4gV0FSTl9VTlVTRURfUkVUVVJOIFByb3BlcnR5VGFibGU6OmFkZChWTSYgdm0sIGNv
bnN0IFZhbHVlVHlwZSYgZW50cnkpCi17Ci0gICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRzIHx8
ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsKLQotICAgIC8vIExv
b2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGluIHRoZSBhcnJheS4K
LSAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0gICAgaWYgKGl0ZXIu
Zmlyc3QpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxzZSk7Ci0KLSNp
ZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRz
LT5udW1BZGRzOwotI2VuZGlmCi0KLSAgICAvLyBSZWYgdGhlIGtleQotICAgIGVudHJ5LmtleS0+
cmVmKCk7Ci0KLSAgICAvLyBlbnN1cmUgY2FwYWNpdHkgaXMgYXZhaWxhYmxlLgotICAgIGlmICgh
Y2FuSW5zZXJ0KCkpIHsKLSAgICAgICAgcmVoYXNoKHZtLCBtX2tleUNvdW50ICsgMSk7Ci0gICAg
ICAgIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0gICAgICAgIEFTU0VSVCghaXRlci5maXJzdCk7
Ci0gICAgfQotCi0gICAgLy8gQWxsb2NhdGUgYSBzbG90IGluIHRoZSBoYXNodGFibGUsIGFuZCBz
ZXQgdGhlIGluZGV4IHRvIHJlZmVyZW5jZSB0aGlzLgotICAgIHVuc2lnbmVkIGVudHJ5SW5kZXgg
PSB1c2VkQ291bnQoKSArIDE7Ci0gICAgbV9pbmRleFtpdGVyLnNlY29uZF0gPSBlbnRyeUluZGV4
OwotICAgIGl0ZXIuZmlyc3QgPSAmdGFibGUoKVtlbnRyeUluZGV4IC0gMV07Ci0gICAgKml0ZXIu
Zmlyc3QgPSBlbnRyeTsKLQotICAgICsrbV9rZXlDb3VudDsKLSAgICAKLSAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoaXRlciwgdHJ1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIFByb3BlcnR5VGFibGU6
OnJlbW92ZShWTSYgdm0sIGNvbnN0IGZpbmRfaXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgLy8gUmVt
b3ZpbmcgYSBrZXkgdGhhdCBkb2Vzbid0IGV4aXN0IGRvZXMgbm90aGluZyEKLSAgICBpZiAoIWl0
ZXIuZmlyc3QpCi0gICAgICAgIHJldHVybjsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMK
LSAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlbW92ZXM7Ci0jZW5kaWYKLQot
ICAgIC8vIFJlcGxhY2UgdGhpcyBvbmUgZWxlbWVudCB3aXRoIHRoZSBkZWxldGVkIHNlbnRpbmVs
LiBBbHNvIGNsZWFyIG91dAotICAgIC8vIHRoZSBlbnRyeSBzbyB3ZSBjYW4gaXRlcmF0ZSBhbGwg
dGhlIGVudHJpZXMgYXMgbmVlZGVkLgotICAgIG1faW5kZXhbaXRlci5zZWNvbmRdID0gZGVsZXRl
ZEVudHJ5SW5kZXgoKTsKLSAgICBpdGVyLmZpcnN0LT5rZXktPmRlcmVmKCk7Ci0gICAgaXRlci5m
aXJzdC0+a2V5ID0gUFJPUEVSVFlfTUFQX0RFTEVURURfRU5UUllfS0VZOwotCi0gICAgQVNTRVJU
KG1fa2V5Q291bnQgPj0gMSk7Ci0gICAgLS1tX2tleUNvdW50OwotICAgICsrbV9kZWxldGVkQ291
bnQ7Ci0KLSAgICBpZiAobV9kZWxldGVkQ291bnQgKiA0ID49IG1faW5kZXhTaXplKQotICAgICAg
ICByZWhhc2godm0sIG1fa2V5Q291bnQpOwotfQotCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxl
OjpyZW1vdmUoVk0mIHZtLCBjb25zdCBLZXlUeXBlJiBrZXkpCi17Ci0gICAgcmVtb3ZlKHZtLCBm
aW5kKGtleSkpOwotfQotCi0vLyByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRoZSBo
YXNodGFibGUuCi1pbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6c2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fa2V5Q291bnQ7Ci19Ci0KLWlubGluZSBib29sIFByb3BlcnR5VGFibGU6
OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9rZXlDb3VudDsKLX0KLQotaW5saW5l
IHVuc2lnbmVkIFByb3BlcnR5VGFibGU6OnByb3BlcnR5U3RvcmFnZVNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBzaXplKCkgKyAobV9kZWxldGVkT2Zmc2V0cyA/IG1fZGVsZXRlZE9mZnNldHMt
PnNpemUoKSA6IDApOwotfQotCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpjbGVhckRlbGV0
ZWRPZmZzZXRzKCkKLXsKLSAgICBtX2RlbGV0ZWRPZmZzZXRzID0gbnVsbHB0cjsKLX0KLQotaW5s
aW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6aGFzRGVsZXRlZE9mZnNldCgpCi17Ci0gICAgcmV0dXJu
IG1fZGVsZXRlZE9mZnNldHMgJiYgIW1fZGVsZXRlZE9mZnNldHMtPmlzRW1wdHkoKTsKLX0KLQot
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFByb3BlcnR5VGFibGU6OmdldERlbGV0ZWRPZmZzZXQoKQot
ewotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fZGVsZXRlZE9mZnNldHMtPmxhc3QoKTsK
LSAgICBtX2RlbGV0ZWRPZmZzZXRzLT5yZW1vdmVMYXN0KCk7Ci0gICAgcmV0dXJuIG9mZnNldDsK
LX0KLQotaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6YWRkRGVsZXRlZE9mZnNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgaWYgKCFtX2RlbGV0ZWRPZmZzZXRzKQotICAgICAgICBt
X2RlbGV0ZWRPZmZzZXRzID0gbWFrZVVuaXF1ZTxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+PigpOwot
ICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnMob2Zmc2V0KSk7Ci0gICAgbV9k
ZWxldGVkT2Zmc2V0cy0+YXBwZW5kKG9mZnNldCk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eU9mZnNl
dCBQcm9wZXJ0eVRhYmxlOjpuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFjaXR5
KQotewotICAgIGlmIChoYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiBnZXREZWxl
dGVkT2Zmc2V0KCk7Ci0KLSAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgp
LCBpbmxpbmVDYXBhY2l0eSk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRh
YmxlOjpjb3B5KFZNJiB2bSwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCi17Ci0gICAgQVNTRVJUKG5l
d0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwotCi0gICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3
IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBt
ZW1jcHkgaXQsCi0gICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMuCi0gICAgaWYgKHNpemVG
b3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCi0gICAgICAgIHJldHVybiBQ
cm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnRoaXMpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZSh2bSwgbmV3Q2FwYWNpdHksICp0aGlzKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLWlu
bGluZSBzaXplX3QgUHJvcGVydHlUYWJsZTo6c2l6ZUluTWVtb3J5KCkKLXsKLSAgICBzaXplX3Qg
cmVzdWx0ID0gc2l6ZW9mKFByb3BlcnR5VGFibGUpICsgZGF0YVNpemUoKTsKLSAgICBpZiAobV9k
ZWxldGVkT2Zmc2V0cykKLSAgICAgICAgcmVzdWx0ICs9IChtX2RlbGV0ZWRPZmZzZXRzLT5jYXBh
Y2l0eSgpICogc2l6ZW9mKFByb3BlcnR5T2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LSNlbmRpZgotCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWluc2VydChjb25zdCBWYWx1
ZVR5cGUmIGVudHJ5KQotewotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICArK3Byb3Bl
cnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0czsKLSNlbmRpZgotCi0gICAgLy8gVXNl
ZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hl
cmUKLSAgICAvLyB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KLSAgICBBU1NFUlQo
Y2FuSW5zZXJ0KCkpOwotICAgIGZpbmRfaXRlcmF0b3IgaXRlciA9IGZpbmQoZW50cnkua2V5KTsK
LSAgICBBU1NFUlQoIWl0ZXIuZmlyc3QpOwotCi0gICAgdW5zaWduZWQgZW50cnlJbmRleCA9IHVz
ZWRDb3VudCgpICsgMTsKLSAgICBtX2luZGV4W2l0ZXIuc2Vjb25kXSA9IGVudHJ5SW5kZXg7Ci0g
ICAgdGFibGUoKVtlbnRyeUluZGV4IC0gMV0gPSBlbnRyeTsKLQotICAgICsrbV9rZXlDb3VudDsK
LX0KLQotaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6cmVoYXNoKFZNJiB2bSwgdW5zaWduZWQg
bmV3Q2FwYWNpdHkpCi17Ci0jaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICsrcHJvcGVy
dHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtUmVoYXNoZXM7Ci0jZW5kaWYKLQotICAgIHNpemVfdCBv
bGREYXRhU2l6ZSA9IGRhdGFTaXplKCk7Ci0gICAgdW5zaWduZWQqIG9sZEVudHJ5SW5kaWNlcyA9
IG1faW5kZXg7Ci0gICAgaXRlcmF0b3IgaXRlciA9IHRoaXMtPmJlZ2luKCk7Ci0gICAgaXRlcmF0
b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0KLSAgICBtX2luZGV4U2l6ZSA9IHNpemVGb3JDYXBhY2l0
eShuZXdDYXBhY2l0eSk7Ci0gICAgbV9pbmRleE1hc2sgPSBtX2luZGV4U2l6ZSAtIDE7Ci0gICAg
bV9rZXlDb3VudCA9IDA7Ci0gICAgbV9kZWxldGVkQ291bnQgPSAwOwotCi0gICAgbV9pbmRleCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oUHJvcGVydHlUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9j
KGRhdGFTaXplKCkpKTsKLQotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKLSAgICB9
Ci0KLSAgICBQcm9wZXJ0eVRhYmxlTWFsbG9jOjpmcmVlKG9sZEVudHJ5SW5kaWNlcyk7Ci0KLSAg
ICBpZiAob2xkRGF0YVNpemUgPCBkYXRhU2l6ZSgpKQotICAgICAgICB2bS5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKGRhdGFTaXplKCkgLSBvbGREYXRhU2l6ZSk7Ci19Ci0KLWlubGlu
ZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp0YWJsZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleFNpemUgPj4gMTsgfQotCi1pbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6ZGVs
ZXRlZEVudHJ5SW5kZXgoKSBjb25zdCB7IHJldHVybiB0YWJsZUNhcGFjaXR5KCkgKyAxOyB9Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogUHJvcGVydHlUYWJsZTo6c2tpcERlbGV0
ZWRFbnRyaWVzKFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cikKLXsKLSAgICB3aGlsZSAodmFs
dWVQdHIgPCBlbmRWYWx1ZVB0ciAmJiB2YWx1ZVB0ci0+a2V5ID09IFBST1BFUlRZX01BUF9ERUxF
VEVEX0VOVFJZX0tFWSkKLSAgICAgICAgKyt2YWx1ZVB0cjsKLSAgICByZXR1cm4gdmFsdWVQdHI7
Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OnRh
YmxlKCkKLXsKLSAgICAvLyBUaGUgdGFibGUgb2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2gg
aW5kZXguCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KG1faW5k
ZXggKyBtX2luZGV4U2l6ZSk7Ci19Ci0KLWlubGluZSBjb25zdCBQcm9wZXJ0eVRhYmxlOjpWYWx1
ZVR5cGUqIFByb3BlcnR5VGFibGU6OnRhYmxlKCkgY29uc3QKLXsKLSAgICAvLyBUaGUgdGFibGUg
b2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCi0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IFZhbHVlVHlwZSo+KG1faW5kZXggKyBtX2luZGV4U2l6ZSk7Ci19
Ci0KLWlubGluZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp1c2VkQ291bnQoKSBjb25zdAotewot
ICAgIC8vIFRvdGFsIG51bWJlciBvZiAgdXNlZCBlbnRyaWVzIGluIHRoZSB2YWx1ZXMgYXJyYXkg
LSBieSBlaXRoZXIgdmFsaWQgZW50cmllcywgb3IgZGVsZXRlZCBvbmVzLgotICAgIHJldHVybiBt
X2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQ7Ci19Ci0KLWlubGluZSBzaXplX3QgUHJvcGVydHlU
YWJsZTo6ZGF0YVNpemUoKQotewotICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRhdGEgbmVl
ZGVkIGZvciBieSB0aGUgdGFibGUuCi0gICAgLy8gRW5zdXJlIHRoYXQgdGhpcyBmdW5jdGlvbiBj
YW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4KLSAgICB1bnNpZ25lZCBpbmRleFNpemUgPSBtX2lu
ZGV4U2l6ZTsKLSAgICByZXR1cm4gaW5kZXhTaXplICogc2l6ZW9mKHVuc2lnbmVkKSArICgoaW5k
ZXhTaXplID4+IDEpICsgMSkgKiBzaXplb2YoVmFsdWVUeXBlKTsKLX0KLQotaW5saW5lIHVuc2ln
bmVkIFByb3BlcnR5VGFibGU6OnNpemVGb3JDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkKLXsK
LSAgICBpZiAoY2FwYWNpdHkgPCBNaW5pbXVtVGFibGVTaXplIC8gMikKLSAgICAgICAgcmV0dXJu
IE1pbmltdW1UYWJsZVNpemU7Ci0gICAgcmV0dXJuIG5leHRQb3dlck9mMihjYXBhY2l0eSArIDEp
ICogMjsKLX0KLQotaW5saW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6Y2FuSW5zZXJ0KCkKLXsKLSAg
ICByZXR1cm4gdXNlZENvdW50KCkgPCB0YWJsZUNhcGFjaXR5KCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUu
Y3BwCShyZXZpc2lvbiAyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgor
I2luY2x1ZGUgIlByb3BlcnR5VGFibGUuaCIKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRh
YmxlLmgJKHJldmlzaW9uIDI4NjAyMikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1ODcg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0V4
cG9ydE1hY3Jvcy5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hU
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nSW1wbC5oPgorCisKKyNkZWZpbmUgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUyAwCisj
ZGVmaW5lIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUyAwCisKKyNkZWZpbmUgUFJPUEVSVFlf
TUFQX0RFTEVURURfRU5UUllfS0VZICgoVW5pcXVlZFN0cmluZ0ltcGwqKTEpCisKK25hbWVzcGFj
ZSBKU0MgeworCitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihQcm9wZXJ0
eVRhYmxlKTsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKworc3RydWN0IFByb3BlcnR5
TWFwSGFzaFRhYmxlU3RhdHMgeworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1GaW5kczsK
KyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQ29sbGlzaW9uczsKKyAgICBzdGQ6OmF0b21p
Yzx1bnNpZ25lZD4gbnVtTG9va3VwczsKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtTG9v
a3VwUHJvYmluZzsKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQWRkczsKKyAgICBzdGQ6
OmF0b21pYzx1bnNpZ25lZD4gbnVtUmVtb3ZlczsKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4g
bnVtUmVoYXNoZXM7CisgICAgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bVJlaW5zZXJ0czsKK307
CisKK0pTX0VYUE9SVF9QUklWQVRFIGV4dGVybiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBw
cm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzOworCisjZW5kaWYKKworaW5saW5lIGJvb2wgaXNQb3dl
ck9mMih1bnNpZ25lZCB2KQoreworICAgIHJldHVybiBoYXNPbmVCaXRTZXQodik7Cit9CisKK2lu
bGluZSB1bnNpZ25lZCBuZXh0UG93ZXJPZjIodW5zaWduZWQgdikKK3sKKyAgICAvLyBUYWtlbiBm
cm9tIGh0dHA6Ly93d3cuY3MudXRrLmVkdS9+dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKKyAg
ICAvLyBEZXZpc2VkIGJ5IFNlYW4gQW5kZXJzb24sIFNlcGVtYmVyIDE0LCAyMDAxCisKKyAgICB2
LS07CisgICAgdiB8PSB2ID4+IDE7CisgICAgdiB8PSB2ID4+IDI7CisgICAgdiB8PSB2ID4+IDQ7
CisgICAgdiB8PSB2ID4+IDg7CisgICAgdiB8PSB2ID4+IDE2OworICAgIHYrKzsKKworICAgIHJl
dHVybiB2OworfQorCitjbGFzcyBQcm9wZXJ0eVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
CisKKyAgICAvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgJ2l0ZXJhdG9yJyBhbmQg
J2NvbnN0X2l0ZXJhdG9yJywKKyAgICAvLyB1c2VkIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgdGFi
bGUgaW4gaW5zZXJ0aW9uIG9yZGVyLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xh
c3Mgb3JkZXJlZF9pdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBvcmRlcmVkX2l0ZXJh
dG9yPFQ+JiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV92YWx1ZVB0ciA9
IHNraXBEZWxldGVkRW50cmllcyhtX3ZhbHVlUHRyICsgMSwgbV9lbmRWYWx1ZVB0cik7CisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZhbHVlUHRyID09IG90aGVyLm1fdmFsdWVQdHI7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlUHRyICE9IG90aGVyLm1fdmFs
dWVQdHI7CisgICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvciooKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKm1fdmFsdWVQdHI7CisgICAgICAgIH0KKworICAgICAgICBUKiBv
cGVyYXRvci0+KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVQdHI7Cisg
ICAgICAgIH0KKworICAgICAgICBvcmRlcmVkX2l0ZXJhdG9yKFQqIHZhbHVlUHRyLCBUKiBlbmRW
YWx1ZVB0cikKKyAgICAgICAgICAgIDogbV92YWx1ZVB0cih2YWx1ZVB0cikKKyAgICAgICAgICAg
ICwgbV9lbmRWYWx1ZVB0cihlbmRWYWx1ZVB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBUKiBtX3ZhbHVlUHRyOworICAgICAgICBUKiBtX2VuZFZhbHVl
UHRyOworICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLnByb3BlcnR5VGFibGVTcGFjZTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIFVuaXF1ZWRTdHJp
bmdJbXBsKiBLZXlUeXBlOworICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBWYWx1ZVR5cGU7
CisKKyAgICAvLyBUaGUgaW4gb3JkZXIgaXRlcmF0b3IgcHJvdmlkZXMgb3ZlcmxvYWRlZCAqIGFu
ZCAtPiB0byBhY2Nlc3MgdGhlIFZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgIHR5
cGVkZWYgb3JkZXJlZF9pdGVyYXRvcjxWYWx1ZVR5cGU+IGl0ZXJhdG9yOworICAgIHR5cGVkZWYg
b3JkZXJlZF9pdGVyYXRvcjxjb25zdCBWYWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOworCisgICAg
Ly8gVGhlIGZpbmRfaXRlcmF0b3IgaXMgYSBwYWlyIG9mIGEgcG9pbnRlciB0byBhIFZhbHVlKiBh
biB0aGUgZW50cnkgaW4gdGhlIGluZGV4LgorICAgIC8vIElmICdmaW5kJyBkb2VzIG5vdCBmaW5k
IGFuIGVudHJ5IHRoZW4gaXRlci5maXJzdCB3aWxsIGJlIDAsIGFuZCBpdGVyLnNlY29uZCB3aWxs
CisgICAgLy8gZ2l2ZSB0aGUgcG9pbnQgaW4gbV9pbmRleCB3aGVyZSBhbiBlbnRyeSBzaG91bGQg
YmUgaW5zZXJ0ZWQuCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgdW5zaWduZWQ+
IGZpbmRfaXRlcmF0b3I7CisKKyAgICAvLyBDb25zdHJ1Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlh
bCBjYXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNvcHksIG9yIGJvdGguCisgICAgc3RhdGlj
IFByb3BlcnR5VGFibGUqIGNyZWF0ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Cisg
ICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVydHlUYWJsZSYp
OworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVkIGluaXRpYWxD
YXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIH5Qcm9wZXJ0eVRhYmxlKCk7CisK
KyAgICAvLyBPcmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgorICAgIGl0ZXJhdG9yIGJlZ2luKCk7
CisgICAgaXRlcmF0b3IgZW5kKCk7CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsK
KyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKKworICAgIC8vIEZpbmQgYSB2YWx1ZSBp
biB0aGUgdGFibGUuCisgICAgZmluZF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmKTsKKyAg
ICBWYWx1ZVR5cGUqIGdldChjb25zdCBLZXlUeXBlJik7CisgICAgLy8gQWRkIGEgdmFsdWUgdG8g
dGhlIHRhYmxlCisgICAgc3RkOjpwYWlyPGZpbmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGQoVk0mLCBjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKKyAgICAvLyBSZW1vdmUg
YSB2YWx1ZSBmcm9tIHRoZSB0YWJsZS4KKyAgICB2b2lkIHJlbW92ZShWTSYsIGNvbnN0IGZpbmRf
aXRlcmF0b3ImIGl0ZXIpOworICAgIHZvaWQgcmVtb3ZlKFZNJiwgY29uc3QgS2V5VHlwZSYga2V5
KTsKKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJs
ZS4KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CisKKyAgICAvLyBDaGVja3MgaWYgdGhlcmUg
YXJlIGFueSB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJsZS4KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKKworICAgIC8vIE51bWJlciBvZiBzbG90cyBpbiB0aGUgcHJvcGVydHkgc3RvcmFnZSBhcnJh
eSBpbiB1c2UsIGluY2x1ZGVkIGRlbGV0ZWRPZmZzZXRzLgorICAgIHVuc2lnbmVkIHByb3BlcnR5
U3RvcmFnZVNpemUoKSBjb25zdDsKKworICAgIC8vIFVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9m
IHVudXNlZCBlbnRyaWVzIGluIHRoZSBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHZvaWQgY2xlYXJE
ZWxldGVkT2Zmc2V0cygpOworICAgIGJvb2wgaGFzRGVsZXRlZE9mZnNldCgpOworICAgIFByb3Bl
cnR5T2Zmc2V0IGdldERlbGV0ZWRPZmZzZXQoKTsKKyAgICB2b2lkIGFkZERlbGV0ZWRPZmZzZXQo
UHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJv
cGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOworCisgICAgLy8gQ29weSB0aGlzIFByb3BlcnR5
VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlk
ZWQuCisgICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CisgICAgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KCk7CisjZW5kaWYKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5kZXhTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5VGFibGUs
IG1faW5kZXhTaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleE1hc2so
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlUYWJsZSwgbV9pbmRleE1hc2spOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFByb3BlcnR5VGFibGUsIG1faW5kZXgpOyB9CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7CisKK3ByaXZhdGU6CisgICAgUHJvcGVydHlU
YWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZShW
TSYsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisKKyAgICBQcm9wZXJ0
eVRhYmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKKworICAgIC8vIFVzZWQgdG8gaW5zZXJ0IGEgdmFsdWUga25vd24gbm90IHRvIGJlIGlu
IHRoZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cgY2FwYWNpdHkgdG8gYmUgYXZhaWxhYmxlLgor
ICAgIHZvaWQgcmVpbnNlcnQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSk7CisKKyAgICAvLyBSZWhh
c2ggdGhlIHRhYmxlLiAgVXNlZCB0byBncm93LCBvciB0byByZWNvdmVyIGRlbGV0ZWQgc2xvdHMu
CisgICAgdm9pZCByZWhhc2goVk0mLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CisKKyAgICAvLyBU
aGUgY2FwYWNpdHkgb2YgdGhlIHRhYmxlIG9mIHZhbHVlcyBpcyBoYWxmIG9mIHRoZSBzaXplIG9m
IHRoZSBpbmRleC4KKyAgICB1bnNpZ25lZCB0YWJsZUNhcGFjaXR5KCkgY29uc3Q7CisKKyAgICAv
LyBXZSBrZWVwIGFuIGV4dHJhIGRlbGV0ZWQgc2xvdCBhZnRlciB0aGUgYXJyYXkgdG8gbWFrZSBp
dGVyYXRpb24gd29yaywKKyAgICAvLyBhbmQgdG8gdXNlIGZvciBkZWxldGVkIHZhbHVlcy4gSW5k
ZXggdmFsdWVzIGludG8gdGhlIGFycmF5IGFyZSAxLWJhc2VkLAorICAgIC8vIHNvIHRoaXMgaXMg
dGFibGVDYXBhY2l0eSgpICsgMS4KKyAgICAvLyBGb3IgZXhhbXBsZSwgaWYgbV90YWJsZVNpemUg
aXMgMTYsIHRoZW4gdGFibGVDYXBhY2l0eSgpIGlzIDggLSBidXQgdGhlCisgICAgLy8gdmFsdWVz
IGFycmF5IGlzIGFjdHVhbGx5IDkgbG9uZyAodGhlIDl0aCB1c2VkIGZvciB0aGUgZGVsZXRlZCB2
YWx1ZS8KKyAgICAvLyBpdGVyYXRpb24gZ3VhcmQpLiAgVGhlIDggdmFsaWQgZW50cmllcyBhcmUg
bnVtYmVyZWQgMS4uOCwgc28gdGhlCisgICAgLy8gZGVsZXRlZCBpbmRleCBpcyA5ICgwIGJlaW5n
IHJlc2VydmVkIGZvciBlbXB0eSkuCisgICAgdW5zaWduZWQgZGVsZXRlZEVudHJ5SW5kZXgoKSBj
b25zdDsKKworICAgIC8vIFVzZWQgaW4gaXRlcmF0b3IgY3JlYXRpb24vcHJvZ3Jlc3Npb24uCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCogc2tpcERlbGV0ZWRFbnRyaWVz
KFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cik7CisKKyAgICAvLyBUaGUgdGFibGUgb2YgdmFs
dWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCisgICAgVmFsdWVUeXBlKiB0YWJsZSgpOwor
ICAgIGNvbnN0IFZhbHVlVHlwZSogdGFibGUoKSBjb25zdDsKKworICAgIFZhbHVlVHlwZSogdGFi
bGVFbmQoKSB7IHJldHVybiB0YWJsZSgpICsgdXNlZENvdW50KCk7IH0KKyAgICBjb25zdCBWYWx1
ZVR5cGUqIHRhYmxlRW5kKCkgY29uc3QgeyByZXR1cm4gdGFibGUoKSArIHVzZWRDb3VudCgpOyB9
CisKKyAgICAvLyB0b3RhbCBudW1iZXIgb2YgIHVzZWQgZW50cmllcyBpbiB0aGUgdmFsdWVzIGFy
cmF5IC0gYnkgZWl0aGVyIHZhbGlkIGVudHJpZXMsIG9yIGRlbGV0ZWQgb25lcy4KKyAgICB1bnNp
Z25lZCB1c2VkQ291bnQoKSBjb25zdDsKKworICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRh
dGEgbmVlZGVkIGZvciBieSB0aGUgdGFibGUuCisgICAgc2l6ZV90IGRhdGFTaXplKCk7CisKKyAg
ICAvLyBDYWxjdWxhdGVzIHRoZSBhcHByb3ByaWF0ZSB0YWJsZSBzaXplIChyb3VuZHMgdXAgdG8g
YSBwb3dlciBvZiB0d28pLgorICAgIHN0YXRpYyB1bnNpZ25lZCBzaXplRm9yQ2FwYWNpdHkodW5z
aWduZWQgY2FwYWNpdHkpOworCisgICAgLy8gQ2hlY2sgaWYgY2FwYWNpdHkgaXMgYXZhaWxhYmxl
LgorICAgIGJvb2wgY2FuSW5zZXJ0KCk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4U2l6ZTsKKyAg
ICB1bnNpZ25lZCBtX2luZGV4TWFzazsKKyAgICB1bnNpZ25lZCogbV9pbmRleDsKKyAgICB1bnNp
Z25lZCBtX2tleUNvdW50OworICAgIHVuc2lnbmVkIG1fZGVsZXRlZENvdW50OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+PiBtX2RlbGV0ZWRPZmZzZXRzOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNaW5pbXVtVGFibGVTaXplID0gMTY7Cit9Owor
CitpbmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6YmVnaW4oKQor
eworICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKKyAgICByZXR1cm4gaXRl
cmF0b3Ioc2tpcERlbGV0ZWRFbnRyaWVzKHRhYmxlKCksIHRhYmxlRW5kKSwgdGFibGVFbmQpOwor
fQorCitpbmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZW5kKCkK
K3sKKyAgICBhdXRvKiB0YWJsZUVuZCA9IHRoaXMtPnRhYmxlRW5kKCk7CisgICAgcmV0dXJuIGl0
ZXJhdG9yKHRhYmxlRW5kLCB0YWJsZUVuZCk7Cit9CisKK2lubGluZSBQcm9wZXJ0eVRhYmxlOjpj
b25zdF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjpiZWdpbigpIGNvbnN0Cit7CisgICAgYXV0byog
dGFibGVFbmQgPSB0aGlzLT50YWJsZUVuZCgpOworICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihz
a2lwRGVsZXRlZEVudHJpZXModGFibGUoKSwgdGFibGVFbmQpLCB0YWJsZUVuZCk7Cit9CisKK2lu
bGluZSBQcm9wZXJ0eVRhYmxlOjpjb25zdF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjplbmQoKSBj
b25zdAoreworICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKKyAgICByZXR1
cm4gY29uc3RfaXRlcmF0b3IodGFibGVFbmQsIHRhYmxlRW5kKTsKK30KKworaW5saW5lIFByb3Bl
cnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZmluZChjb25zdCBLZXlUeXBl
JiBrZXkpCit7CisgICAgQVNTRVJUKGtleSk7CisgICAgQVNTRVJUKGtleS0+aXNBdG9tKCkgfHwg
a2V5LT5pc1N5bWJvbCgpKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpZmllclJlcEhhc2g6
Omhhc2goa2V5KTsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICArK3Byb3BlcnR5
TWFwSGFzaFRhYmxlU3RhdHMtPm51bUZpbmRzOworI2VuZGlmCisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1h
c2tdOworICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKFZhbHVlVHlwZSopbnVsbHB0ciwgaGFzaCAmIG1f
aW5kZXhNYXNrKTsKKyAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5r
ZXkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoJnRhYmxlKClbZW50cnlJbmRl
eCAtIDFdLCBoYXNoICYgbV9pbmRleE1hc2spOworCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFU
UworICAgICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUNvbGxpc2lvbnM7Cisj
ZW5kaWYKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUworICAgICAgICBkYXRhTG9n
KCJQcm9wZXJ0eVRhYmxlIGNvbGxpc2lvbiBmb3IgIiwga2V5LCAiICgiLCBoYXNoLCAiKVxuIik7
CisgICAgICAgIGRhdGFMb2coIkNvbGxpZGVkIHdpdGggIiwgdGFibGUoKVtlbnRyeUluZGV4IC0g
MV0ua2V5LCAiKCIsIElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHRhYmxlKClbZW50cnlJbmRleCAt
IDFdLmtleSksICIpXG4iKTsKKyNlbmRpZgorCisgICAgICAgIGhhc2grKzsKKyAgICB9Cit9CisK
K2lubGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OmdldChjb25z
dCBLZXlUeXBlJiBrZXkpCit7CisgICAgQVNTRVJUKGtleSk7CisgICAgQVNTRVJUKGtleS0+aXNB
dG9tKCkgfHwga2V5LT5pc1N5bWJvbCgpKTsKKyAgICBBU1NFUlQoa2V5ICE9IFBST1BFUlRZX01B
UF9ERUxFVEVEX0VOVFJZX0tFWSk7CisKKyAgICBpZiAoIW1fa2V5Q291bnQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpo
YXNoKGtleSk7CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgKytwcm9wZXJ0eU1h
cEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBzOworI2VuZGlmCisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1h
c2tdOworICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5k
ZXggLSAxXS5rZXkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cyB8fCAh
bV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnModGFibGUoKVtlbnRyeUluZGV4IC0gMV0ub2Zmc2V0
KSk7CisgICAgICAgICAgICByZXR1cm4gJnRhYmxlKClbZW50cnlJbmRleCAtIDFdOworICAgICAg
ICB9CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgICAgICsrcHJvcGVydHlNYXBI
YXNoVGFibGVTdGF0cy0+bnVtTG9va3VwUHJvYmluZzsKKyNlbmRpZgorCisgICAgICAgIGhhc2gr
KzsKKyAgICB9Cit9CisKK2lubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVy
YXRvciwgYm9vbD4gV0FSTl9VTlVTRURfUkVUVVJOIFByb3BlcnR5VGFibGU6OmFkZChWTSYgdm0s
IGNvbnN0IFZhbHVlVHlwZSYgZW50cnkpCit7CisgICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRz
IHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsKKworICAgIC8v
IExvb2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGluIHRoZSBhcnJh
eS4KKyAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7CisgICAgaWYgKGl0
ZXIuZmlyc3QpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxzZSk7CisK
KyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0
YXRzLT5udW1BZGRzOworI2VuZGlmCisKKyAgICAvLyBSZWYgdGhlIGtleQorICAgIGVudHJ5Lmtl
eS0+cmVmKCk7CisKKyAgICAvLyBlbnN1cmUgY2FwYWNpdHkgaXMgYXZhaWxhYmxlLgorICAgIGlm
ICghY2FuSW5zZXJ0KCkpIHsKKyAgICAgICAgcmVoYXNoKHZtLCBtX2tleUNvdW50ICsgMSk7Cisg
ICAgICAgIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7CisgICAgICAgIEFTU0VSVCghaXRlci5maXJz
dCk7CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBzbG90IGluIHRoZSBoYXNodGFibGUsIGFu
ZCBzZXQgdGhlIGluZGV4IHRvIHJlZmVyZW5jZSB0aGlzLgorICAgIHVuc2lnbmVkIGVudHJ5SW5k
ZXggPSB1c2VkQ291bnQoKSArIDE7CisgICAgbV9pbmRleFtpdGVyLnNlY29uZF0gPSBlbnRyeUlu
ZGV4OworICAgIGl0ZXIuZmlyc3QgPSAmdGFibGUoKVtlbnRyeUluZGV4IC0gMV07CisgICAgKml0
ZXIuZmlyc3QgPSBlbnRyeTsKKworICAgICsrbV9rZXlDb3VudDsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoaXRlciwgdHJ1ZSk7Cit9CisKK2lubGluZSB2b2lkIFByb3BlcnR5VGFi
bGU6OnJlbW92ZShWTSYgdm0sIGNvbnN0IGZpbmRfaXRlcmF0b3ImIGl0ZXIpCit7CisgICAgLy8g
UmVtb3ZpbmcgYSBrZXkgdGhhdCBkb2Vzbid0IGV4aXN0IGRvZXMgbm90aGluZyEKKyAgICBpZiAo
IWl0ZXIuZmlyc3QpCisgICAgICAgIHJldHVybjsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RB
VFMKKyAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlbW92ZXM7CisjZW5kaWYK
KworICAgIC8vIFJlcGxhY2UgdGhpcyBvbmUgZWxlbWVudCB3aXRoIHRoZSBkZWxldGVkIHNlbnRp
bmVsLiBBbHNvIGNsZWFyIG91dAorICAgIC8vIHRoZSBlbnRyeSBzbyB3ZSBjYW4gaXRlcmF0ZSBh
bGwgdGhlIGVudHJpZXMgYXMgbmVlZGVkLgorICAgIG1faW5kZXhbaXRlci5zZWNvbmRdID0gZGVs
ZXRlZEVudHJ5SW5kZXgoKTsKKyAgICBpdGVyLmZpcnN0LT5rZXktPmRlcmVmKCk7CisgICAgaXRl
ci5maXJzdC0+a2V5ID0gUFJPUEVSVFlfTUFQX0RFTEVURURfRU5UUllfS0VZOworCisgICAgQVNT
RVJUKG1fa2V5Q291bnQgPj0gMSk7CisgICAgLS1tX2tleUNvdW50OworICAgICsrbV9kZWxldGVk
Q291bnQ7CisKKyAgICBpZiAobV9kZWxldGVkQ291bnQgKiA0ID49IG1faW5kZXhTaXplKQorICAg
ICAgICByZWhhc2godm0sIG1fa2V5Q291bnQpOworfQorCitpbmxpbmUgdm9pZCBQcm9wZXJ0eVRh
YmxlOjpyZW1vdmUoVk0mIHZtLCBjb25zdCBLZXlUeXBlJiBrZXkpCit7CisgICAgcmVtb3ZlKHZt
LCBmaW5kKGtleSkpOworfQorCisvLyByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRo
ZSBoYXNodGFibGUuCitpbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6c2l6ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fa2V5Q291bnQ7Cit9CisKK2lubGluZSBib29sIFByb3BlcnR5VGFi
bGU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9rZXlDb3VudDsKK30KKworaW5s
aW5lIHVuc2lnbmVkIFByb3BlcnR5VGFibGU6OnByb3BlcnR5U3RvcmFnZVNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBzaXplKCkgKyAobV9kZWxldGVkT2Zmc2V0cyA/IG1fZGVsZXRlZE9mZnNl
dHMtPnNpemUoKSA6IDApOworfQorCitpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpjbGVhckRl
bGV0ZWRPZmZzZXRzKCkKK3sKKyAgICBtX2RlbGV0ZWRPZmZzZXRzID0gbnVsbHB0cjsKK30KKwor
aW5saW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6aGFzRGVsZXRlZE9mZnNldCgpCit7CisgICAgcmV0
dXJuIG1fZGVsZXRlZE9mZnNldHMgJiYgIW1fZGVsZXRlZE9mZnNldHMtPmlzRW1wdHkoKTsKK30K
KworaW5saW5lIFByb3BlcnR5T2Zmc2V0IFByb3BlcnR5VGFibGU6OmdldERlbGV0ZWRPZmZzZXQo
KQoreworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fZGVsZXRlZE9mZnNldHMtPmxhc3Qo
KTsKKyAgICBtX2RlbGV0ZWRPZmZzZXRzLT5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIG9mZnNl
dDsKK30KKworaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6YWRkRGVsZXRlZE9mZnNldChQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgaWYgKCFtX2RlbGV0ZWRPZmZzZXRzKQorICAgICAg
ICBtX2RlbGV0ZWRPZmZzZXRzID0gbWFrZVVuaXF1ZTxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+Pigp
OworICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnMob2Zmc2V0KSk7CisgICAg
bV9kZWxldGVkT2Zmc2V0cy0+YXBwZW5kKG9mZnNldCk7Cit9CisKK2lubGluZSBQcm9wZXJ0eU9m
ZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFj
aXR5KQoreworICAgIGlmIChoYXNEZWxldGVkT2Zmc2V0KCkpCisgICAgICAgIHJldHVybiBnZXRE
ZWxldGVkT2Zmc2V0KCk7CisKKyAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6
ZSgpLCBpbmxpbmVDYXBhY2l0eSk7Cit9CisKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0
eVRhYmxlOjpjb3B5KFZNJiB2bSwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCit7CisgICAgQVNTRVJU
KG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOworCisgICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUg
bmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNh
biBtZW1jcHkgaXQsCisgICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMuCisgICAgaWYgKHNp
emVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCisgICAgICAgIHJldHVy
biBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnRoaXMpOworICAgIHJldHVybiBQcm9wZXJ0eVRh
YmxlOjpjbG9uZSh2bSwgbmV3Q2FwYWNpdHksICp0aGlzKTsKK30KKworI2lmbmRlZiBOREVCVUcK
K2lubGluZSBzaXplX3QgUHJvcGVydHlUYWJsZTo6c2l6ZUluTWVtb3J5KCkKK3sKKyAgICBzaXpl
X3QgcmVzdWx0ID0gc2l6ZW9mKFByb3BlcnR5VGFibGUpICsgZGF0YVNpemUoKTsKKyAgICBpZiAo
bV9kZWxldGVkT2Zmc2V0cykKKyAgICAgICAgcmVzdWx0ICs9IChtX2RlbGV0ZWRPZmZzZXRzLT5j
YXBhY2l0eSgpICogc2l6ZW9mKFByb3BlcnR5T2Zmc2V0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZgorCitpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWluc2VydChjb25zdCBW
YWx1ZVR5cGUmIGVudHJ5KQoreworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICArK3By
b3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0czsKKyNlbmRpZgorCisgICAgLy8g
VXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQg
d2hlcmUKKyAgICAvLyB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KKyAgICBBU1NF
UlQoY2FuSW5zZXJ0KCkpOworICAgIGZpbmRfaXRlcmF0b3IgaXRlciA9IGZpbmQoZW50cnkua2V5
KTsKKyAgICBBU1NFUlQoIWl0ZXIuZmlyc3QpOworCisgICAgdW5zaWduZWQgZW50cnlJbmRleCA9
IHVzZWRDb3VudCgpICsgMTsKKyAgICBtX2luZGV4W2l0ZXIuc2Vjb25kXSA9IGVudHJ5SW5kZXg7
CisgICAgdGFibGUoKVtlbnRyeUluZGV4IC0gMV0gPSBlbnRyeTsKKworICAgICsrbV9rZXlDb3Vu
dDsKK30KKworaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6cmVoYXNoKFZNJiB2bSwgdW5zaWdu
ZWQgbmV3Q2FwYWNpdHkpCit7CisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAgICsrcHJv
cGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtUmVoYXNoZXM7CisjZW5kaWYKKworICAgIHNpemVf
dCBvbGREYXRhU2l6ZSA9IGRhdGFTaXplKCk7CisgICAgdW5zaWduZWQqIG9sZEVudHJ5SW5kaWNl
cyA9IG1faW5kZXg7CisgICAgaXRlcmF0b3IgaXRlciA9IHRoaXMtPmJlZ2luKCk7CisgICAgaXRl
cmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisKKyAgICBtX2luZGV4U2l6ZSA9IHNpemVGb3JDYXBh
Y2l0eShuZXdDYXBhY2l0eSk7CisgICAgbV9pbmRleE1hc2sgPSBtX2luZGV4U2l6ZSAtIDE7Cisg
ICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV9kZWxldGVkQ291bnQgPSAwOworCisgICAgbV9pbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oUHJvcGVydHlUYWJsZU1hbGxvYzo6emVyb2VkTWFs
bG9jKGRhdGFTaXplKCkpKTsKKworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7CisgICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKKyAg
ICB9CisKKyAgICBQcm9wZXJ0eVRhYmxlTWFsbG9jOjpmcmVlKG9sZEVudHJ5SW5kaWNlcyk7CisK
KyAgICBpZiAob2xkRGF0YVNpemUgPCBkYXRhU2l6ZSgpKQorICAgICAgICB2bS5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKGRhdGFTaXplKCkgLSBvbGREYXRhU2l6ZSk7Cit9CisKK2lu
bGluZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp0YWJsZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleFNpemUgPj4gMTsgfQorCitpbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6
ZGVsZXRlZEVudHJ5SW5kZXgoKSBjb25zdCB7IHJldHVybiB0YWJsZUNhcGFjaXR5KCkgKyAxOyB9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCogUHJvcGVydHlUYWJsZTo6c2tpcERl
bGV0ZWRFbnRyaWVzKFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cikKK3sKKyAgICB3aGlsZSAo
dmFsdWVQdHIgPCBlbmRWYWx1ZVB0ciAmJiB2YWx1ZVB0ci0+a2V5ID09IFBST1BFUlRZX01BUF9E
RUxFVEVEX0VOVFJZX0tFWSkKKyAgICAgICAgKyt2YWx1ZVB0cjsKKyAgICByZXR1cm4gdmFsdWVQ
dHI7Cit9CisKK2lubGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6
OnRhYmxlKCkKK3sKKyAgICAvLyBUaGUgdGFibGUgb2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhh
c2ggaW5kZXguCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KG1f
aW5kZXggKyBtX2luZGV4U2l6ZSk7Cit9CisKK2lubGluZSBjb25zdCBQcm9wZXJ0eVRhYmxlOjpW
YWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OnRhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgdGFi
bGUgb2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFZhbHVlVHlwZSo+KG1faW5kZXggKyBtX2luZGV4U2l6ZSk7
Cit9CisKK2lubGluZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp1c2VkQ291bnQoKSBjb25zdAor
eworICAgIC8vIFRvdGFsIG51bWJlciBvZiAgdXNlZCBlbnRyaWVzIGluIHRoZSB2YWx1ZXMgYXJy
YXkgLSBieSBlaXRoZXIgdmFsaWQgZW50cmllcywgb3IgZGVsZXRlZCBvbmVzLgorICAgIHJldHVy
biBtX2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQ7Cit9CisKK2lubGluZSBzaXplX3QgUHJvcGVy
dHlUYWJsZTo6ZGF0YVNpemUoKQoreworICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRhdGEg
bmVlZGVkIGZvciBieSB0aGUgdGFibGUuCisgICAgLy8gRW5zdXJlIHRoYXQgdGhpcyBmdW5jdGlv
biBjYW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4KKyAgICB1bnNpZ25lZCBpbmRleFNpemUgPSBt
X2luZGV4U2l6ZTsKKyAgICByZXR1cm4gaW5kZXhTaXplICogc2l6ZW9mKHVuc2lnbmVkKSArICgo
aW5kZXhTaXplID4+IDEpICsgMSkgKiBzaXplb2YoVmFsdWVUeXBlKTsKK30KKworaW5saW5lIHVu
c2lnbmVkIFByb3BlcnR5VGFibGU6OnNpemVGb3JDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkK
K3sKKyAgICBpZiAoY2FwYWNpdHkgPCBNaW5pbXVtVGFibGVTaXplIC8gMikKKyAgICAgICAgcmV0
dXJuIE1pbmltdW1UYWJsZVNpemU7CisgICAgcmV0dXJuIG5leHRQb3dlck9mMihjYXBhY2l0eSAr
IDEpICogMjsKK30KKworaW5saW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6Y2FuSW5zZXJ0KCkKK3sK
KyAgICByZXR1cm4gdXNlZENvdW50KCkgPCB0YWJsZUNhcGFjaXR5KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlUYWJsZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMg
LTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgJKHJldmlz
aW9uIDI4NjAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihQCiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKLXN0
cnVjdCBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzIHsKK3N0cnVjdCBQcm9wZXJ0eVRhYmxlU3Rh
dHMgewogICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1GaW5kczsKICAgICBzdGQ6OmF0b21p
Yzx1bnNpZ25lZD4gbnVtQ29sbGlzaW9uczsKICAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVt
TG9va3VwczsKQEAgLTUzLDcgKzUzLDcgQEAgc3RydWN0IFByb3BlcnR5TWFwSGFzaFRhYmxlU3Rh
dHMgewogICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1SZWluc2VydHM7CiB9OwogCi1KU19F
WFBPUlRfUFJJVkFURSBleHRlcm4gUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0czsKK0pTX0VYUE9SVF9QUklWQVRFIGV4dGVybiBQcm9wZXJ0eVRhYmxl
U3RhdHMqIHByb3BlcnR5VGFibGVTdGF0czsKIAogI2VuZGlmCiAKQEAgLTI5OCw3ICsyOTgsNyBA
QCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBQcm9wCiAgICAgdW5zaWduZWQg
aGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKGtleSk7CiAKICNpZiBEVU1QX1BST1BFUlRZ
TUFQX1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1GaW5kczsKKyAg
ICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtRmluZHM7CiAjZW5kaWYKIAogICAgIHdoaWxlICh0
cnVlKSB7CkBAIC0zMDksNyArMzA5LDcgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OmZpbmRfaXRl
cmF0b3IgUHJvcAogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCZ0YWJsZSgpW2Vu
dHJ5SW5kZXggLSAxXSwgaGFzaCAmIG1faW5kZXhNYXNrKTsKIAogI2lmIERVTVBfUFJPUEVSVFlN
QVBfU1RBVFMKLSAgICAgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Db2xsaXNp
b25zOworICAgICAgICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtQ29sbGlzaW9uczsKICNlbmRp
ZgogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9DT0xMSVNJT05TCkBAIC0zMzMsNyArMzMzLDcgQEAg
aW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydAogICAgIHVuc2lnbmVkIGhh
c2ggPSBJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChrZXkpOwogCiAjaWYgRFVNUF9QUk9QRVJUWU1B
UF9TVEFUUwotICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtTG9va3VwczsKKyAg
ICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtTG9va3VwczsKICNlbmRpZgogCiAgICAgd2hpbGUg
KHRydWUpIHsKQEAgLTM0Niw3ICszNDYsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6VmFsdWVU
eXBlKiBQcm9wZXJ0CiAgICAgICAgIH0KIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAg
ICAgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nOworICAg
ICAgICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtTG9va3VwUHJvYmluZzsKICNlbmRpZgogCiAg
ICAgICAgIGhhc2grKzsKQEAgLTM2Myw3ICszNjMsNyBAQCBpbmxpbmUgc3RkOjpwYWlyPFByb3Bl
cnR5VGFibGU6OmZpbmRfaXRlCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBm
YWxzZSk7CiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhh
c2hUYWJsZVN0YXRzLT5udW1BZGRzOworICAgICsrcHJvcGVydHlUYWJsZVN0YXRzLT5udW1BZGRz
OwogI2VuZGlmCiAKICAgICAvLyBSZWYgdGhlIGtleQpAQCAtMzk0LDcgKzM5NCw3IEBAIGlubGlu
ZSB2b2lkIFByb3BlcnR5VGFibGU6OnJlbW92ZShWTSYgdm0KICAgICAgICAgcmV0dXJuOwogCiAj
aWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0
cy0+bnVtUmVtb3ZlczsKKyAgICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtUmVtb3ZlczsKICNl
bmRpZgogCiAgICAgLy8gUmVwbGFjZSB0aGlzIG9uZSBlbGVtZW50IHdpdGggdGhlIGRlbGV0ZWQg
c2VudGluZWwuIEFsc28gY2xlYXIgb3V0CkBAIC00ODksNyArNDg5LDcgQEAgaW5saW5lIHNpemVf
dCBQcm9wZXJ0eVRhYmxlOjpzaXplSW5NZW1vcgogaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6
cmVpbnNlcnQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSkKIHsKICNpZiBEVU1QX1BST1BFUlRZTUFQ
X1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1SZWluc2VydHM7Cisg
ICAgKytwcm9wZXJ0eVRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0czsKICNlbmRpZgogCiAgICAgLy8g
VXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQg
d2hlcmUKQEAgLTUwOCw3ICs1MDgsNyBAQCBpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWlu
c2VydChjb25zCiBpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWhhc2goVk0mIHZtLCB1bnNp
Z25lZCBuZXdDYXBhY2l0eSkKIHsKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytw
cm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1SZWhhc2hlczsKKyAgICArK3Byb3BlcnR5VGFi
bGVTdGF0cy0+bnVtUmVoYXNoZXM7CiAjZW5kaWYKIAogICAgIHNpemVfdCBvbGREYXRhU2l6ZSA9
IGRhdGFTaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHJldmlzaW9uIDI4NjAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNs
dWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1
ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUHJvcGVydHlUYWJsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0xMDQ4LDMzICsxMDQ4LDMzIEBAIHZvaWQg
U3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KIAogI2lmIERVTVBfUFJPUEVSVFlN
QVBfU1RBVFMKIAotUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFi
bGVTdGF0cyA9IDA7CitQcm9wZXJ0eVRhYmxlU3RhdHMqIHByb3BlcnR5VGFibGVTdGF0cyA9IDA7
CiAKLXN0cnVjdCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyIHsKLSAgICBQcm9wZXJ0
eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyKCk7Ci0gICAgflByb3BlcnR5TWFwU3RhdGlzdGljc0V4
aXRMb2dnZXIoKTsKK3N0cnVjdCBQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dnZXIgewor
ICAgIFByb3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcigpOworICAgIH5Qcm9wZXJ0eVRh
YmxlU3RhdGlzdGljc0V4aXRMb2dnZXIoKTsKIH07CiAKLURFRklORV9HTE9CQUxfRk9SX0xPR0dJ
TkcoUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlciwgbG9nZ2VyLCApOworREVGSU5FX0dM
T0JBTF9GT1JfTE9HR0lORyhQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dnZXIsIGxvZ2dl
ciwgeyB9KTsKIAotUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6UHJvcGVydHlNYXBT
dGF0aXN0aWNzRXhpdExvZ2dlcigpCitQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dnZXI6
OlByb3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcigpCiB7Ci0gICAgcHJvcGVydHlNYXBI
YXNoVGFibGVTdGF0cyA9IGFkb3B0UHRyKG5ldyBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKCkp
LmxlYWtQdHIoKTsKKyAgICBwcm9wZXJ0eVRhYmxlU3RhdHMgPSBhZG9wdFB0cihuZXcgUHJvcGVy
dHlUYWJsZVN0YXRzKCkpLmxlYWtQdHIoKTsKIH0KIAotUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhp
dExvZ2dlcjo6flByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIoKQorUHJvcGVydHlUYWJs
ZVN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVydHlUYWJsZVN0YXRpc3RpY3NFeGl0TG9nZ2Vy
KCkKIHsKLSAgICB1bnNpZ25lZCBmaW5kcyA9IHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51
bUZpbmRzOwotICAgIHVuc2lnbmVkIGNvbGxpc2lvbnMgPSBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0
YXRzLT5udW1Db2xsaXNpb25zOworICAgIHVuc2lnbmVkIGZpbmRzID0gcHJvcGVydHlUYWJsZVN0
YXRzLT5udW1GaW5kczsKKyAgICB1bnNpZ25lZCBjb2xsaXNpb25zID0gcHJvcGVydHlUYWJsZVN0
YXRzLT5udW1Db2xsaXNpb25zOwogICAgIGRhdGFMb2dGKCJcbkpTQzo6UHJvcGVydHlNYXAgc3Rh
dGlzdGljcyBmb3IgcHJvY2VzcyAlZFxuXG4iLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCkpOwogICAg
IGRhdGFMb2dGKCIlZCBmaW5kc1xuIiwgZmluZHMpOwogICAgIGRhdGFMb2dGKCIlZCBjb2xsaXNp
b25zICglLjFmJSUpXG4iLCBjb2xsaXNpb25zLCAxMDAuMCAqIGNvbGxpc2lvbnMgLyBmaW5kcyk7
Ci0gICAgZGF0YUxvZ0YoIiVkIGxvb2t1cHNcbiIsIHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMt
Pm51bUxvb2t1cHMubG9hZCgpKTsKLSAgICBkYXRhTG9nRigiJWQgbG9va3VwIHByb2JpbmdzXG4i
LCBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nLmxvYWQoKSk7Ci0g
ICAgZGF0YUxvZ0YoIiVkIGFkZHNcbiIsIHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUFk
ZHMubG9hZCgpKTsKLSAgICBkYXRhTG9nRigiJWQgcmVtb3Zlc1xuIiwgcHJvcGVydHlNYXBIYXNo
VGFibGVTdGF0cy0+bnVtUmVtb3Zlcy5sb2FkKCkpOwotICAgIGRhdGFMb2dGKCIlZCByZWhhc2hl
c1xuIiwgcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtUmVoYXNoZXMubG9hZCgpKTsKLSAg
ICBkYXRhTG9nRigiJWQgcmVpbnNlcnRzXG4iLCBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5u
dW1SZWluc2VydHMubG9hZCgpKTsKKyAgICBkYXRhTG9nRigiJWQgbG9va3Vwc1xuIiwgcHJvcGVy
dHlUYWJsZVN0YXRzLT5udW1Mb29rdXBzLmxvYWQoKSk7CisgICAgZGF0YUxvZ0YoIiVkIGxvb2t1
cCBwcm9iaW5nc1xuIiwgcHJvcGVydHlUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nLmxvYWQo
KSk7CisgICAgZGF0YUxvZ0YoIiVkIGFkZHNcbiIsIHByb3BlcnR5VGFibGVTdGF0cy0+bnVtQWRk
cy5sb2FkKCkpOworICAgIGRhdGFMb2dGKCIlZCByZW1vdmVzXG4iLCBwcm9wZXJ0eVRhYmxlU3Rh
dHMtPm51bVJlbW92ZXMubG9hZCgpKTsKKyAgICBkYXRhTG9nRigiJWQgcmVoYXNoZXNcbiIsIHBy
b3BlcnR5VGFibGVTdGF0cy0+bnVtUmVoYXNoZXMubG9hZCgpKTsKKyAgICBkYXRhTG9nRigiJWQg
cmVpbnNlcnRzXG4iLCBwcm9wZXJ0eVRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0cy5sb2FkKCkpOwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDI4NjAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIlBy
b3BlcnR5TWFwSGFzaFRhYmxlLmgiCisjaW5jbHVkZSAiUHJvcGVydHlUYWJsZS5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCShyZXZpc2lvbiAyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQAogI2luY2x1ZGUg
IlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiUHJvZ3JhbUV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJs
ZS5oIgorI2luY2x1ZGUgIlByb3BlcnR5VGFibGUuaCIKICNpbmNsdWRlICJQcm94eVJldm9rZS5o
IgogI2luY2x1ZGUgIlJhbmRvbWl6aW5nRnV6emVyQWdlbnQuaCIKICNpbmNsdWRlICJSZWdFeHBD
YWNoZS5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444732</attachid>
            <date>2021-11-18 13:52:26 -0800</date>
            <delta_ts>2021-11-18 15:19:13 -0800</delta_ts>
            <desc>[fast-cq] proposed patch.</desc>
            <filename>bug-233333.patch</filename>
            <type>text/plain</type>
            <size>52673</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2MDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDIxLTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgUHJvcGVydHlNYXBIYXNoVGFibGUuaCB0byBQcm9wZXJ0eVRhYmxlLmggdG8gbWF0Y2gg
dGhlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzMzMzCisgICAgICAgIHJkYXI6Ly84NTU2NTc2MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gcmVuYW1lZCBzb21lIHN1cHBvcnRpbmcg
ZGF0YSBzdHJ1Y3R1cmVzIHRvIG1hdGNoLiAgVGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcKKyAg
ICAgICAgcGF0Y2guICBUaGVyZSBhcmUgbm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHA6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVRhYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmguCisgICAgICAgIChKU0M6OlByb3BlcnR5
VGFibGU6OmZpbmQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpnZXQpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxl
OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpyZWluc2VydCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5VGFibGU6OnJlaGFzaCk6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dn
ZXI6OlByb3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcik6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcnR5VGFibGVTdGF0aXN0aWNz
RXhpdExvZ2dlcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dn
ZXI6OlByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVydHlNYXBTdGF0aXN0
aWNzRXhpdExvZ2dlcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisKIDIwMjEtMTEtMTggIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBBZGQgYnJhbmNoVGVz
dDE2IG9wZXJhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMjg2MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xMTM5LDEyICsxMTM5LDEyIEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL1ByaXZhdGVOYW1lLmgKICAgICBydW50
aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5o
Ci0gICAgcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCiAgICAgcnVudGltZS9Qcm9wZXJ0
eU5hbWUuaAogICAgIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAogICAgIHJ1bnRpbWUvUHJv
cGVydHlPZmZzZXQuaAogICAgIHJ1bnRpbWUvUHJvcGVydHlTbG90LmgKICAgICBydW50aW1lL1By
b3BlcnR5U3RvcmFnZS5oCisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgKICAgICBydW50aW1l
L1Byb3RlY3QuaAogICAgIHJ1bnRpbWUvUHJvdG90eXBlS2V5LmgKICAgICBydW50aW1lL1Byb3h5
T2JqZWN0LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODYw
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc1MCw3ICsxNzUwLDcgQEAKIAkJQkM3
NTZGQzkwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc1NkZDNzBFMjAzMUIy
MDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzg3Q0RCOTEwNzEyQUQ0MDAwNjE0Q0Yg
LyogSlNPTk9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDODdDREI4MTA3MTJBQ0EwMDA2MTRDRiAvKiBKU09OT2JqZWN0Lmx1dC5oICov
OyB9OwogCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzkw
NDE0NzBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkM5NTQzN0QwRUJB
NzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFwSGFzaFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk1NDM3QzBFQkE3MEZEMDA3MkI2RDMgLyog
UHJvcGVydHlNYXBIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyogUHJvcGVydHlUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5NTQz
N0MwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5VGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0JFMkNBRTE0RTk4NUFBMDAwNTkzQUQg
LyogR0NBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0JFMkNBRDE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNDRjBEMDgwRUYw
QUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NGMEQwNzBFRjBBQUI5MDA0MTNDOEYgLyogU3Ry
dWN0dXJlU3R1YkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDIwMkJF
MEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtNDk5MSw3
ICs0OTkxLDcgQEAKIAkJQkM4N0NEQjgxMDcxMkFDQTAwMDYxNENGIC8qIEpTT05PYmplY3QubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT05PYmplY3QubHV0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEYzQ0NGMERBRjE3QkEwMDU3N0E4MCAvKiBD
b25zdHJ1Y3REYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cnVj
dERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5MDQxNDcwRUI5MjUwOTAw
RkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkM5NTQzN0MwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFwSGFz
aFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5TWFwSGFz
aFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOTU0MzdDMEVCQTcwRkQw
MDcyQjZEMyAvKiBQcm9wZXJ0eVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3BlcnR5VGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5QkI5
NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJuYWxGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBD
b25zdHJ1Y3REYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bnN0cnVjdERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzk1OCw3ICs3
OTU4LDYgQEAKIAkJCQkxNDczNDFEMzFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFi
bGUuaCAqLywKIAkJCQlBN0ZCNjBBMzEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlw
dG9yLmNwcCAqLywKIAkJCQlBN0ZCNjA0QjEwM0Y1RUFCMDAxN0EyODYgLyogUHJvcGVydHlEZXNj
cmlwdG9yLmggKi8sCi0JCQkJQkM5NTQzN0MwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFw
SGFzaFRhYmxlLmggKi8sCiAJCQkJODYxNThBQjIxNTVDOEIzRjAwQjQ1QzlDIC8qIFByb3BlcnR5
TmFtZS5oICovLAogCQkJCTY1NDAwQzEwMEE2OUJBRjIwMDUwOTg4NyAvKiBQcm9wZXJ0eU5hbWVB
cnJheS5oICovLAogCQkJCTBGRjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNl
dC5oICovLApAQCAtNzk2Niw2ICs3OTY1LDcgQEAKIAkJCQk2NTYyMUU2QzA4OUU4NTk3MDA3NjBG
MzUgLyogUHJvcGVydHlTbG90LmggKi8sCiAJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8q
IFByb3BlcnR5U3RvcmFnZS5oICovLAogCQkJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCAqLywKKwkJCQlCQzk1NDM3QzBFQkE3MEZEMDA3MkI2RDMgLyogUHJv
cGVydHlUYWJsZS5oICovLAogCQkJCTY1QzAyRkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBQcm90ZWN0
LmggKi8sCiAJCQkJMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5oICov
LAogCQkJCTc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAq
LywKQEAgLTEwNjc2LDcgKzEwNjc2LDcgQEAKIAkJCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEg
LyogUHJvZ3JhbUV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBFMUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdG
QjYxMDAxMDQwQzM4QjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQkM5NTQzN0QwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFwSGFzaFRhYmxl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyogUHJvcGVy
dHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYxNThBQjMxNTVDOEI0MDAwQjQ1QzlDIC8q
IFByb3BlcnR5TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTQwRTE2RjVDRDAwQjM0
NDYwIC8qIFByb3BlcnR5TmFtZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MTY4QzE1
QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oCShyZXZpc2lvbiAyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShub25leGlzdGVudCkKQEAgLTEsNTg3ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hUYWJs
ZS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nSW1wbC5oPgotCi0KLSNkZWZpbmUgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUyAwCi0jZGVm
aW5lIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUyAwCi0KLSNkZWZpbmUgUFJPUEVSVFlfTUFQ
X0RFTEVURURfRU5UUllfS0VZICgoVW5pcXVlZFN0cmluZ0ltcGwqKTEpCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihQcm9wZXJ0eVRh
YmxlKTsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLQotc3RydWN0IFByb3BlcnR5TWFw
SGFzaFRhYmxlU3RhdHMgewotICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1GaW5kczsKLSAg
ICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQ29sbGlzaW9uczsKLSAgICBzdGQ6OmF0b21pYzx1
bnNpZ25lZD4gbnVtTG9va3VwczsKLSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtTG9va3Vw
UHJvYmluZzsKLSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQWRkczsKLSAgICBzdGQ6OmF0
b21pYzx1bnNpZ25lZD4gbnVtUmVtb3ZlczsKLSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVt
UmVoYXNoZXM7Ci0gICAgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bVJlaW5zZXJ0czsKLX07Ci0K
LUpTX0VYUE9SVF9QUklWQVRFIGV4dGVybiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBwcm9w
ZXJ0eU1hcEhhc2hUYWJsZVN0YXRzOwotCi0jZW5kaWYKLQotaW5saW5lIGJvb2wgaXNQb3dlck9m
Mih1bnNpZ25lZCB2KQotewotICAgIHJldHVybiBoYXNPbmVCaXRTZXQodik7Ci19Ci0KLWlubGlu
ZSB1bnNpZ25lZCBuZXh0UG93ZXJPZjIodW5zaWduZWQgdikKLXsKLSAgICAvLyBUYWtlbiBmcm9t
IGh0dHA6Ly93d3cuY3MudXRrLmVkdS9+dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKLSAgICAv
LyBEZXZpc2VkIGJ5IFNlYW4gQW5kZXJzb24sIFNlcGVtYmVyIDE0LCAyMDAxCi0KLSAgICB2LS07
Ci0gICAgdiB8PSB2ID4+IDE7Ci0gICAgdiB8PSB2ID4+IDI7Ci0gICAgdiB8PSB2ID4+IDQ7Ci0g
ICAgdiB8PSB2ID4+IDg7Ci0gICAgdiB8PSB2ID4+IDE2OwotICAgIHYrKzsKLQotICAgIHJldHVy
biB2OwotfQotCi1jbGFzcyBQcm9wZXJ0eVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Ci0K
LSAgICAvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgJ2l0ZXJhdG9yJyBhbmQgJ2Nv
bnN0X2l0ZXJhdG9yJywKLSAgICAvLyB1c2VkIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgdGFibGUg
aW4gaW5zZXJ0aW9uIG9yZGVyLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgY2xhc3Mg
b3JkZXJlZF9pdGVyYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBvcmRlcmVkX2l0ZXJhdG9y
PFQ+JiBvcGVyYXRvcisrKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV92YWx1ZVB0ciA9IHNr
aXBEZWxldGVkRW50cmllcyhtX3ZhbHVlUHRyICsgMSwgbV9lbmRWYWx1ZVB0cik7Ci0gICAgICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBtX3ZhbHVlUHRyID09IG90aGVyLm1fdmFsdWVQdHI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlUHRyICE9IG90aGVyLm1fdmFsdWVQ
dHI7Ci0gICAgICAgIH0KLQotICAgICAgICBUJiBvcGVyYXRvciooKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKm1fdmFsdWVQdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBUKiBvcGVy
YXRvci0+KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVQdHI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvcmRlcmVkX2l0ZXJhdG9yKFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1
ZVB0cikKLSAgICAgICAgICAgIDogbV92YWx1ZVB0cih2YWx1ZVB0cikKLSAgICAgICAgICAgICwg
bV9lbmRWYWx1ZVB0cihlbmRWYWx1ZVB0cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBUKiBtX3ZhbHVlUHRyOwotICAgICAgICBUKiBtX2VuZFZhbHVlUHRy
OwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgU3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCi0gICAgewotICAgICAgICByZXR1cm4gJnZtLnByb3BlcnR5VGFibGVTcGFjZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOwotCi0gICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBLZXlUeXBlOwotICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBWYWx1ZVR5cGU7Ci0K
LSAgICAvLyBUaGUgaW4gb3JkZXIgaXRlcmF0b3IgcHJvdmlkZXMgb3ZlcmxvYWRlZCAqIGFuZCAt
PiB0byBhY2Nlc3MgdGhlIFZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgIHR5cGVk
ZWYgb3JkZXJlZF9pdGVyYXRvcjxWYWx1ZVR5cGU+IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgb3Jk
ZXJlZF9pdGVyYXRvcjxjb25zdCBWYWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOwotCi0gICAgLy8g
VGhlIGZpbmRfaXRlcmF0b3IgaXMgYSBwYWlyIG9mIGEgcG9pbnRlciB0byBhIFZhbHVlKiBhbiB0
aGUgZW50cnkgaW4gdGhlIGluZGV4LgotICAgIC8vIElmICdmaW5kJyBkb2VzIG5vdCBmaW5kIGFu
IGVudHJ5IHRoZW4gaXRlci5maXJzdCB3aWxsIGJlIDAsIGFuZCBpdGVyLnNlY29uZCB3aWxsCi0g
ICAgLy8gZ2l2ZSB0aGUgcG9pbnQgaW4gbV9pbmRleCB3aGVyZSBhbiBlbnRyeSBzaG91bGQgYmUg
aW5zZXJ0ZWQuCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgdW5zaWduZWQ+IGZp
bmRfaXRlcmF0b3I7Ci0KLSAgICAvLyBDb25zdHJ1Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlhbCBj
YXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNvcHksIG9yIGJvdGguCi0gICAgc3RhdGljIFBy
b3BlcnR5VGFibGUqIGNyZWF0ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAg
c3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwot
ICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwotICAgIH5Qcm9wZXJ0eVRhYmxlKCk7Ci0KLSAg
ICAvLyBPcmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgotICAgIGl0ZXJhdG9yIGJlZ2luKCk7Ci0g
ICAgaXRlcmF0b3IgZW5kKCk7Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKLQotICAgIC8vIEZpbmQgYSB2YWx1ZSBpbiB0
aGUgdGFibGUuCi0gICAgZmluZF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmKTsKLSAgICBW
YWx1ZVR5cGUqIGdldChjb25zdCBLZXlUeXBlJik7Ci0gICAgLy8gQWRkIGEgdmFsdWUgdG8gdGhl
IHRhYmxlCi0gICAgc3RkOjpwYWlyPGZpbmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGQoVk0mLCBjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKLSAgICAvLyBSZW1vdmUgYSB2
YWx1ZSBmcm9tIHRoZSB0YWJsZS4KLSAgICB2b2lkIHJlbW92ZShWTSYsIGNvbnN0IGZpbmRfaXRl
cmF0b3ImIGl0ZXIpOwotICAgIHZvaWQgcmVtb3ZlKFZNJiwgY29uc3QgS2V5VHlwZSYga2V5KTsK
LQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJsZS4K
LSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7Ci0KLSAgICAvLyBDaGVja3MgaWYgdGhlcmUgYXJl
IGFueSB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJsZS4KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
LQotICAgIC8vIE51bWJlciBvZiBzbG90cyBpbiB0aGUgcHJvcGVydHkgc3RvcmFnZSBhcnJheSBp
biB1c2UsIGluY2x1ZGVkIGRlbGV0ZWRPZmZzZXRzLgotICAgIHVuc2lnbmVkIHByb3BlcnR5U3Rv
cmFnZVNpemUoKSBjb25zdDsKLQotICAgIC8vIFVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHVu
dXNlZCBlbnRyaWVzIGluIHRoZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgIHZvaWQgY2xlYXJEZWxl
dGVkT2Zmc2V0cygpOwotICAgIGJvb2wgaGFzRGVsZXRlZE9mZnNldCgpOwotICAgIFByb3BlcnR5
T2Zmc2V0IGdldERlbGV0ZWRPZmZzZXQoKTsKLSAgICB2b2lkIGFkZERlbGV0ZWRPZmZzZXQoUHJv
cGVydHlPZmZzZXQpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVy
dHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwotCi0gICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFi
bGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQu
Ci0gICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7Ci0gICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KCk7Ci0jZW5kaWYKLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5kZXhTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5VGFibGUsIG1f
aW5kZXhTaXplKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleE1hc2soKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlUYWJsZSwgbV9pbmRleE1hc2spOyB9Ci0g
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFByb3BlcnR5VGFibGUsIG1faW5kZXgpOyB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgUHJvcGVydHlUYWJs
ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShWTSYs
IGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0KLSAgICBQcm9wZXJ0eVRh
YmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKLQotICAgIC8vIFVzZWQgdG8gaW5zZXJ0IGEgdmFsdWUga25vd24gbm90IHRvIGJlIGluIHRo
ZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cgY2FwYWNpdHkgdG8gYmUgYXZhaWxhYmxlLgotICAg
IHZvaWQgcmVpbnNlcnQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSk7Ci0KLSAgICAvLyBSZWhhc2gg
dGhlIHRhYmxlLiAgVXNlZCB0byBncm93LCBvciB0byByZWNvdmVyIGRlbGV0ZWQgc2xvdHMuCi0g
ICAgdm9pZCByZWhhc2goVk0mLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7Ci0KLSAgICAvLyBUaGUg
Y2FwYWNpdHkgb2YgdGhlIHRhYmxlIG9mIHZhbHVlcyBpcyBoYWxmIG9mIHRoZSBzaXplIG9mIHRo
ZSBpbmRleC4KLSAgICB1bnNpZ25lZCB0YWJsZUNhcGFjaXR5KCkgY29uc3Q7Ci0KLSAgICAvLyBX
ZSBrZWVwIGFuIGV4dHJhIGRlbGV0ZWQgc2xvdCBhZnRlciB0aGUgYXJyYXkgdG8gbWFrZSBpdGVy
YXRpb24gd29yaywKLSAgICAvLyBhbmQgdG8gdXNlIGZvciBkZWxldGVkIHZhbHVlcy4gSW5kZXgg
dmFsdWVzIGludG8gdGhlIGFycmF5IGFyZSAxLWJhc2VkLAotICAgIC8vIHNvIHRoaXMgaXMgdGFi
bGVDYXBhY2l0eSgpICsgMS4KLSAgICAvLyBGb3IgZXhhbXBsZSwgaWYgbV90YWJsZVNpemUgaXMg
MTYsIHRoZW4gdGFibGVDYXBhY2l0eSgpIGlzIDggLSBidXQgdGhlCi0gICAgLy8gdmFsdWVzIGFy
cmF5IGlzIGFjdHVhbGx5IDkgbG9uZyAodGhlIDl0aCB1c2VkIGZvciB0aGUgZGVsZXRlZCB2YWx1
ZS8KLSAgICAvLyBpdGVyYXRpb24gZ3VhcmQpLiAgVGhlIDggdmFsaWQgZW50cmllcyBhcmUgbnVt
YmVyZWQgMS4uOCwgc28gdGhlCi0gICAgLy8gZGVsZXRlZCBpbmRleCBpcyA5ICgwIGJlaW5nIHJl
c2VydmVkIGZvciBlbXB0eSkuCi0gICAgdW5zaWduZWQgZGVsZXRlZEVudHJ5SW5kZXgoKSBjb25z
dDsKLQotICAgIC8vIFVzZWQgaW4gaXRlcmF0b3IgY3JlYXRpb24vcHJvZ3Jlc3Npb24uCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCogc2tpcERlbGV0ZWRFbnRyaWVzKFQq
IHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cik7Ci0KLSAgICAvLyBUaGUgdGFibGUgb2YgdmFsdWVz
IGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCi0gICAgVmFsdWVUeXBlKiB0YWJsZSgpOwotICAg
IGNvbnN0IFZhbHVlVHlwZSogdGFibGUoKSBjb25zdDsKLQotICAgIFZhbHVlVHlwZSogdGFibGVF
bmQoKSB7IHJldHVybiB0YWJsZSgpICsgdXNlZENvdW50KCk7IH0KLSAgICBjb25zdCBWYWx1ZVR5
cGUqIHRhYmxlRW5kKCkgY29uc3QgeyByZXR1cm4gdGFibGUoKSArIHVzZWRDb3VudCgpOyB9Ci0K
LSAgICAvLyB0b3RhbCBudW1iZXIgb2YgIHVzZWQgZW50cmllcyBpbiB0aGUgdmFsdWVzIGFycmF5
IC0gYnkgZWl0aGVyIHZhbGlkIGVudHJpZXMsIG9yIGRlbGV0ZWQgb25lcy4KLSAgICB1bnNpZ25l
ZCB1c2VkQ291bnQoKSBjb25zdDsKLQotICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRhdGEg
bmVlZGVkIGZvciBieSB0aGUgdGFibGUuCi0gICAgc2l6ZV90IGRhdGFTaXplKCk7Ci0KLSAgICAv
LyBDYWxjdWxhdGVzIHRoZSBhcHByb3ByaWF0ZSB0YWJsZSBzaXplIChyb3VuZHMgdXAgdG8gYSBw
b3dlciBvZiB0d28pLgotICAgIHN0YXRpYyB1bnNpZ25lZCBzaXplRm9yQ2FwYWNpdHkodW5zaWdu
ZWQgY2FwYWNpdHkpOwotCi0gICAgLy8gQ2hlY2sgaWYgY2FwYWNpdHkgaXMgYXZhaWxhYmxlLgot
ICAgIGJvb2wgY2FuSW5zZXJ0KCk7Ci0KLSAgICB1bnNpZ25lZCBtX2luZGV4U2l6ZTsKLSAgICB1
bnNpZ25lZCBtX2luZGV4TWFzazsKLSAgICB1bnNpZ25lZCogbV9pbmRleDsKLSAgICB1bnNpZ25l
ZCBtX2tleUNvdW50OwotICAgIHVuc2lnbmVkIG1fZGVsZXRlZENvdW50OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+PiBtX2RlbGV0ZWRPZmZzZXRzOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNaW5pbXVtVGFibGVTaXplID0gMTY7Ci19OwotCi1p
bmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6YmVnaW4oKQotewot
ICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKLSAgICByZXR1cm4gaXRlcmF0
b3Ioc2tpcERlbGV0ZWRFbnRyaWVzKHRhYmxlKCksIHRhYmxlRW5kKSwgdGFibGVFbmQpOwotfQot
Ci1pbmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZW5kKCkKLXsK
LSAgICBhdXRvKiB0YWJsZUVuZCA9IHRoaXMtPnRhYmxlRW5kKCk7Ci0gICAgcmV0dXJuIGl0ZXJh
dG9yKHRhYmxlRW5kLCB0YWJsZUVuZCk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpjb25z
dF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjpiZWdpbigpIGNvbnN0Ci17Ci0gICAgYXV0byogdGFi
bGVFbmQgPSB0aGlzLT50YWJsZUVuZCgpOwotICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihza2lw
RGVsZXRlZEVudHJpZXModGFibGUoKSwgdGFibGVFbmQpLCB0YWJsZUVuZCk7Ci19Ci0KLWlubGlu
ZSBQcm9wZXJ0eVRhYmxlOjpjb25zdF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjplbmQoKSBjb25z
dAotewotICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKLSAgICByZXR1cm4g
Y29uc3RfaXRlcmF0b3IodGFibGVFbmQsIHRhYmxlRW5kKTsKLX0KLQotaW5saW5lIFByb3BlcnR5
VGFibGU6OmZpbmRfaXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZmluZChjb25zdCBLZXlUeXBlJiBr
ZXkpCi17Ci0gICAgQVNTRVJUKGtleSk7Ci0gICAgQVNTRVJUKGtleS0+aXNBdG9tKCkgfHwga2V5
LT5pc1N5bWJvbCgpKTsKLSAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpZmllclJlcEhhc2g6Omhh
c2goa2V5KTsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICArK3Byb3BlcnR5TWFw
SGFzaFRhYmxlU3RhdHMtPm51bUZpbmRzOwotI2VuZGlmCi0KLSAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1hc2td
OwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKFZhbHVlVHlwZSopbnVsbHB0ciwgaGFzaCAmIG1faW5k
ZXhNYXNrKTsKLSAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5rZXkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoJnRhYmxlKClbZW50cnlJbmRleCAt
IDFdLCBoYXNoICYgbV9pbmRleE1hc2spOwotCi0jaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwot
ICAgICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUNvbGxpc2lvbnM7Ci0jZW5k
aWYKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUwotICAgICAgICBkYXRhTG9nKCJQ
cm9wZXJ0eVRhYmxlIGNvbGxpc2lvbiBmb3IgIiwga2V5LCAiICgiLCBoYXNoLCAiKVxuIik7Ci0g
ICAgICAgIGRhdGFMb2coIkNvbGxpZGVkIHdpdGggIiwgdGFibGUoKVtlbnRyeUluZGV4IC0gMV0u
a2V5LCAiKCIsIElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHRhYmxlKClbZW50cnlJbmRleCAtIDFd
LmtleSksICIpXG4iKTsKLSNlbmRpZgotCi0gICAgICAgIGhhc2grKzsKLSAgICB9Ci19Ci0KLWlu
bGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OmdldChjb25zdCBL
ZXlUeXBlJiBrZXkpCi17Ci0gICAgQVNTRVJUKGtleSk7Ci0gICAgQVNTRVJUKGtleS0+aXNBdG9t
KCkgfHwga2V5LT5pc1N5bWJvbCgpKTsKLSAgICBBU1NFUlQoa2V5ICE9IFBST1BFUlRZX01BUF9E
RUxFVEVEX0VOVFJZX0tFWSk7Ci0KLSAgICBpZiAoIW1fa2V5Q291bnQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgdW5zaWduZWQgaGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNo
KGtleSk7Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhh
c2hUYWJsZVN0YXRzLT5udW1Mb29rdXBzOwotI2VuZGlmCi0KLSAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1hc2td
OwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5kZXgg
LSAxXS5rZXkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cyB8fCAhbV9k
ZWxldGVkT2Zmc2V0cy0+Y29udGFpbnModGFibGUoKVtlbnRyeUluZGV4IC0gMV0ub2Zmc2V0KSk7
Ci0gICAgICAgICAgICByZXR1cm4gJnRhYmxlKClbZW50cnlJbmRleCAtIDFdOwotICAgICAgICB9
Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgICAgICsrcHJvcGVydHlNYXBIYXNo
VGFibGVTdGF0cy0+bnVtTG9va3VwUHJvYmluZzsKLSNlbmRpZgotCi0gICAgICAgIGhhc2grKzsK
LSAgICB9Ci19Ci0KLWlubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRv
ciwgYm9vbD4gV0FSTl9VTlVTRURfUkVUVVJOIFByb3BlcnR5VGFibGU6OmFkZChWTSYgdm0sIGNv
bnN0IFZhbHVlVHlwZSYgZW50cnkpCi17Ci0gICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRzIHx8
ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsKLQotICAgIC8vIExv
b2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGluIHRoZSBhcnJheS4K
LSAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0gICAgaWYgKGl0ZXIu
Zmlyc3QpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxzZSk7Ci0KLSNp
ZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRz
LT5udW1BZGRzOwotI2VuZGlmCi0KLSAgICAvLyBSZWYgdGhlIGtleQotICAgIGVudHJ5LmtleS0+
cmVmKCk7Ci0KLSAgICAvLyBlbnN1cmUgY2FwYWNpdHkgaXMgYXZhaWxhYmxlLgotICAgIGlmICgh
Y2FuSW5zZXJ0KCkpIHsKLSAgICAgICAgcmVoYXNoKHZtLCBtX2tleUNvdW50ICsgMSk7Ci0gICAg
ICAgIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0gICAgICAgIEFTU0VSVCghaXRlci5maXJzdCk7
Ci0gICAgfQotCi0gICAgLy8gQWxsb2NhdGUgYSBzbG90IGluIHRoZSBoYXNodGFibGUsIGFuZCBz
ZXQgdGhlIGluZGV4IHRvIHJlZmVyZW5jZSB0aGlzLgotICAgIHVuc2lnbmVkIGVudHJ5SW5kZXgg
PSB1c2VkQ291bnQoKSArIDE7Ci0gICAgbV9pbmRleFtpdGVyLnNlY29uZF0gPSBlbnRyeUluZGV4
OwotICAgIGl0ZXIuZmlyc3QgPSAmdGFibGUoKVtlbnRyeUluZGV4IC0gMV07Ci0gICAgKml0ZXIu
Zmlyc3QgPSBlbnRyeTsKLQotICAgICsrbV9rZXlDb3VudDsKLSAgICAKLSAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoaXRlciwgdHJ1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIFByb3BlcnR5VGFibGU6
OnJlbW92ZShWTSYgdm0sIGNvbnN0IGZpbmRfaXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgLy8gUmVt
b3ZpbmcgYSBrZXkgdGhhdCBkb2Vzbid0IGV4aXN0IGRvZXMgbm90aGluZyEKLSAgICBpZiAoIWl0
ZXIuZmlyc3QpCi0gICAgICAgIHJldHVybjsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMK
LSAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlbW92ZXM7Ci0jZW5kaWYKLQot
ICAgIC8vIFJlcGxhY2UgdGhpcyBvbmUgZWxlbWVudCB3aXRoIHRoZSBkZWxldGVkIHNlbnRpbmVs
LiBBbHNvIGNsZWFyIG91dAotICAgIC8vIHRoZSBlbnRyeSBzbyB3ZSBjYW4gaXRlcmF0ZSBhbGwg
dGhlIGVudHJpZXMgYXMgbmVlZGVkLgotICAgIG1faW5kZXhbaXRlci5zZWNvbmRdID0gZGVsZXRl
ZEVudHJ5SW5kZXgoKTsKLSAgICBpdGVyLmZpcnN0LT5rZXktPmRlcmVmKCk7Ci0gICAgaXRlci5m
aXJzdC0+a2V5ID0gUFJPUEVSVFlfTUFQX0RFTEVURURfRU5UUllfS0VZOwotCi0gICAgQVNTRVJU
KG1fa2V5Q291bnQgPj0gMSk7Ci0gICAgLS1tX2tleUNvdW50OwotICAgICsrbV9kZWxldGVkQ291
bnQ7Ci0KLSAgICBpZiAobV9kZWxldGVkQ291bnQgKiA0ID49IG1faW5kZXhTaXplKQotICAgICAg
ICByZWhhc2godm0sIG1fa2V5Q291bnQpOwotfQotCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxl
OjpyZW1vdmUoVk0mIHZtLCBjb25zdCBLZXlUeXBlJiBrZXkpCi17Ci0gICAgcmVtb3ZlKHZtLCBm
aW5kKGtleSkpOwotfQotCi0vLyByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRoZSBo
YXNodGFibGUuCi1pbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6c2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fa2V5Q291bnQ7Ci19Ci0KLWlubGluZSBib29sIFByb3BlcnR5VGFibGU6
OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9rZXlDb3VudDsKLX0KLQotaW5saW5l
IHVuc2lnbmVkIFByb3BlcnR5VGFibGU6OnByb3BlcnR5U3RvcmFnZVNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBzaXplKCkgKyAobV9kZWxldGVkT2Zmc2V0cyA/IG1fZGVsZXRlZE9mZnNldHMt
PnNpemUoKSA6IDApOwotfQotCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpjbGVhckRlbGV0
ZWRPZmZzZXRzKCkKLXsKLSAgICBtX2RlbGV0ZWRPZmZzZXRzID0gbnVsbHB0cjsKLX0KLQotaW5s
aW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6aGFzRGVsZXRlZE9mZnNldCgpCi17Ci0gICAgcmV0dXJu
IG1fZGVsZXRlZE9mZnNldHMgJiYgIW1fZGVsZXRlZE9mZnNldHMtPmlzRW1wdHkoKTsKLX0KLQot
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFByb3BlcnR5VGFibGU6OmdldERlbGV0ZWRPZmZzZXQoKQot
ewotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fZGVsZXRlZE9mZnNldHMtPmxhc3QoKTsK
LSAgICBtX2RlbGV0ZWRPZmZzZXRzLT5yZW1vdmVMYXN0KCk7Ci0gICAgcmV0dXJuIG9mZnNldDsK
LX0KLQotaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6YWRkRGVsZXRlZE9mZnNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgaWYgKCFtX2RlbGV0ZWRPZmZzZXRzKQotICAgICAgICBt
X2RlbGV0ZWRPZmZzZXRzID0gbWFrZVVuaXF1ZTxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+PigpOwot
ICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnMob2Zmc2V0KSk7Ci0gICAgbV9k
ZWxldGVkT2Zmc2V0cy0+YXBwZW5kKG9mZnNldCk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eU9mZnNl
dCBQcm9wZXJ0eVRhYmxlOjpuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFjaXR5
KQotewotICAgIGlmIChoYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiBnZXREZWxl
dGVkT2Zmc2V0KCk7Ci0KLSAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgp
LCBpbmxpbmVDYXBhY2l0eSk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRh
YmxlOjpjb3B5KFZNJiB2bSwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCi17Ci0gICAgQVNTRVJUKG5l
d0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwotCi0gICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3
IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBt
ZW1jcHkgaXQsCi0gICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMuCi0gICAgaWYgKHNpemVG
b3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCi0gICAgICAgIHJldHVybiBQ
cm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnRoaXMpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZSh2bSwgbmV3Q2FwYWNpdHksICp0aGlzKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLWlu
bGluZSBzaXplX3QgUHJvcGVydHlUYWJsZTo6c2l6ZUluTWVtb3J5KCkKLXsKLSAgICBzaXplX3Qg
cmVzdWx0ID0gc2l6ZW9mKFByb3BlcnR5VGFibGUpICsgZGF0YVNpemUoKTsKLSAgICBpZiAobV9k
ZWxldGVkT2Zmc2V0cykKLSAgICAgICAgcmVzdWx0ICs9IChtX2RlbGV0ZWRPZmZzZXRzLT5jYXBh
Y2l0eSgpICogc2l6ZW9mKFByb3BlcnR5T2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LSNlbmRpZgotCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWluc2VydChjb25zdCBWYWx1
ZVR5cGUmIGVudHJ5KQotewotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICArK3Byb3Bl
cnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0czsKLSNlbmRpZgotCi0gICAgLy8gVXNl
ZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hl
cmUKLSAgICAvLyB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KLSAgICBBU1NFUlQo
Y2FuSW5zZXJ0KCkpOwotICAgIGZpbmRfaXRlcmF0b3IgaXRlciA9IGZpbmQoZW50cnkua2V5KTsK
LSAgICBBU1NFUlQoIWl0ZXIuZmlyc3QpOwotCi0gICAgdW5zaWduZWQgZW50cnlJbmRleCA9IHVz
ZWRDb3VudCgpICsgMTsKLSAgICBtX2luZGV4W2l0ZXIuc2Vjb25kXSA9IGVudHJ5SW5kZXg7Ci0g
ICAgdGFibGUoKVtlbnRyeUluZGV4IC0gMV0gPSBlbnRyeTsKLQotICAgICsrbV9rZXlDb3VudDsK
LX0KLQotaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6cmVoYXNoKFZNJiB2bSwgdW5zaWduZWQg
bmV3Q2FwYWNpdHkpCi17Ci0jaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICsrcHJvcGVy
dHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtUmVoYXNoZXM7Ci0jZW5kaWYKLQotICAgIHNpemVfdCBv
bGREYXRhU2l6ZSA9IGRhdGFTaXplKCk7Ci0gICAgdW5zaWduZWQqIG9sZEVudHJ5SW5kaWNlcyA9
IG1faW5kZXg7Ci0gICAgaXRlcmF0b3IgaXRlciA9IHRoaXMtPmJlZ2luKCk7Ci0gICAgaXRlcmF0
b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0KLSAgICBtX2luZGV4U2l6ZSA9IHNpemVGb3JDYXBhY2l0
eShuZXdDYXBhY2l0eSk7Ci0gICAgbV9pbmRleE1hc2sgPSBtX2luZGV4U2l6ZSAtIDE7Ci0gICAg
bV9rZXlDb3VudCA9IDA7Ci0gICAgbV9kZWxldGVkQ291bnQgPSAwOwotCi0gICAgbV9pbmRleCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oUHJvcGVydHlUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9j
KGRhdGFTaXplKCkpKTsKLQotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKLSAgICB9
Ci0KLSAgICBQcm9wZXJ0eVRhYmxlTWFsbG9jOjpmcmVlKG9sZEVudHJ5SW5kaWNlcyk7Ci0KLSAg
ICBpZiAob2xkRGF0YVNpemUgPCBkYXRhU2l6ZSgpKQotICAgICAgICB2bS5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKGRhdGFTaXplKCkgLSBvbGREYXRhU2l6ZSk7Ci19Ci0KLWlubGlu
ZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp0YWJsZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleFNpemUgPj4gMTsgfQotCi1pbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6ZGVs
ZXRlZEVudHJ5SW5kZXgoKSBjb25zdCB7IHJldHVybiB0YWJsZUNhcGFjaXR5KCkgKyAxOyB9Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogUHJvcGVydHlUYWJsZTo6c2tpcERlbGV0
ZWRFbnRyaWVzKFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cikKLXsKLSAgICB3aGlsZSAodmFs
dWVQdHIgPCBlbmRWYWx1ZVB0ciAmJiB2YWx1ZVB0ci0+a2V5ID09IFBST1BFUlRZX01BUF9ERUxF
VEVEX0VOVFJZX0tFWSkKLSAgICAgICAgKyt2YWx1ZVB0cjsKLSAgICByZXR1cm4gdmFsdWVQdHI7
Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OnRh
YmxlKCkKLXsKLSAgICAvLyBUaGUgdGFibGUgb2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2gg
aW5kZXguCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KG1faW5k
ZXggKyBtX2luZGV4U2l6ZSk7Ci19Ci0KLWlubGluZSBjb25zdCBQcm9wZXJ0eVRhYmxlOjpWYWx1
ZVR5cGUqIFByb3BlcnR5VGFibGU6OnRhYmxlKCkgY29uc3QKLXsKLSAgICAvLyBUaGUgdGFibGUg
b2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCi0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IFZhbHVlVHlwZSo+KG1faW5kZXggKyBtX2luZGV4U2l6ZSk7Ci19
Ci0KLWlubGluZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp1c2VkQ291bnQoKSBjb25zdAotewot
ICAgIC8vIFRvdGFsIG51bWJlciBvZiAgdXNlZCBlbnRyaWVzIGluIHRoZSB2YWx1ZXMgYXJyYXkg
LSBieSBlaXRoZXIgdmFsaWQgZW50cmllcywgb3IgZGVsZXRlZCBvbmVzLgotICAgIHJldHVybiBt
X2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQ7Ci19Ci0KLWlubGluZSBzaXplX3QgUHJvcGVydHlU
YWJsZTo6ZGF0YVNpemUoKQotewotICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRhdGEgbmVl
ZGVkIGZvciBieSB0aGUgdGFibGUuCi0gICAgLy8gRW5zdXJlIHRoYXQgdGhpcyBmdW5jdGlvbiBj
YW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4KLSAgICB1bnNpZ25lZCBpbmRleFNpemUgPSBtX2lu
ZGV4U2l6ZTsKLSAgICByZXR1cm4gaW5kZXhTaXplICogc2l6ZW9mKHVuc2lnbmVkKSArICgoaW5k
ZXhTaXplID4+IDEpICsgMSkgKiBzaXplb2YoVmFsdWVUeXBlKTsKLX0KLQotaW5saW5lIHVuc2ln
bmVkIFByb3BlcnR5VGFibGU6OnNpemVGb3JDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkKLXsK
LSAgICBpZiAoY2FwYWNpdHkgPCBNaW5pbXVtVGFibGVTaXplIC8gMikKLSAgICAgICAgcmV0dXJu
IE1pbmltdW1UYWJsZVNpemU7Ci0gICAgcmV0dXJuIG5leHRQb3dlck9mMihjYXBhY2l0eSArIDEp
ICogMjsKLX0KLQotaW5saW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6Y2FuSW5zZXJ0KCkKLXsKLSAg
ICByZXR1cm4gdXNlZENvdW50KCkgPCB0YWJsZUNhcGFjaXR5KCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUu
Y3BwCShyZXZpc2lvbiAyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgor
I2luY2x1ZGUgIlByb3BlcnR5VGFibGUuaCIKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRh
YmxlLmgJKHJldmlzaW9uIDI4NjAyMikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1ODcg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0V4
cG9ydE1hY3Jvcy5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hU
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nSW1wbC5oPgorCisKKyNkZWZpbmUgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUyAwCisj
ZGVmaW5lIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUyAwCisKKyNkZWZpbmUgUFJPUEVSVFlf
TUFQX0RFTEVURURfRU5UUllfS0VZICgoVW5pcXVlZFN0cmluZ0ltcGwqKTEpCisKK25hbWVzcGFj
ZSBKU0MgeworCitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihQcm9wZXJ0
eVRhYmxlKTsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKworc3RydWN0IFByb3BlcnR5
TWFwSGFzaFRhYmxlU3RhdHMgeworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1GaW5kczsK
KyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQ29sbGlzaW9uczsKKyAgICBzdGQ6OmF0b21p
Yzx1bnNpZ25lZD4gbnVtTG9va3VwczsKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtTG9v
a3VwUHJvYmluZzsKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVtQWRkczsKKyAgICBzdGQ6
OmF0b21pYzx1bnNpZ25lZD4gbnVtUmVtb3ZlczsKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4g
bnVtUmVoYXNoZXM7CisgICAgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bVJlaW5zZXJ0czsKK307
CisKK0pTX0VYUE9SVF9QUklWQVRFIGV4dGVybiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBw
cm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzOworCisjZW5kaWYKKworaW5saW5lIGJvb2wgaXNQb3dl
ck9mMih1bnNpZ25lZCB2KQoreworICAgIHJldHVybiBoYXNPbmVCaXRTZXQodik7Cit9CisKK2lu
bGluZSB1bnNpZ25lZCBuZXh0UG93ZXJPZjIodW5zaWduZWQgdikKK3sKKyAgICAvLyBUYWtlbiBm
cm9tIGh0dHA6Ly93d3cuY3MudXRrLmVkdS9+dm9zZS9jLXN0dWZmL2JpdGhhY2tzLmh0bWwKKyAg
ICAvLyBEZXZpc2VkIGJ5IFNlYW4gQW5kZXJzb24sIFNlcGVtYmVyIDE0LCAyMDAxCisKKyAgICB2
LS07CisgICAgdiB8PSB2ID4+IDE7CisgICAgdiB8PSB2ID4+IDI7CisgICAgdiB8PSB2ID4+IDQ7
CisgICAgdiB8PSB2ID4+IDg7CisgICAgdiB8PSB2ID4+IDE2OworICAgIHYrKzsKKworICAgIHJl
dHVybiB2OworfQorCitjbGFzcyBQcm9wZXJ0eVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
CisKKyAgICAvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgJ2l0ZXJhdG9yJyBhbmQg
J2NvbnN0X2l0ZXJhdG9yJywKKyAgICAvLyB1c2VkIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgdGFi
bGUgaW4gaW5zZXJ0aW9uIG9yZGVyLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xh
c3Mgb3JkZXJlZF9pdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBvcmRlcmVkX2l0ZXJh
dG9yPFQ+JiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV92YWx1ZVB0ciA9
IHNraXBEZWxldGVkRW50cmllcyhtX3ZhbHVlUHRyICsgMSwgbV9lbmRWYWx1ZVB0cik7CisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZhbHVlUHRyID09IG90aGVyLm1fdmFsdWVQdHI7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgb3JkZXJlZF9pdGVyYXRvcjxUPiYgb3RoZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlUHRyICE9IG90aGVyLm1fdmFs
dWVQdHI7CisgICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvciooKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKm1fdmFsdWVQdHI7CisgICAgICAgIH0KKworICAgICAgICBUKiBv
cGVyYXRvci0+KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVQdHI7Cisg
ICAgICAgIH0KKworICAgICAgICBvcmRlcmVkX2l0ZXJhdG9yKFQqIHZhbHVlUHRyLCBUKiBlbmRW
YWx1ZVB0cikKKyAgICAgICAgICAgIDogbV92YWx1ZVB0cih2YWx1ZVB0cikKKyAgICAgICAgICAg
ICwgbV9lbmRWYWx1ZVB0cihlbmRWYWx1ZVB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBUKiBtX3ZhbHVlUHRyOworICAgICAgICBUKiBtX2VuZFZhbHVl
UHRyOworICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLnByb3BlcnR5VGFibGVTcGFjZTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIFVuaXF1ZWRTdHJp
bmdJbXBsKiBLZXlUeXBlOworICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBWYWx1ZVR5cGU7
CisKKyAgICAvLyBUaGUgaW4gb3JkZXIgaXRlcmF0b3IgcHJvdmlkZXMgb3ZlcmxvYWRlZCAqIGFu
ZCAtPiB0byBhY2Nlc3MgdGhlIFZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgIHR5
cGVkZWYgb3JkZXJlZF9pdGVyYXRvcjxWYWx1ZVR5cGU+IGl0ZXJhdG9yOworICAgIHR5cGVkZWYg
b3JkZXJlZF9pdGVyYXRvcjxjb25zdCBWYWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOworCisgICAg
Ly8gVGhlIGZpbmRfaXRlcmF0b3IgaXMgYSBwYWlyIG9mIGEgcG9pbnRlciB0byBhIFZhbHVlKiBh
biB0aGUgZW50cnkgaW4gdGhlIGluZGV4LgorICAgIC8vIElmICdmaW5kJyBkb2VzIG5vdCBmaW5k
IGFuIGVudHJ5IHRoZW4gaXRlci5maXJzdCB3aWxsIGJlIDAsIGFuZCBpdGVyLnNlY29uZCB3aWxs
CisgICAgLy8gZ2l2ZSB0aGUgcG9pbnQgaW4gbV9pbmRleCB3aGVyZSBhbiBlbnRyeSBzaG91bGQg
YmUgaW5zZXJ0ZWQuCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgdW5zaWduZWQ+
IGZpbmRfaXRlcmF0b3I7CisKKyAgICAvLyBDb25zdHJ1Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlh
bCBjYXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNvcHksIG9yIGJvdGguCisgICAgc3RhdGlj
IFByb3BlcnR5VGFibGUqIGNyZWF0ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Cisg
ICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVydHlUYWJsZSYp
OworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVkIGluaXRpYWxD
YXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIH5Qcm9wZXJ0eVRhYmxlKCk7CisK
KyAgICAvLyBPcmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgorICAgIGl0ZXJhdG9yIGJlZ2luKCk7
CisgICAgaXRlcmF0b3IgZW5kKCk7CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsK
KyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKKworICAgIC8vIEZpbmQgYSB2YWx1ZSBp
biB0aGUgdGFibGUuCisgICAgZmluZF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmKTsKKyAg
ICBWYWx1ZVR5cGUqIGdldChjb25zdCBLZXlUeXBlJik7CisgICAgLy8gQWRkIGEgdmFsdWUgdG8g
dGhlIHRhYmxlCisgICAgc3RkOjpwYWlyPGZpbmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGQoVk0mLCBjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKKyAgICAvLyBSZW1vdmUg
YSB2YWx1ZSBmcm9tIHRoZSB0YWJsZS4KKyAgICB2b2lkIHJlbW92ZShWTSYsIGNvbnN0IGZpbmRf
aXRlcmF0b3ImIGl0ZXIpOworICAgIHZvaWQgcmVtb3ZlKFZNJiwgY29uc3QgS2V5VHlwZSYga2V5
KTsKKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJs
ZS4KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CisKKyAgICAvLyBDaGVja3MgaWYgdGhlcmUg
YXJlIGFueSB2YWx1ZXMgaW4gdGhlIGhhc2h0YWJsZS4KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKKworICAgIC8vIE51bWJlciBvZiBzbG90cyBpbiB0aGUgcHJvcGVydHkgc3RvcmFnZSBhcnJh
eSBpbiB1c2UsIGluY2x1ZGVkIGRlbGV0ZWRPZmZzZXRzLgorICAgIHVuc2lnbmVkIHByb3BlcnR5
U3RvcmFnZVNpemUoKSBjb25zdDsKKworICAgIC8vIFVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9m
IHVudXNlZCBlbnRyaWVzIGluIHRoZSBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHZvaWQgY2xlYXJE
ZWxldGVkT2Zmc2V0cygpOworICAgIGJvb2wgaGFzRGVsZXRlZE9mZnNldCgpOworICAgIFByb3Bl
cnR5T2Zmc2V0IGdldERlbGV0ZWRPZmZzZXQoKTsKKyAgICB2b2lkIGFkZERlbGV0ZWRPZmZzZXQo
UHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJv
cGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOworCisgICAgLy8gQ29weSB0aGlzIFByb3BlcnR5
VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlk
ZWQuCisgICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CisgICAgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KCk7CisjZW5kaWYKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5kZXhTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5VGFibGUs
IG1faW5kZXhTaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleE1hc2so
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlUYWJsZSwgbV9pbmRleE1hc2spOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFByb3BlcnR5VGFibGUsIG1faW5kZXgpOyB9CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7CisKK3ByaXZhdGU6CisgICAgUHJvcGVydHlU
YWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZShW
TSYsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisKKyAgICBQcm9wZXJ0
eVRhYmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKKworICAgIC8vIFVzZWQgdG8gaW5zZXJ0IGEgdmFsdWUga25vd24gbm90IHRvIGJlIGlu
IHRoZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cgY2FwYWNpdHkgdG8gYmUgYXZhaWxhYmxlLgor
ICAgIHZvaWQgcmVpbnNlcnQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSk7CisKKyAgICAvLyBSZWhh
c2ggdGhlIHRhYmxlLiAgVXNlZCB0byBncm93LCBvciB0byByZWNvdmVyIGRlbGV0ZWQgc2xvdHMu
CisgICAgdm9pZCByZWhhc2goVk0mLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CisKKyAgICAvLyBU
aGUgY2FwYWNpdHkgb2YgdGhlIHRhYmxlIG9mIHZhbHVlcyBpcyBoYWxmIG9mIHRoZSBzaXplIG9m
IHRoZSBpbmRleC4KKyAgICB1bnNpZ25lZCB0YWJsZUNhcGFjaXR5KCkgY29uc3Q7CisKKyAgICAv
LyBXZSBrZWVwIGFuIGV4dHJhIGRlbGV0ZWQgc2xvdCBhZnRlciB0aGUgYXJyYXkgdG8gbWFrZSBp
dGVyYXRpb24gd29yaywKKyAgICAvLyBhbmQgdG8gdXNlIGZvciBkZWxldGVkIHZhbHVlcy4gSW5k
ZXggdmFsdWVzIGludG8gdGhlIGFycmF5IGFyZSAxLWJhc2VkLAorICAgIC8vIHNvIHRoaXMgaXMg
dGFibGVDYXBhY2l0eSgpICsgMS4KKyAgICAvLyBGb3IgZXhhbXBsZSwgaWYgbV90YWJsZVNpemUg
aXMgMTYsIHRoZW4gdGFibGVDYXBhY2l0eSgpIGlzIDggLSBidXQgdGhlCisgICAgLy8gdmFsdWVz
IGFycmF5IGlzIGFjdHVhbGx5IDkgbG9uZyAodGhlIDl0aCB1c2VkIGZvciB0aGUgZGVsZXRlZCB2
YWx1ZS8KKyAgICAvLyBpdGVyYXRpb24gZ3VhcmQpLiAgVGhlIDggdmFsaWQgZW50cmllcyBhcmUg
bnVtYmVyZWQgMS4uOCwgc28gdGhlCisgICAgLy8gZGVsZXRlZCBpbmRleCBpcyA5ICgwIGJlaW5n
IHJlc2VydmVkIGZvciBlbXB0eSkuCisgICAgdW5zaWduZWQgZGVsZXRlZEVudHJ5SW5kZXgoKSBj
b25zdDsKKworICAgIC8vIFVzZWQgaW4gaXRlcmF0b3IgY3JlYXRpb24vcHJvZ3Jlc3Npb24uCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCogc2tpcERlbGV0ZWRFbnRyaWVz
KFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cik7CisKKyAgICAvLyBUaGUgdGFibGUgb2YgdmFs
dWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCisgICAgVmFsdWVUeXBlKiB0YWJsZSgpOwor
ICAgIGNvbnN0IFZhbHVlVHlwZSogdGFibGUoKSBjb25zdDsKKworICAgIFZhbHVlVHlwZSogdGFi
bGVFbmQoKSB7IHJldHVybiB0YWJsZSgpICsgdXNlZENvdW50KCk7IH0KKyAgICBjb25zdCBWYWx1
ZVR5cGUqIHRhYmxlRW5kKCkgY29uc3QgeyByZXR1cm4gdGFibGUoKSArIHVzZWRDb3VudCgpOyB9
CisKKyAgICAvLyB0b3RhbCBudW1iZXIgb2YgIHVzZWQgZW50cmllcyBpbiB0aGUgdmFsdWVzIGFy
cmF5IC0gYnkgZWl0aGVyIHZhbGlkIGVudHJpZXMsIG9yIGRlbGV0ZWQgb25lcy4KKyAgICB1bnNp
Z25lZCB1c2VkQ291bnQoKSBjb25zdDsKKworICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRh
dGEgbmVlZGVkIGZvciBieSB0aGUgdGFibGUuCisgICAgc2l6ZV90IGRhdGFTaXplKCk7CisKKyAg
ICAvLyBDYWxjdWxhdGVzIHRoZSBhcHByb3ByaWF0ZSB0YWJsZSBzaXplIChyb3VuZHMgdXAgdG8g
YSBwb3dlciBvZiB0d28pLgorICAgIHN0YXRpYyB1bnNpZ25lZCBzaXplRm9yQ2FwYWNpdHkodW5z
aWduZWQgY2FwYWNpdHkpOworCisgICAgLy8gQ2hlY2sgaWYgY2FwYWNpdHkgaXMgYXZhaWxhYmxl
LgorICAgIGJvb2wgY2FuSW5zZXJ0KCk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4U2l6ZTsKKyAg
ICB1bnNpZ25lZCBtX2luZGV4TWFzazsKKyAgICB1bnNpZ25lZCogbV9pbmRleDsKKyAgICB1bnNp
Z25lZCBtX2tleUNvdW50OworICAgIHVuc2lnbmVkIG1fZGVsZXRlZENvdW50OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+PiBtX2RlbGV0ZWRPZmZzZXRzOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNaW5pbXVtVGFibGVTaXplID0gMTY7Cit9Owor
CitpbmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6YmVnaW4oKQor
eworICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKKyAgICByZXR1cm4gaXRl
cmF0b3Ioc2tpcERlbGV0ZWRFbnRyaWVzKHRhYmxlKCksIHRhYmxlRW5kKSwgdGFibGVFbmQpOwor
fQorCitpbmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZW5kKCkK
K3sKKyAgICBhdXRvKiB0YWJsZUVuZCA9IHRoaXMtPnRhYmxlRW5kKCk7CisgICAgcmV0dXJuIGl0
ZXJhdG9yKHRhYmxlRW5kLCB0YWJsZUVuZCk7Cit9CisKK2lubGluZSBQcm9wZXJ0eVRhYmxlOjpj
b25zdF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjpiZWdpbigpIGNvbnN0Cit7CisgICAgYXV0byog
dGFibGVFbmQgPSB0aGlzLT50YWJsZUVuZCgpOworICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihz
a2lwRGVsZXRlZEVudHJpZXModGFibGUoKSwgdGFibGVFbmQpLCB0YWJsZUVuZCk7Cit9CisKK2lu
bGluZSBQcm9wZXJ0eVRhYmxlOjpjb25zdF9pdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjplbmQoKSBj
b25zdAoreworICAgIGF1dG8qIHRhYmxlRW5kID0gdGhpcy0+dGFibGVFbmQoKTsKKyAgICByZXR1
cm4gY29uc3RfaXRlcmF0b3IodGFibGVFbmQsIHRhYmxlRW5kKTsKK30KKworaW5saW5lIFByb3Bl
cnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6ZmluZChjb25zdCBLZXlUeXBl
JiBrZXkpCit7CisgICAgQVNTRVJUKGtleSk7CisgICAgQVNTRVJUKGtleS0+aXNBdG9tKCkgfHwg
a2V5LT5pc1N5bWJvbCgpKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpZmllclJlcEhhc2g6
Omhhc2goa2V5KTsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICArK3Byb3BlcnR5
TWFwSGFzaFRhYmxlU3RhdHMtPm51bUZpbmRzOworI2VuZGlmCisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1h
c2tdOworICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKFZhbHVlVHlwZSopbnVsbHB0ciwgaGFzaCAmIG1f
aW5kZXhNYXNrKTsKKyAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5r
ZXkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoJnRhYmxlKClbZW50cnlJbmRl
eCAtIDFdLCBoYXNoICYgbV9pbmRleE1hc2spOworCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFU
UworICAgICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUNvbGxpc2lvbnM7Cisj
ZW5kaWYKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUworICAgICAgICBkYXRhTG9n
KCJQcm9wZXJ0eVRhYmxlIGNvbGxpc2lvbiBmb3IgIiwga2V5LCAiICgiLCBoYXNoLCAiKVxuIik7
CisgICAgICAgIGRhdGFMb2coIkNvbGxpZGVkIHdpdGggIiwgdGFibGUoKVtlbnRyeUluZGV4IC0g
MV0ua2V5LCAiKCIsIElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHRhYmxlKClbZW50cnlJbmRleCAt
IDFdLmtleSksICIpXG4iKTsKKyNlbmRpZgorCisgICAgICAgIGhhc2grKzsKKyAgICB9Cit9CisK
K2lubGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OmdldChjb25z
dCBLZXlUeXBlJiBrZXkpCit7CisgICAgQVNTRVJUKGtleSk7CisgICAgQVNTRVJUKGtleS0+aXNB
dG9tKCkgfHwga2V5LT5pc1N5bWJvbCgpKTsKKyAgICBBU1NFUlQoa2V5ICE9IFBST1BFUlRZX01B
UF9ERUxFVEVEX0VOVFJZX0tFWSk7CisKKyAgICBpZiAoIW1fa2V5Q291bnQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpo
YXNoKGtleSk7CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgKytwcm9wZXJ0eU1h
cEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBzOworI2VuZGlmCisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFtoYXNoICYgbV9pbmRleE1h
c2tdOworICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBFbXB0eUVudHJ5SW5kZXgpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5k
ZXggLSAxXS5rZXkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cyB8fCAh
bV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnModGFibGUoKVtlbnRyeUluZGV4IC0gMV0ub2Zmc2V0
KSk7CisgICAgICAgICAgICByZXR1cm4gJnRhYmxlKClbZW50cnlJbmRleCAtIDFdOworICAgICAg
ICB9CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgICAgICsrcHJvcGVydHlNYXBI
YXNoVGFibGVTdGF0cy0+bnVtTG9va3VwUHJvYmluZzsKKyNlbmRpZgorCisgICAgICAgIGhhc2gr
KzsKKyAgICB9Cit9CisKK2lubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVy
YXRvciwgYm9vbD4gV0FSTl9VTlVTRURfUkVUVVJOIFByb3BlcnR5VGFibGU6OmFkZChWTSYgdm0s
IGNvbnN0IFZhbHVlVHlwZSYgZW50cnkpCit7CisgICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRz
IHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsKKworICAgIC8v
IExvb2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGluIHRoZSBhcnJh
eS4KKyAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7CisgICAgaWYgKGl0
ZXIuZmlyc3QpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxzZSk7CisK
KyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0
YXRzLT5udW1BZGRzOworI2VuZGlmCisKKyAgICAvLyBSZWYgdGhlIGtleQorICAgIGVudHJ5Lmtl
eS0+cmVmKCk7CisKKyAgICAvLyBlbnN1cmUgY2FwYWNpdHkgaXMgYXZhaWxhYmxlLgorICAgIGlm
ICghY2FuSW5zZXJ0KCkpIHsKKyAgICAgICAgcmVoYXNoKHZtLCBtX2tleUNvdW50ICsgMSk7Cisg
ICAgICAgIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7CisgICAgICAgIEFTU0VSVCghaXRlci5maXJz
dCk7CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBzbG90IGluIHRoZSBoYXNodGFibGUsIGFu
ZCBzZXQgdGhlIGluZGV4IHRvIHJlZmVyZW5jZSB0aGlzLgorICAgIHVuc2lnbmVkIGVudHJ5SW5k
ZXggPSB1c2VkQ291bnQoKSArIDE7CisgICAgbV9pbmRleFtpdGVyLnNlY29uZF0gPSBlbnRyeUlu
ZGV4OworICAgIGl0ZXIuZmlyc3QgPSAmdGFibGUoKVtlbnRyeUluZGV4IC0gMV07CisgICAgKml0
ZXIuZmlyc3QgPSBlbnRyeTsKKworICAgICsrbV9rZXlDb3VudDsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoaXRlciwgdHJ1ZSk7Cit9CisKK2lubGluZSB2b2lkIFByb3BlcnR5VGFi
bGU6OnJlbW92ZShWTSYgdm0sIGNvbnN0IGZpbmRfaXRlcmF0b3ImIGl0ZXIpCit7CisgICAgLy8g
UmVtb3ZpbmcgYSBrZXkgdGhhdCBkb2Vzbid0IGV4aXN0IGRvZXMgbm90aGluZyEKKyAgICBpZiAo
IWl0ZXIuZmlyc3QpCisgICAgICAgIHJldHVybjsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RB
VFMKKyAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlbW92ZXM7CisjZW5kaWYK
KworICAgIC8vIFJlcGxhY2UgdGhpcyBvbmUgZWxlbWVudCB3aXRoIHRoZSBkZWxldGVkIHNlbnRp
bmVsLiBBbHNvIGNsZWFyIG91dAorICAgIC8vIHRoZSBlbnRyeSBzbyB3ZSBjYW4gaXRlcmF0ZSBh
bGwgdGhlIGVudHJpZXMgYXMgbmVlZGVkLgorICAgIG1faW5kZXhbaXRlci5zZWNvbmRdID0gZGVs
ZXRlZEVudHJ5SW5kZXgoKTsKKyAgICBpdGVyLmZpcnN0LT5rZXktPmRlcmVmKCk7CisgICAgaXRl
ci5maXJzdC0+a2V5ID0gUFJPUEVSVFlfTUFQX0RFTEVURURfRU5UUllfS0VZOworCisgICAgQVNT
RVJUKG1fa2V5Q291bnQgPj0gMSk7CisgICAgLS1tX2tleUNvdW50OworICAgICsrbV9kZWxldGVk
Q291bnQ7CisKKyAgICBpZiAobV9kZWxldGVkQ291bnQgKiA0ID49IG1faW5kZXhTaXplKQorICAg
ICAgICByZWhhc2godm0sIG1fa2V5Q291bnQpOworfQorCitpbmxpbmUgdm9pZCBQcm9wZXJ0eVRh
YmxlOjpyZW1vdmUoVk0mIHZtLCBjb25zdCBLZXlUeXBlJiBrZXkpCit7CisgICAgcmVtb3ZlKHZt
LCBmaW5kKGtleSkpOworfQorCisvLyByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRo
ZSBoYXNodGFibGUuCitpbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6c2l6ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fa2V5Q291bnQ7Cit9CisKK2lubGluZSBib29sIFByb3BlcnR5VGFi
bGU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9rZXlDb3VudDsKK30KKworaW5s
aW5lIHVuc2lnbmVkIFByb3BlcnR5VGFibGU6OnByb3BlcnR5U3RvcmFnZVNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBzaXplKCkgKyAobV9kZWxldGVkT2Zmc2V0cyA/IG1fZGVsZXRlZE9mZnNl
dHMtPnNpemUoKSA6IDApOworfQorCitpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpjbGVhckRl
bGV0ZWRPZmZzZXRzKCkKK3sKKyAgICBtX2RlbGV0ZWRPZmZzZXRzID0gbnVsbHB0cjsKK30KKwor
aW5saW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6aGFzRGVsZXRlZE9mZnNldCgpCit7CisgICAgcmV0
dXJuIG1fZGVsZXRlZE9mZnNldHMgJiYgIW1fZGVsZXRlZE9mZnNldHMtPmlzRW1wdHkoKTsKK30K
KworaW5saW5lIFByb3BlcnR5T2Zmc2V0IFByb3BlcnR5VGFibGU6OmdldERlbGV0ZWRPZmZzZXQo
KQoreworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fZGVsZXRlZE9mZnNldHMtPmxhc3Qo
KTsKKyAgICBtX2RlbGV0ZWRPZmZzZXRzLT5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIG9mZnNl
dDsKK30KKworaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6YWRkRGVsZXRlZE9mZnNldChQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgaWYgKCFtX2RlbGV0ZWRPZmZzZXRzKQorICAgICAg
ICBtX2RlbGV0ZWRPZmZzZXRzID0gbWFrZVVuaXF1ZTxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+Pigp
OworICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnMob2Zmc2V0KSk7CisgICAg
bV9kZWxldGVkT2Zmc2V0cy0+YXBwZW5kKG9mZnNldCk7Cit9CisKK2lubGluZSBQcm9wZXJ0eU9m
ZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFj
aXR5KQoreworICAgIGlmIChoYXNEZWxldGVkT2Zmc2V0KCkpCisgICAgICAgIHJldHVybiBnZXRE
ZWxldGVkT2Zmc2V0KCk7CisKKyAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6
ZSgpLCBpbmxpbmVDYXBhY2l0eSk7Cit9CisKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0
eVRhYmxlOjpjb3B5KFZNJiB2bSwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCit7CisgICAgQVNTRVJU
KG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOworCisgICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUg
bmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNh
biBtZW1jcHkgaXQsCisgICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMuCisgICAgaWYgKHNp
emVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCisgICAgICAgIHJldHVy
biBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnRoaXMpOworICAgIHJldHVybiBQcm9wZXJ0eVRh
YmxlOjpjbG9uZSh2bSwgbmV3Q2FwYWNpdHksICp0aGlzKTsKK30KKworI2lmbmRlZiBOREVCVUcK
K2lubGluZSBzaXplX3QgUHJvcGVydHlUYWJsZTo6c2l6ZUluTWVtb3J5KCkKK3sKKyAgICBzaXpl
X3QgcmVzdWx0ID0gc2l6ZW9mKFByb3BlcnR5VGFibGUpICsgZGF0YVNpemUoKTsKKyAgICBpZiAo
bV9kZWxldGVkT2Zmc2V0cykKKyAgICAgICAgcmVzdWx0ICs9IChtX2RlbGV0ZWRPZmZzZXRzLT5j
YXBhY2l0eSgpICogc2l6ZW9mKFByb3BlcnR5T2Zmc2V0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZgorCitpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWluc2VydChjb25zdCBW
YWx1ZVR5cGUmIGVudHJ5KQoreworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICArK3By
b3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0czsKKyNlbmRpZgorCisgICAgLy8g
VXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQg
d2hlcmUKKyAgICAvLyB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KKyAgICBBU1NF
UlQoY2FuSW5zZXJ0KCkpOworICAgIGZpbmRfaXRlcmF0b3IgaXRlciA9IGZpbmQoZW50cnkua2V5
KTsKKyAgICBBU1NFUlQoIWl0ZXIuZmlyc3QpOworCisgICAgdW5zaWduZWQgZW50cnlJbmRleCA9
IHVzZWRDb3VudCgpICsgMTsKKyAgICBtX2luZGV4W2l0ZXIuc2Vjb25kXSA9IGVudHJ5SW5kZXg7
CisgICAgdGFibGUoKVtlbnRyeUluZGV4IC0gMV0gPSBlbnRyeTsKKworICAgICsrbV9rZXlDb3Vu
dDsKK30KKworaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6cmVoYXNoKFZNJiB2bSwgdW5zaWdu
ZWQgbmV3Q2FwYWNpdHkpCit7CisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAgICsrcHJv
cGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtUmVoYXNoZXM7CisjZW5kaWYKKworICAgIHNpemVf
dCBvbGREYXRhU2l6ZSA9IGRhdGFTaXplKCk7CisgICAgdW5zaWduZWQqIG9sZEVudHJ5SW5kaWNl
cyA9IG1faW5kZXg7CisgICAgaXRlcmF0b3IgaXRlciA9IHRoaXMtPmJlZ2luKCk7CisgICAgaXRl
cmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisKKyAgICBtX2luZGV4U2l6ZSA9IHNpemVGb3JDYXBh
Y2l0eShuZXdDYXBhY2l0eSk7CisgICAgbV9pbmRleE1hc2sgPSBtX2luZGV4U2l6ZSAtIDE7Cisg
ICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV9kZWxldGVkQ291bnQgPSAwOworCisgICAgbV9pbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oUHJvcGVydHlUYWJsZU1hbGxvYzo6emVyb2VkTWFs
bG9jKGRhdGFTaXplKCkpKTsKKworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7CisgICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKKyAg
ICB9CisKKyAgICBQcm9wZXJ0eVRhYmxlTWFsbG9jOjpmcmVlKG9sZEVudHJ5SW5kaWNlcyk7CisK
KyAgICBpZiAob2xkRGF0YVNpemUgPCBkYXRhU2l6ZSgpKQorICAgICAgICB2bS5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKGRhdGFTaXplKCkgLSBvbGREYXRhU2l6ZSk7Cit9CisKK2lu
bGluZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp0YWJsZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleFNpemUgPj4gMTsgfQorCitpbmxpbmUgdW5zaWduZWQgUHJvcGVydHlUYWJsZTo6
ZGVsZXRlZEVudHJ5SW5kZXgoKSBjb25zdCB7IHJldHVybiB0YWJsZUNhcGFjaXR5KCkgKyAxOyB9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCogUHJvcGVydHlUYWJsZTo6c2tpcERl
bGV0ZWRFbnRyaWVzKFQqIHZhbHVlUHRyLCBUKiBlbmRWYWx1ZVB0cikKK3sKKyAgICB3aGlsZSAo
dmFsdWVQdHIgPCBlbmRWYWx1ZVB0ciAmJiB2YWx1ZVB0ci0+a2V5ID09IFBST1BFUlRZX01BUF9E
RUxFVEVEX0VOVFJZX0tFWSkKKyAgICAgICAgKyt2YWx1ZVB0cjsKKyAgICByZXR1cm4gdmFsdWVQ
dHI7Cit9CisKK2lubGluZSBQcm9wZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6
OnRhYmxlKCkKK3sKKyAgICAvLyBUaGUgdGFibGUgb2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhh
c2ggaW5kZXguCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KG1f
aW5kZXggKyBtX2luZGV4U2l6ZSk7Cit9CisKK2lubGluZSBjb25zdCBQcm9wZXJ0eVRhYmxlOjpW
YWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OnRhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgdGFi
bGUgb2YgdmFsdWVzIGxpZXMgYWZ0ZXIgdGhlIGhhc2ggaW5kZXguCisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFZhbHVlVHlwZSo+KG1faW5kZXggKyBtX2luZGV4U2l6ZSk7
Cit9CisKK2lubGluZSB1bnNpZ25lZCBQcm9wZXJ0eVRhYmxlOjp1c2VkQ291bnQoKSBjb25zdAor
eworICAgIC8vIFRvdGFsIG51bWJlciBvZiAgdXNlZCBlbnRyaWVzIGluIHRoZSB2YWx1ZXMgYXJy
YXkgLSBieSBlaXRoZXIgdmFsaWQgZW50cmllcywgb3IgZGVsZXRlZCBvbmVzLgorICAgIHJldHVy
biBtX2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQ7Cit9CisKK2lubGluZSBzaXplX3QgUHJvcGVy
dHlUYWJsZTo6ZGF0YVNpemUoKQoreworICAgIC8vIFRoZSBzaXplIGluIGJ5dGVzIG9mIGRhdGEg
bmVlZGVkIGZvciBieSB0aGUgdGFibGUuCisgICAgLy8gRW5zdXJlIHRoYXQgdGhpcyBmdW5jdGlv
biBjYW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4KKyAgICB1bnNpZ25lZCBpbmRleFNpemUgPSBt
X2luZGV4U2l6ZTsKKyAgICByZXR1cm4gaW5kZXhTaXplICogc2l6ZW9mKHVuc2lnbmVkKSArICgo
aW5kZXhTaXplID4+IDEpICsgMSkgKiBzaXplb2YoVmFsdWVUeXBlKTsKK30KKworaW5saW5lIHVu
c2lnbmVkIFByb3BlcnR5VGFibGU6OnNpemVGb3JDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkK
K3sKKyAgICBpZiAoY2FwYWNpdHkgPCBNaW5pbXVtVGFibGVTaXplIC8gMikKKyAgICAgICAgcmV0
dXJuIE1pbmltdW1UYWJsZVNpemU7CisgICAgcmV0dXJuIG5leHRQb3dlck9mMihjYXBhY2l0eSAr
IDEpICogMjsKK30KKworaW5saW5lIGJvb2wgUHJvcGVydHlUYWJsZTo6Y2FuSW5zZXJ0KCkKK3sK
KyAgICByZXR1cm4gdXNlZENvdW50KCkgPCB0YWJsZUNhcGFjaXR5KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlUYWJsZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMg
LTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmgJKHJldmlz
aW9uIDI4NjAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihQCiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKLXN0
cnVjdCBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzIHsKK3N0cnVjdCBQcm9wZXJ0eVRhYmxlU3Rh
dHMgewogICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1GaW5kczsKICAgICBzdGQ6OmF0b21p
Yzx1bnNpZ25lZD4gbnVtQ29sbGlzaW9uczsKICAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbnVt
TG9va3VwczsKQEAgLTUzLDcgKzUzLDcgQEAgc3RydWN0IFByb3BlcnR5TWFwSGFzaFRhYmxlU3Rh
dHMgewogICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBudW1SZWluc2VydHM7CiB9OwogCi1KU19F
WFBPUlRfUFJJVkFURSBleHRlcm4gUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0czsKK0pTX0VYUE9SVF9QUklWQVRFIGV4dGVybiBQcm9wZXJ0eVRhYmxl
U3RhdHMqIHByb3BlcnR5VGFibGVTdGF0czsKIAogI2VuZGlmCiAKQEAgLTE3Myw4ICsxNzMsOCBA
QCBwdWJsaWM6CiAgICAgLy8gQWRkIGEgdmFsdWUgdG8gdGhlIHRhYmxlCiAgICAgc3RkOjpwYWly
PGZpbmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGQoVk0mLCBjb25zdCBW
YWx1ZVR5cGUmIGVudHJ5KTsKICAgICAvLyBSZW1vdmUgYSB2YWx1ZSBmcm9tIHRoZSB0YWJsZS4K
LSAgICB2b2lkIHJlbW92ZShWTSYsIGNvbnN0IGZpbmRfaXRlcmF0b3ImIGl0ZXIpOwotICAgIHZv
aWQgcmVtb3ZlKFZNJiwgY29uc3QgS2V5VHlwZSYga2V5KTsKKyAgICB2b2lkIHJlbW92ZShWTSYs
IGNvbnN0IGZpbmRfaXRlcmF0b3ImKTsKKyAgICB2b2lkIHJlbW92ZShWTSYsIGNvbnN0IEtleVR5
cGUmKTsKIAogICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIGhhc2h0
YWJsZS4KICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CkBAIC0yMTksNyArMjE5LDcgQEAgcHJp
dmF0ZToKICAgICAvLyBVc2VkIHRvIGluc2VydCBhIHZhbHVlIGtub3duIG5vdCB0byBiZSBpbiB0
aGUgdGFibGUsIGFuZCB3aGVyZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KICAg
ICB2b2lkIHJlaW5zZXJ0KGNvbnN0IFZhbHVlVHlwZSYgZW50cnkpOwogCi0gICAgLy8gUmVoYXNo
IHRoZSB0YWJsZS4gIFVzZWQgdG8gZ3Jvdywgb3IgdG8gcmVjb3ZlciBkZWxldGVkIHNsb3RzLgor
ICAgIC8vIFJlaGFzaCB0aGUgdGFibGUuIFVzZWQgdG8gZ3Jvdywgb3IgdG8gcmVjb3ZlciBkZWxl
dGVkIHNsb3RzLgogICAgIHZvaWQgcmVoYXNoKFZNJiwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOwog
CiAgICAgLy8gVGhlIGNhcGFjaXR5IG9mIHRoZSB0YWJsZSBvZiB2YWx1ZXMgaXMgaGFsZiBvZiB0
aGUgc2l6ZSBvZiB0aGUgaW5kZXguCkBAIC0yMzAsNyArMjMwLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBzbyB0aGlzIGlzIHRhYmxlQ2FwYWNpdHkoKSArIDEuCiAgICAgLy8gRm9yIGV4YW1wbGUsIGlm
IG1fdGFibGVTaXplIGlzIDE2LCB0aGVuIHRhYmxlQ2FwYWNpdHkoKSBpcyA4IC0gYnV0IHRoZQog
ICAgIC8vIHZhbHVlcyBhcnJheSBpcyBhY3R1YWxseSA5IGxvbmcgKHRoZSA5dGggdXNlZCBmb3Ig
dGhlIGRlbGV0ZWQgdmFsdWUvCi0gICAgLy8gaXRlcmF0aW9uIGd1YXJkKS4gIFRoZSA4IHZhbGlk
IGVudHJpZXMgYXJlIG51bWJlcmVkIDEuLjgsIHNvIHRoZQorICAgIC8vIGl0ZXJhdGlvbiBndWFy
ZCkuIFRoZSA4IHZhbGlkIGVudHJpZXMgYXJlIG51bWJlcmVkIDEuLjgsIHNvIHRoZQogICAgIC8v
IGRlbGV0ZWQgaW5kZXggaXMgOSAoMCBiZWluZyByZXNlcnZlZCBmb3IgZW1wdHkpLgogICAgIHVu
c2lnbmVkIGRlbGV0ZWRFbnRyeUluZGV4KCkgY29uc3Q7CiAKQEAgLTI5OCw3ICsyOTgsNyBAQCBp
bmxpbmUgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBQcm9wCiAgICAgdW5zaWduZWQgaGFz
aCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKGtleSk7CiAKICNpZiBEVU1QX1BST1BFUlRZTUFQ
X1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1GaW5kczsKKyAgICAr
K3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtRmluZHM7CiAjZW5kaWYKIAogICAgIHdoaWxlICh0cnVl
KSB7CkBAIC0zMDksNyArMzA5LDcgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0
b3IgUHJvcAogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCZ0YWJsZSgpW2VudHJ5
SW5kZXggLSAxXSwgaGFzaCAmIG1faW5kZXhNYXNrKTsKIAogI2lmIERVTVBfUFJPUEVSVFlNQVBf
U1RBVFMKLSAgICAgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Db2xsaXNpb25z
OworICAgICAgICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtQ29sbGlzaW9uczsKICNlbmRpZgog
CiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9DT0xMSVNJT05TCkBAIC0zMzMsNyArMzMzLDcgQEAgaW5s
aW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydAogICAgIHVuc2lnbmVkIGhhc2gg
PSBJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChrZXkpOwogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9T
VEFUUwotICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtTG9va3VwczsKKyAgICAr
K3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtTG9va3VwczsKICNlbmRpZgogCiAgICAgd2hpbGUgKHRy
dWUpIHsKQEAgLTM0Niw3ICszNDYsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6VmFsdWVUeXBl
KiBQcm9wZXJ0CiAgICAgICAgIH0KIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICAg
ICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nOworICAgICAg
ICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtTG9va3VwUHJvYmluZzsKICNlbmRpZgogCiAgICAg
ICAgIGhhc2grKzsKQEAgLTM2Myw3ICszNjMsNyBAQCBpbmxpbmUgc3RkOjpwYWlyPFByb3BlcnR5
VGFibGU6OmZpbmRfaXRlCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxz
ZSk7CiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytwcm9wZXJ0eU1hcEhhc2hU
YWJsZVN0YXRzLT5udW1BZGRzOworICAgICsrcHJvcGVydHlUYWJsZVN0YXRzLT5udW1BZGRzOwog
I2VuZGlmCiAKICAgICAvLyBSZWYgdGhlIGtleQpAQCAtMzk0LDcgKzM5NCw3IEBAIGlubGluZSB2
b2lkIFByb3BlcnR5VGFibGU6OnJlbW92ZShWTSYgdm0KICAgICAgICAgcmV0dXJuOwogCiAjaWYg
RFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+
bnVtUmVtb3ZlczsKKyAgICArK3Byb3BlcnR5VGFibGVTdGF0cy0+bnVtUmVtb3ZlczsKICNlbmRp
ZgogCiAgICAgLy8gUmVwbGFjZSB0aGlzIG9uZSBlbGVtZW50IHdpdGggdGhlIGRlbGV0ZWQgc2Vu
dGluZWwuIEFsc28gY2xlYXIgb3V0CkBAIC00ODksNyArNDg5LDcgQEAgaW5saW5lIHNpemVfdCBQ
cm9wZXJ0eVRhYmxlOjpzaXplSW5NZW1vcgogaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6cmVp
bnNlcnQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSkKIHsKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NU
QVRTCi0gICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1SZWluc2VydHM7CisgICAg
Kytwcm9wZXJ0eVRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0czsKICNlbmRpZgogCiAgICAgLy8gVXNl
ZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hl
cmUKQEAgLTUwOCw3ICs1MDgsNyBAQCBpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWluc2Vy
dChjb25zCiBpbmxpbmUgdm9pZCBQcm9wZXJ0eVRhYmxlOjpyZWhhc2goVk0mIHZtLCB1bnNpZ25l
ZCBuZXdDYXBhY2l0eSkKIHsKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytwcm9w
ZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1SZWhhc2hlczsKKyAgICArK3Byb3BlcnR5VGFibGVT
dGF0cy0+bnVtUmVoYXNoZXM7CiAjZW5kaWYKIAogICAgIHNpemVfdCBvbGREYXRhU2l6ZSA9IGRh
dGFTaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDI4NjAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUHJvcGVydHlUYWJsZS5oIgogI2luY2x1
ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0xMDQ4LDMzICsxMDQ4LDMzIEBAIHZvaWQgU3Ry
dWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KIAogI2lmIERVTVBfUFJPUEVSVFlNQVBf
U1RBVFMKIAotUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVT
dGF0cyA9IDA7CitQcm9wZXJ0eVRhYmxlU3RhdHMqIHByb3BlcnR5VGFibGVTdGF0cyA9IDA7CiAK
LXN0cnVjdCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyIHsKLSAgICBQcm9wZXJ0eU1h
cFN0YXRpc3RpY3NFeGl0TG9nZ2VyKCk7Ci0gICAgflByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRM
b2dnZXIoKTsKK3N0cnVjdCBQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dnZXIgeworICAg
IFByb3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcigpOworICAgIH5Qcm9wZXJ0eVRhYmxl
U3RhdGlzdGljc0V4aXRMb2dnZXIoKTsKIH07CiAKLURFRklORV9HTE9CQUxfRk9SX0xPR0dJTkco
UHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlciwgbG9nZ2VyLCApOworREVGSU5FX0dMT0JB
TF9GT1JfTE9HR0lORyhQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dnZXIsIGxvZ2dlciwg
eyB9KTsKIAotUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6UHJvcGVydHlNYXBTdGF0
aXN0aWNzRXhpdExvZ2dlcigpCitQcm9wZXJ0eVRhYmxlU3RhdGlzdGljc0V4aXRMb2dnZXI6OlBy
b3BlcnR5VGFibGVTdGF0aXN0aWNzRXhpdExvZ2dlcigpCiB7Ci0gICAgcHJvcGVydHlNYXBIYXNo
VGFibGVTdGF0cyA9IGFkb3B0UHRyKG5ldyBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKCkpLmxl
YWtQdHIoKTsKKyAgICBwcm9wZXJ0eVRhYmxlU3RhdHMgPSBhZG9wdFB0cihuZXcgUHJvcGVydHlU
YWJsZVN0YXRzKCkpLmxlYWtQdHIoKTsKIH0KIAotUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExv
Z2dlcjo6flByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIoKQorUHJvcGVydHlUYWJsZVN0
YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVydHlUYWJsZVN0YXRpc3RpY3NFeGl0TG9nZ2VyKCkK
IHsKLSAgICB1bnNpZ25lZCBmaW5kcyA9IHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUZp
bmRzOwotICAgIHVuc2lnbmVkIGNvbGxpc2lvbnMgPSBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRz
LT5udW1Db2xsaXNpb25zOworICAgIHVuc2lnbmVkIGZpbmRzID0gcHJvcGVydHlUYWJsZVN0YXRz
LT5udW1GaW5kczsKKyAgICB1bnNpZ25lZCBjb2xsaXNpb25zID0gcHJvcGVydHlUYWJsZVN0YXRz
LT5udW1Db2xsaXNpb25zOwogICAgIGRhdGFMb2dGKCJcbkpTQzo6UHJvcGVydHlNYXAgc3RhdGlz
dGljcyBmb3IgcHJvY2VzcyAlZFxuXG4iLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCkpOwogICAgIGRh
dGFMb2dGKCIlZCBmaW5kc1xuIiwgZmluZHMpOwogICAgIGRhdGFMb2dGKCIlZCBjb2xsaXNpb25z
ICglLjFmJSUpXG4iLCBjb2xsaXNpb25zLCAxMDAuMCAqIGNvbGxpc2lvbnMgLyBmaW5kcyk7Ci0g
ICAgZGF0YUxvZ0YoIiVkIGxvb2t1cHNcbiIsIHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51
bUxvb2t1cHMubG9hZCgpKTsKLSAgICBkYXRhTG9nRigiJWQgbG9va3VwIHByb2JpbmdzXG4iLCBw
cm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nLmxvYWQoKSk7Ci0gICAg
ZGF0YUxvZ0YoIiVkIGFkZHNcbiIsIHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUFkZHMu
bG9hZCgpKTsKLSAgICBkYXRhTG9nRigiJWQgcmVtb3Zlc1xuIiwgcHJvcGVydHlNYXBIYXNoVGFi
bGVTdGF0cy0+bnVtUmVtb3Zlcy5sb2FkKCkpOwotICAgIGRhdGFMb2dGKCIlZCByZWhhc2hlc1xu
IiwgcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtUmVoYXNoZXMubG9hZCgpKTsKLSAgICBk
YXRhTG9nRigiJWQgcmVpbnNlcnRzXG4iLCBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1S
ZWluc2VydHMubG9hZCgpKTsKKyAgICBkYXRhTG9nRigiJWQgbG9va3Vwc1xuIiwgcHJvcGVydHlU
YWJsZVN0YXRzLT5udW1Mb29rdXBzLmxvYWQoKSk7CisgICAgZGF0YUxvZ0YoIiVkIGxvb2t1cCBw
cm9iaW5nc1xuIiwgcHJvcGVydHlUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nLmxvYWQoKSk7
CisgICAgZGF0YUxvZ0YoIiVkIGFkZHNcbiIsIHByb3BlcnR5VGFibGVTdGF0cy0+bnVtQWRkcy5s
b2FkKCkpOworICAgIGRhdGFMb2dGKCIlZCByZW1vdmVzXG4iLCBwcm9wZXJ0eVRhYmxlU3RhdHMt
Pm51bVJlbW92ZXMubG9hZCgpKTsKKyAgICBkYXRhTG9nRigiJWQgcmVoYXNoZXNcbiIsIHByb3Bl
cnR5VGFibGVTdGF0cy0+bnVtUmVoYXNoZXMubG9hZCgpKTsKKyAgICBkYXRhTG9nRigiJWQgcmVp
bnNlcnRzXG4iLCBwcm9wZXJ0eVRhYmxlU3RhdHMtPm51bVJlaW5zZXJ0cy5sb2FkKCkpOwogfQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDI4NjAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIlByb3Bl
cnR5TWFwSGFzaFRhYmxlLmgiCisjaW5jbHVkZSAiUHJvcGVydHlUYWJsZS5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCShyZXZpc2lvbiAyODYwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQAogI2luY2x1ZGUgIlBy
b2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiUHJvZ3JhbUV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5o
IgorI2luY2x1ZGUgIlByb3BlcnR5VGFibGUuaCIKICNpbmNsdWRlICJQcm94eVJldm9rZS5oIgog
I2luY2x1ZGUgIlJhbmRvbWl6aW5nRnV6emVyQWdlbnQuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNo
ZS5oIgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>