<?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>239443</bug_id>
          
          <creation_ts>2022-04-17 15:13:19 -0700</creation_ts>
          <short_desc>[WebGPU] Expand hardware capabilities to include features (beyond just limits)</short_desc>
          <delta_ts>2022-04-20 09:12:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</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>239447</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1862175</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-17 15:13:19 -0700</bug_when>
    <thetext>[WebGPU] Expand hardware capabilities to include features (beyond just limits)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862178</commentid>
    <comment_count>1</comment_count>
      <attachid>457781</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-17 15:35:01 -0700</bug_when>
    <thetext>Created attachment 457781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862179</commentid>
    <comment_count>2</comment_count>
      <attachid>457782</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-17 15:40:56 -0700</bug_when>
    <thetext>Created attachment 457782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862181</commentid>
    <comment_count>3</comment_count>
      <attachid>457784</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-17 16:56:55 -0700</bug_when>
    <thetext>Created attachment 457784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862888</commentid>
    <comment_count>4</comment_count>
      <attachid>457784</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-20 04:47:51 -0700</bug_when>
    <thetext>Comment on attachment 457784
Patch

Looks ok as far as I could understand. Did not check the table values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862953</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-20 09:11:21 -0700</bug_when>
    <thetext>Committed r293098 (249808@main): &lt;https://commits.webkit.org/249808@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457784.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862956</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-20 09:12:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/92031036&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457781</attachid>
            <date>2022-04-17 15:35:01 -0700</date>
            <delta_ts>2022-04-17 15:40:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239443-20220417153500.patch</filename>
            <type>text/plain</type>
            <size>82079</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDkyN2Y3MzkxMzk5YzYyNzBm
NWJhYWE5MTc4Zjk2NWNiNDg1MWRlN2MuLmE4OGU2MDI2OTIyMWE4YmM2ODdkYTdiZWE1ZmE2ZTJi
ZWVmYzg0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMjItMDQtMTcgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBFeHBh
bmQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRvIGluY2x1ZGUgZmVhdHVyZXMgKGJleW9uZCBqdXN0
IGxpbWl0cykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzOTQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9ubHkgTVRMR1BVRmFtaWx5QXBwbGUgZGV2aWNlcyBzdXBwb3J0IGRlcHRoL3N0ZW5jaWwgdGV4
dHVyZXMgaW4gdGhlIG1hbmFnZWQvc2hhcmVkIGFkZHJlc3Mgc3BhY2UuCisgICAgICAgIFNvLCB3
ZSBoYXZlIHRvIGV4cGFuZCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGluZnJhc3RydWN0dXJl
IHRvIGJlIGFibGUgdG8gaG9sZCB0aGlzIGtpbmQKKyAgICAgICAgb2YgaW5mb3JtYXRpb24gKHNv
IHRoZSB0ZXh0dXJlIGNyZWF0aW9uIGZ1bmN0aW9uIGNhbiBjb25zdWx0IHdpdGggdGhpcyBzdGF0
ZSB0byBrbm93IHdoYXQgc3RvcmFnZQorICAgICAgICBtb2RlIHRvIHVzZSBmb3IgdGhlIGNyZWF0
ZWQgdGV4dHVyZSkuIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIHN0b3JlZCBXR1BVTGltaXRzIHN0
cnVjdCB3aXRoIGEgbmV3CisgICAgICAgIHN0cnVjdCwgSGFyZHdhcmVDYXBhYmlsaXRpZXMsIHdo
aWNoIGhvbGRzIGEgV0dQVUxpbWl0cyBpbmlzaWRlIGl0LgorCisgICAgICAgIFdoaWxlIEkgd2Fz
IGhlcmUsIEkgYWxzbyBpbmNsdWRlZCBhIFZlY3RvcjxXR1BVRmVhdHVyZT4gaW5zaWRlIHRoZSBI
YXJkd2FyZUNhcGFiaWxpdGllcyBzdHJ1Y3QsCisgICAgICAgIGFuZCBob29rZWQgaXQgdXAgdG8g
dGhlIHZhcmlvdXMgcGxhY2VzIHdoaWNoIG5lZWQgdG8gYmUgZ3VhcmRlZCBieSB0aGUgcHJlc2Vu
Y2Ugb2YgZmVhdHVyZXMuCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzIHRvIHdvcmsgKGFtb25nIG90aGVyIHRoaW5ncykuIEJlY2F1c2UgdGhlcmUgYXJlIG9u
bHkKKyAgICAgICAgYSBoYW5kZnVsIG9mIHBvc3NpYmxlIGZlYXR1cmVzLCBJIGVsZWN0ZWQgdG8g
dXNlIGEgc29ydGVkIFZlY3RvciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBiaWcgSGFzaFNldAorICAg
ICAgICBoYW1tZXIuCisKKyAgICAgICAgKiBXZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBXZWJHUFUvQWRhcHRlci5oOgorICAgICAgICAoV2ViR1BVOjpBZGFwdGVy
OjpjcmVhdGUpOgorICAgICAgICAqIFdlYkdQVS9BZGFwdGVyLm1tOgorICAgICAgICAoV2ViR1BV
OjpBZGFwdGVyOjpBZGFwdGVyKToKKyAgICAgICAgKFdlYkdQVTo6QWRhcHRlcjo6ZW51bWVyYXRl
RmVhdHVyZXMpOgorICAgICAgICAoV2ViR1BVOjpBZGFwdGVyOjpnZXRMaW1pdHMpOgorICAgICAg
ICAoV2ViR1BVOjpBZGFwdGVyOjpoYXNGZWF0dXJlKToKKyAgICAgICAgKFdlYkdQVTo6QWRhcHRl
cjo6cmVxdWVzdERldmljZSk6CisgICAgICAgICogV2ViR1BVL0RldmljZS5oOgorICAgICAgICAo
V2ViR1BVOjpEZXZpY2U6OmxpbWl0cyBjb25zdCk6CisgICAgICAgIChXZWJHUFU6OkRldmljZTo6
ZmVhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OmJhc2VDYXBhYmlsaXRp
ZXMgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9EZXZpY2UubW06CisgICAgICAgIChXZWJHUFU6
OkRldmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpEZXZpY2UpOgorICAg
ICAgICAoV2ViR1BVOjpEZXZpY2U6OmVudW1lcmF0ZUZlYXR1cmVzKToKKyAgICAgICAgKFdlYkdQ
VTo6RGV2aWNlOjpnZXRMaW1pdHMpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6Omhhc0ZlYXR1
cmUpOgorICAgICAgICAqIFdlYkdQVS9IYXJkd2FyZUNhcGFiaWxpdGllcy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVMaW1pdHMuaC4KKyAgICAgICAgKiBXZWJH
UFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMubW06IEFkZGVkLgorICAgICAgICAoV2ViR1BVOjpiYXNl
Q2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkdQVTo6YmFzZUZlYXR1cmVzKToKKyAgICAgICAg
KFdlYkdQVTo6YXBwbGUzKToKKyAgICAgICAgKFdlYkdQVTo6YXBwbGU0KToKKyAgICAgICAgKFdl
YkdQVTo6YXBwbGU1KToKKyAgICAgICAgKFdlYkdQVTo6YXBwbGU2KToKKyAgICAgICAgKFdlYkdQ
VTo6YXBwbGU3KToKKyAgICAgICAgKFdlYkdQVTo6bWFjMik6CisgICAgICAgIChXZWJHUFU6Om1l
cmdlTWF4aW11bSk6CisgICAgICAgIChXZWJHUFU6Om1lcmdlQWxpZ25tZW50KToKKyAgICAgICAg
KFdlYkdQVTo6bWVyZ2VMaW1pdHMpOgorICAgICAgICAoV2ViR1BVOjptZXJnZUZlYXR1cmVzKToK
KyAgICAgICAgKFdlYkdQVTo6bWVyZ2VCYXNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkdQ
VTo6cmF3SGFyZHdhcmVDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViR1BVOjphbnlMaW1pdElz
QmV0dGVyVGhhbik6CisgICAgICAgIChXZWJHUFU6OmluY2x1ZGVzVW5zdXBwb3J0ZWRGZWF0dXJl
cyk6CisgICAgICAgIChXZWJHUFU6OmNoZWNrTGltaXRzKToKKyAgICAgICAgKFdlYkdQVTo6aGFy
ZHdhcmVDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViR1BVOjppc1ZhbGlkKToKKyAgICAgICAg
KiBXZWJHUFUvSGFyZHdhcmVMaW1pdHMubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BVL0lu
c3RhbmNlLm1tOgorICAgICAgICAoV2ViR1BVOjpJbnN0YW5jZTo6cmVxdWVzdEFkYXB0ZXIpOgor
ICAgICAgICAqIFdlYkdQVS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpmZWF0dXJlUmVx
dWlyZW1lbnRGb3JGb3JtYXQpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OnZhbGlkYXRlQ3Jl
YXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OnN0b3JhZ2VNb2RlKToKKyAgICAgICAgKFdl
YkdQVTo6RGV2aWNlOjpjcmVhdGVUZXh0dXJlKToKKwogMjAyMi0wNC0xNiAgTXlsZXMgQy4gTWF4
ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEZpeCB0aGUg
QmlnIFN1ciBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYmVlMTA0MDU1ODk0NWMxZmE5ZWJhY2ExNTJjYjcwMDc1MGQ3MDhjYS4u
ZjM0YmNkNmM5ODI1ZDFhNzYzMDE5Y2I4NDZmMzE2YTJiMzk5N2I5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMCw4ICsxMCw4IEBA
CiAJCTFDMDIzRDNGMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDIzRDNFMjc0NDkwNzAw
MDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSAqLzsgfTsKIAkJMUMwMjNENDAyNzQ0OTA3MDAw
MURCNzM0IC8qIGxpYndnc2wuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDRUJEN0YyMjcxNkIyQ0MwMEE1MjU0RCAvKiBsaWJ3Z3NsLmEgKi87IH07
CiAJCTFDMDIzRDRCMjc0NDk1QjkwMDFEQjczNCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAyM0Q0
QTI3NDQ5NUI5MDAxREI3MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwotCQkx
QzBGNDFFRTI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVMaW1pdHMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzBGNDFFQzI4MDk0MDY1MDAwNTg4
NkQgLyogSGFyZHdhcmVMaW1pdHMubW0gKi87IH07Ci0JCTFDMEY0MUVGMjgwOTQwNjUwMDA1ODg2
RCAvKiBIYXJkd2FyZUxpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUMwRjQxRUQyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlTGltaXRzLmgg
Ki87IH07CisJCTFDMEY0MUVFMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGll
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMEY0
MUVDMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGllcy5tbSAqLzsgfTsKKwkJ
MUMwRjQxRUYyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2FwYWJpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzBGNDFFRDI4MDk0MDY1
MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMUMyQ0VERUUyNzFF
OEE3MzAwRURDMTZGIC8qIE1ldGFsLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMkNFREVEMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRh
bC5mcmFtZXdvcmsgKi87IH07CiAJCTFDMzM3NTVGMjdGQTIzQjgwMDJGMTY0NCAvKiBJc1ZhbGlk
VG9Vc2VXaXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzMzNzU1RDI3RkEyM0I4MDAyRjE2NDQgLyogSXNWYWxpZFRvVXNlV2l0aC5oICovOyB9Owog
CQkxQzUzMTlDMDI3QkRDNkNDMDBDRDEyN0UgLyogbWFpbi5zd2lmdCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNTMxOUJGMjdCREM2Q0MwMENEMTI3RSAv
KiBtYWluLnN3aWZ0ICovOyB9OwpAQCAtMTMzLDggKzEzMyw4IEBACiAJCTFDMDIzRDNFMjc0NDkw
NzAwMDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdH
U0xMZXhlclRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAyM0Q0NzI3
NDQ5MTZEMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBX
R1NMVW5pdFRlc3RzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAy
M0Q0QTI3NDQ5NUI5MDAxREI3MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07Ci0JCTFDMEY0MUVDMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUxp
bWl0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhhcmR3YXJlTGltaXRzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQzBGNDFFRDI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdh
cmVMaW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFyZHdhcmVMaW1pdHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMwRjQxRUMyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2Fw
YWJpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSGFyZHdhcmVDYXBhYmlsaXRpZXMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMEY0MUVEMjgwOTQwNjUwMDA1ODg2
RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXJkd2FyZUNhcGFi
aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzJDRURFRDI3MUU4QTcz
MDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBNZXRhbC5mcmFt
ZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL01ldGFsLmZyYW1ld29yazsg
c291cmNlVHJlZSA9IFNES1JPT1Q7IH07CiAJCTFDMzM3NTVEMjdGQTIzQjgwMDJGMTY0NCAvKiBJ
c1ZhbGlkVG9Vc2VXaXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzVmFsaWRUb1VzZVdpdGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM1MzE5QkQyN0JEQzZDQjAwQ0QxMjdFIC8qIENv
bW1hbmRMaW5lUGxheWdyb3VuZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gQ29tbWFuZExpbmVQbGF5Z3JvdW5kOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwpAQCAtMzQ4LDggKzM0OCw4IEBACiAJCQkJMUM1QUNBOUIyNzNBNDI2RDAw
OTVGOEQ1IC8qIERldmljZS5oICovLAogCQkJCTFDNUFDQUEzMjczQTQyNkQwMDk1RjhENSAvKiBE
ZXZpY2UubW0gKi8sCiAJCQkJMUNFQkQ4MEIyNzE2QzM3OTAwQTUyNTREIC8qIEV4cG9ydE1hY3Jv
cy5oICovLAotCQkJCTFDMEY0MUVEMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUxpbWl0cy5o
ICovLAotCQkJCTFDMEY0MUVDMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUxpbWl0cy5tbSAq
LywKKwkJCQkxQzBGNDFFRDI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRpZXMu
aCAqLywKKwkJCQkxQzBGNDFFQzI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRp
ZXMubW0gKi8sCiAJCQkJMUM1QUNBQTAyNzNBNDI2RDAwOTVGOEQ1IC8qIEluc3RhbmNlLmggKi8s
CiAJCQkJMUM1QUNBOTIyNzNBNDFDMjAwOTVGOEQ1IC8qIEluc3RhbmNlLm1tICovLAogCQkJCTFD
MzM3NTVEMjdGQTIzQjgwMDJGMTY0NCAvKiBJc1ZhbGlkVG9Vc2VXaXRoLmggKi8sCkBAIC00ODcs
NyArNDg3LDcgQEAKIAkJCQkxQzU4MzAxODI3RTE2ODIzMDA5QjQwRjAgLyogQVBJQ29udmVyc2lv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNUFDQUQ3MjczQTRENzAwMDk1RjhENSAvKiBCaW5k
R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNTgyRkZBMjdFMDQxMzEwMDlCNDBGMCAvKiBD
b21tYW5kc01peGluLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQzBGNDFFRjI4MDk0MDY1MDAwNTg4
NkQgLyogSGFyZHdhcmVMaW1pdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTFDMEY0MUVGMjgwOTQw
NjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMzMzc1NUYyN0ZBMjNCODAwMkYxNjQ0IC8qIElzVmFsaWRUb1VzZVdpdGguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDRUJEN0U3MjcxNkFGQkEwMEE1MjU0RCAvKiBXZWJHUFUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDNUFDQUQzMjczQTRDODYwMDk1RjhENSAvKiBXZWJHUFVFeHQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzM4LDcgKzczOCw3IEBACiAJCQkJMUM1QUNBQzYyNzNBNDI2RDAwOTVGOEQ1
IC8qIENvbXB1dGVQYXNzRW5jb2Rlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDNUFDQUMwMjcz
QTQyNkQwMDk1RjhENSAvKiBDb21wdXRlUGlwZWxpbmUubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QzVBQ0FDMTI3M0E0MjZEMDA5NUY4RDUgLyogRGV2aWNlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MUMwRjQxRUUyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlTGltaXRzLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMwRjQxRUUyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2FwYWJpbGl0aWVz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBOTQyNzNBNDFDMjAwOTVGOEQ1IC8qIEluc3Rh
bmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBRTUyNzNBNTVERDAwOTVGOEQ1IC8qIFBp
cGVsaW5lTGF5b3V0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBQkQyNzNBNDI2RDAwOTVG
OEQ1IC8qIFF1ZXJ5U2V0Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9BZGFwdGVyLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9BZGFwdGVyLmgKaW5k
ZXggMjM0MjFkYmVlMDY0MTk1ZTkxNzk1YzljNTE5NjQ2YmE0ODgyZGE3MC4uODZiMTgzNzRhYzMz
ZDM3MGEwYmE2MDU2YTI5N2MzOTQ2ZTc3NzM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQWRhcHRlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0FkYXB0ZXIuaApAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCAiSGFyZHdhcmVDYXBhYmls
aXRpZXMuaCIKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbXBvcnQgPHd0Zi9SZWYuaD4KQEAgLTQyLDkgKzQzLDkgQEAgY2xh
c3MgSW5zdGFuY2U7CiBjbGFzcyBBZGFwdGVyIDogcHVibGljIFdHUFVBZGFwdGVySW1wbCwgcHVi
bGljIFJlZkNvdW50ZWQ8QWRhcHRlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8QWRhcHRlcj4gY3JlYXRlKGlkPE1UTERldmljZT4gZGV2
aWNlLCBJbnN0YW5jZSYgaW5zdGFuY2UsIGNvbnN0IFdHUFVMaW1pdHMmIGxpbWl0cykKKyAgICBz
dGF0aWMgUmVmPEFkYXB0ZXI+IGNyZWF0ZShpZDxNVExEZXZpY2U+IGRldmljZSwgSW5zdGFuY2Um
IGluc3RhbmNlLCBIYXJkd2FyZUNhcGFiaWxpdGllcyYmIGNhcGFiaWxpdGllcykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXIoZGV2aWNlLCBpbnN0YW5jZSwgbGlt
aXRzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXIoZGV2aWNlLCBpbnN0
YW5jZSwgV1RGTW92ZShjYXBhYmlsaXRpZXMpKSk7CiAgICAgfQogICAgIHN0YXRpYyBSZWY8QWRh
cHRlcj4gY3JlYXRlSW52YWxpZChJbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgewpAQCAtNjcsMTMg
KzY4LDEzIEBAIHB1YmxpYzoKIAogCiBwcml2YXRlOgotICAgIEFkYXB0ZXIoaWQ8TVRMRGV2aWNl
PiwgSW5zdGFuY2UmLCBjb25zdCBXR1BVTGltaXRzJik7CisgICAgQWRhcHRlcihpZDxNVExEZXZp
Y2U+LCBJbnN0YW5jZSYsIEhhcmR3YXJlQ2FwYWJpbGl0aWVzJiYpOwogICAgIEFkYXB0ZXIoSW5z
dGFuY2UmKTsKIAogICAgIGlkPE1UTERldmljZT4gbV9kZXZpY2UgeyBuaWwgfTsKICAgICBjb25z
dCBSZWY8SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAKLSAgICBXR1BVTGltaXRzIG1fbGltaXRzIHsg
fTsKKyAgICBIYXJkd2FyZUNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllcyB7IH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Fk
YXB0ZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9BZGFwdGVyLm1tCmluZGV4IDFmOTU3MGNh
NjdkM2Q1NmMwMDUwZjlhOWQ0ZjZjYmViOTQ4OTYxZGUuLmU3YmQwYjdjZmI4ZDU0NDdhYmNmOTU2
OWJmY2E3MDBjZDE0ZmE0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0FkYXB0
ZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQWRhcHRlci5tbQpAQCAtMjgsMTYgKzI4
LDE2IEBACiAKICNpbXBvcnQgIkFQSUNvbnZlcnNpb25zLmgiCiAjaW1wb3J0ICJEZXZpY2UuaCIK
LSNpbXBvcnQgIkhhcmR3YXJlTGltaXRzLmgiCiAjaW1wb3J0ICJJbnN0YW5jZS5oIgorI2ltcG9y
dCA8YWxnb3JpdGhtPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
V2ViR1BVIHsKIAotQWRhcHRlcjo6QWRhcHRlcihpZDxNVExEZXZpY2U+IGRldmljZSwgSW5zdGFu
Y2UmIGluc3RhbmNlLCBjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMpCitBZGFwdGVyOjpBZGFwdGVy
KGlkPE1UTERldmljZT4gZGV2aWNlLCBJbnN0YW5jZSYgaW5zdGFuY2UsIEhhcmR3YXJlQ2FwYWJp
bGl0aWVzJiYgY2FwYWJpbGl0aWVzKQogICAgIDogbV9kZXZpY2UoZGV2aWNlKQogICAgICwgbV9p
bnN0YW5jZShpbnN0YW5jZSkKLSAgICAsIG1fbGltaXRzKGxpbWl0cykKKyAgICAsIG1fY2FwYWJp
bGl0aWVzKFdURk1vdmUoY2FwYWJpbGl0aWVzKSkKIHsKIH0KIApAQCAtNDgsMTAgKzQ4LDEzIEBA
IEFkYXB0ZXI6OkFkYXB0ZXIoSW5zdGFuY2UmIGluc3RhbmNlKQogCiBBZGFwdGVyOjp+QWRhcHRl
cigpID0gZGVmYXVsdDsKIAotc2l6ZV90IEFkYXB0ZXI6OmVudW1lcmF0ZUZlYXR1cmVzKFdHUFVG
ZWF0dXJlTmFtZSopCitzaXplX3QgQWRhcHRlcjo6ZW51bWVyYXRlRmVhdHVyZXMoV0dQVUZlYXR1
cmVOYW1lKiBmZWF0dXJlcykKIHsKLSAgICAvLyBXZSBzdXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1
cmVzIHJpZ2h0IG5vdy4KLSAgICByZXR1cm4gMDsKKyAgICAvLyBUaGUgQVBJIGNvbnRyYWN0IGZv
ciB0aGlzIHJlcXVpcmVzIHRoYXQgc3VmZmljaWVudCBzcGFjZSBoYXMgYWxyZWFkeSBiZWVuIGFs
bG9jYXRlZCBmb3IgdGhlIG91dHB1dC4KKyAgICAvLyBUaGlzIHJlcXVpcmVzIHRoZSBjYWxsZXIg
Y2FsbGluZyB1cyB0d2ljZTogb25jZSB0byBnZXQgdGhlIGFtb3VudCBvZiBzcGFjZSB0byBhbGxv
Y2F0ZSwgYW5kIG9uY2UgdG8gZmlsbCB0aGUgc3BhY2UuCisgICAgaWYgKGZlYXR1cmVzKQorICAg
ICAgICBzdGQ6OmNvcHkobV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuYmVnaW4oKSwgbV9jYXBhYmls
aXRpZXMuZmVhdHVyZXMuZW5kKCksIGZlYXR1cmVzKTsKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRp
ZXMuZmVhdHVyZXMuc2l6ZSgpOwogfQogCiBib29sIEFkYXB0ZXI6OmdldExpbWl0cyhXR1BVU3Vw
cG9ydGVkTGltaXRzJiBsaW1pdHMpCkBAIC01OSw4ICs2Miw3IEBAIGJvb2wgQWRhcHRlcjo6Z2V0
TGltaXRzKFdHUFVTdXBwb3J0ZWRMaW1pdHMmIGxpbWl0cykKICAgICBpZiAobGltaXRzLm5leHRJ
bkNoYWluICE9IG51bGxwdHIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KLSAgICBsaW1pdHMubGltaXRzID0geyB9OworICAgIGxpbWl0cy5s
aW1pdHMgPSBtX2NhcGFiaWxpdGllcy5saW1pdHM7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTc1LDEwICs3Nyw5IEBAIHZvaWQgQWRhcHRlcjo6Z2V0UHJvcGVydGllcyhXR1BVQWRhcHRlclBy
b3BlcnRpZXMmIHByb3BlcnRpZXMpCiAgICAgcHJvcGVydGllcy5iYWNrZW5kVHlwZSA9IFdHUFVC
YWNrZW5kVHlwZV9NZXRhbDsKIH0KIAotYm9vbCBBZGFwdGVyOjpoYXNGZWF0dXJlKFdHUFVGZWF0
dXJlTmFtZSkKK2Jvb2wgQWRhcHRlcjo6aGFzRmVhdHVyZShXR1BVRmVhdHVyZU5hbWUgZmVhdHVy
ZSkKIHsKLSAgICAvLyBXZSBzdXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1cmVzIHJpZ2h0IG5vdy4K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0ZDo6ZmluZChtX2NhcGFiaWxpdGllcy5m
ZWF0dXJlcy5iZWdpbigpLCBtX2NhcGFiaWxpdGllcy5mZWF0dXJlcy5lbmQoKSwgZmVhdHVyZSk7
CiB9CiAKIHZvaWQgQWRhcHRlcjo6cmVxdWVzdERldmljZShjb25zdCBXR1BVRGV2aWNlRGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXR1BVUmVxdWVzdERldmlj
ZVN0YXR1cywgUmVmPERldmljZT4mJiwgU3RyaW5nJiYpPiYmIGNhbGxiYWNrKQpAQCAtOTcsNyAr
OTgsNyBAQCB2b2lkIEFkYXB0ZXI6OnJlcXVlc3REZXZpY2UoY29uc3QgV0dQVURldmljZURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIENvbXBsZXRpb25IYQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBsaW1pdHMgPSBtX2xpbWl0czsKKyAgICBXR1BVTGltaXRzIGxpbWl0cyB7IH07
CiAKICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZExpbWl0cykgewogICAgICAgICBpZiAoZGVz
Y3JpcHRvci5yZXF1aXJlZExpbWl0cy0+bmV4dEluQ2hhaW4pIHsKQEAgLTExNCw3ICsxMTUsNyBA
QCB2b2lkIEFkYXB0ZXI6OnJlcXVlc3REZXZpY2UoY29uc3QgV0dQVURldmljZURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIENvbXBsZXRpb25IYQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGFueUxpbWl0SXNCZXR0ZXJUaGFuKGRlc2NyaXB0b3IucmVxdWlyZWRM
aW1pdHMtPmxpbWl0cywgbV9saW1pdHMpKSB7CisgICAgICAgIGlmIChhbnlMaW1pdElzQmV0dGVy
VGhhbihkZXNjcmlwdG9yLnJlcXVpcmVkTGltaXRzLT5saW1pdHMsIG1fY2FwYWJpbGl0aWVzLmxp
bWl0cykpIHsKICAgICAgICAgICAgIGluc3RhbmNlKCkuc2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlz
ID0gUmVmIHsgKnRoaXMgfSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1c19FcnJv
ciwgRGV2aWNlOjpjcmVhdGVJbnZhbGlkKHN0cm9uZ1RoaXMpLCAiRGV2aWNlIGRvZXMgbm90IHN1
cHBvcnQgcmVxdWVzdGVkIGxpbWl0cyJfcyk7CiAgICAgICAgICAgICB9KTsKQEAgLTEyMiwxMSAr
MTIzLDI2IEBAIHZvaWQgQWRhcHRlcjo6cmVxdWVzdERldmljZShjb25zdCBXR1BVRGV2aWNlRGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgQ29tcGxldGlvbkhhCiAgICAgICAgIH0KIAogICAgICAgICBs
aW1pdHMgPSBkZXNjcmlwdG9yLnJlcXVpcmVkTGltaXRzLT5saW1pdHM7CisgICAgfSBlbHNlCisg
ICAgICAgIGxpbWl0cyA9IGRlZmF1bHRMaW1pdHMoKTsKKworICAgIGF1dG8gZmVhdHVyZXMgPSBW
ZWN0b3IgeyBkZXNjcmlwdG9yLnJlcXVpcmVkRmVhdHVyZXMsIGRlc2NyaXB0b3IucmVxdWlyZWRG
ZWF0dXJlc0NvdW50IH07CisgICAgaWYgKGluY2x1ZGVzVW5zdXBwb3J0ZWRGZWF0dXJlcyhmZWF0
dXJlcywgbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMpKSB7CisgICAgICAgIGluc3RhbmNlKCkuc2No
ZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdHUFVSZXF1ZXN0
RGV2aWNlU3RhdHVzX0Vycm9yLCBEZXZpY2U6OmNyZWF0ZUludmFsaWQoc3Ryb25nVGhpcyksICJE
ZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0ZWQgZmVhdHVyZXMiX3MpOworICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGNh
cGFiaWxpdGllcyB7CisgICAgICAgIGxpbWl0cywKKyAgICAgICAgV1RGTW92ZShmZWF0dXJlcyks
CisgICAgICAgIG1fY2FwYWJpbGl0aWVzLmJhc2VDYXBhYmlsaXRpZXMsCisgICAgfTsKKwogICAg
IGF1dG8gbGFiZWwgPSBmcm9tQVBJKGRlc2NyaXB0b3IubGFiZWwpOwotICAgIGluc3RhbmNlKCku
c2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgbGFiZWwgPSBXVEZNb3Zl
KGxhYmVsKSwgbGltaXRzID0gV1RGTW92ZShsaW1pdHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBjYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0
YXR1c19TdWNjZXNzLCBEZXZpY2U6OmNyZWF0ZShzdHJvbmdUaGlzLT5tX2RldmljZSwgV1RGTW92
ZShsYWJlbCksIFdURk1vdmUobGltaXRzKSwgc3Ryb25nVGhpcyksIHsgfSk7CisgICAgaW5zdGFu
Y2UoKS5zY2hlZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAqdGhpcyB9LCBsYWJlbCA9IFdU
Rk1vdmUobGFiZWwpLCBjYXBhYmlsaXRpZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKFdH
UFVSZXF1ZXN0RGV2aWNlU3RhdHVzX1N1Y2Nlc3MsIERldmljZTo6Y3JlYXRlKHN0cm9uZ1RoaXMt
Pm1fZGV2aWNlLCBXVEZNb3ZlKGxhYmVsKSwgV1RGTW92ZShjYXBhYmlsaXRpZXMpLCBzdHJvbmdU
aGlzKSwgeyB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvRGV2aWNlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UuaAppbmRleCAwMDIwZTZl
YmQ5MjZkMjI2ZDcyYTdmMjg4MDBlZmE1NTI1YzM2ODBmLi4wYTE2MjY4NzhhMTFkNjI0N2U1M2Y5
NzlmNDU2ZmQ5MzRhYTg2Mzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZp
Y2UuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UuaApAQCAtMjYsNiArMjYsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbXBvcnQgIkFkYXB0ZXIuaCIKKyNpbXBvcnQgIkhhcmR3YXJl
Q2FwYWJpbGl0aWVzLmgiCiAjaW1wb3J0ICJRdWV1ZS5oIgogI2ltcG9ydCA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtNjEsNyArNjIsNyBA
QCBjbGFzcyBUZXh0dXJlOwogY2xhc3MgRGV2aWNlIDogcHVibGljIFdHUFVEZXZpY2VJbXBsLCBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGV2aWNlPiwgcHVibGljIENhbk1ha2VXZWFrUHRy
PERldmljZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RGV2aWNlPiBjcmVhdGUoaWQ8TVRMRGV2aWNlPiwgU3RyaW5nJiYgZGV2aWNlTGFi
ZWwsIGNvbnN0IFdHUFVMaW1pdHMmLCBBZGFwdGVyJik7CisgICAgc3RhdGljIFJlZjxEZXZpY2U+
IGNyZWF0ZShpZDxNVExEZXZpY2U+LCBTdHJpbmcmJiBkZXZpY2VMYWJlbCwgSGFyZHdhcmVDYXBh
YmlsaXRpZXMmJiwgQWRhcHRlciYpOwogICAgIHN0YXRpYyBSZWY8RGV2aWNlPiBjcmVhdGVJbnZh
bGlkKEFkYXB0ZXImIGFkYXB0ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEZXZpY2UoYWRhcHRlcikpOwpAQCAtOTcsNiArOTgsOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2RldmljZTsgfQogICAgIGJvb2wgaXNMb3N0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0xvc3Q7IH0KKyAgICBjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMo
KSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllcy5saW1pdHM7IH0KKyAgICBjb25zdCBWZWN0
b3I8V0dQVUZlYXR1cmVOYW1lPiYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxp
dGllcy5mZWF0dXJlczsgfQorICAgIGNvbnN0IEhhcmR3YXJlQ2FwYWJpbGl0aWVzOjpCYXNlQ2Fw
YWJpbGl0aWVzJiBiYXNlQ2FwYWJpbGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRp
ZXMuYmFzZUNhcGFiaWxpdGllczsgfQogCiAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UoKSBjb25z
dCB7IHJldHVybiBtX2RldmljZTsgfQogCkBAIC0xMDYsNyArMTEwLDcgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzVW5pZmllZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlLmhhc1VuaWZp
ZWRNZW1vcnk7IH0KIAogcHJpdmF0ZToKLSAgICBEZXZpY2UoaWQ8TVRMRGV2aWNlPiwgaWQ8TVRM
Q29tbWFuZFF1ZXVlPiBkZWZhdWx0UXVldWUsIGNvbnN0IFdHUFVMaW1pdHMmLCBBZGFwdGVyJik7
CisgICAgRGV2aWNlKGlkPE1UTERldmljZT4sIGlkPE1UTENvbW1hbmRRdWV1ZT4gZGVmYXVsdFF1
ZXVlLCBIYXJkd2FyZUNhcGFiaWxpdGllcyYmLCBBZGFwdGVyJik7CiAgICAgRGV2aWNlKEFkYXB0
ZXImKTsKIAogICAgIHN0cnVjdCBFcnJvclNjb3BlOwpAQCAtMTM4LDcgKzE0Miw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzTG9zdCB7IGZhbHNlIH07CiAgICAgaWQ8TlNPYmplY3Q+IG1fZGV2
aWNlT2JzZXJ2ZXIgeyBuaWwgfTsKIAotICAgIFdHUFVMaW1pdHMgbV9saW1pdHMgeyB9OworICAg
IEhhcmR3YXJlQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzIHsgfTsKIAogICAgIGNvbnN0IFJl
ZjxBZGFwdGVyPiBtX2FkYXB0ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvRGV2aWNlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvRGV2aWNlLm1tCmluZGV4IDg4NWFh
NzNmMjliZDM1ZmMyMDIyNTk0ZGE2ZWVjN2U5NDVjYWQwYmMuLmU2Y2Q2MTEwZjQ1YjE5OGMyNTVl
ZDU0NWI3ZDdjNDA1MDNhM2EyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Rl
dmljZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UubW0KQEAgLTQyLDEyICs0
MiwxMyBAQAogI2ltcG9ydCAiU3VyZmFjZS5oIgogI2ltcG9ydCAiU3dhcENoYWluLmgiCiAjaW1w
b3J0ICJUZXh0dXJlLmgiCisjaW1wb3J0IDxhbGdvcml0aG0+CiAjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViR1BVIHsK
IAotUmVmPERldmljZT4gRGV2aWNlOjpjcmVhdGUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIFN0cmlu
ZyYmIGRldmljZUxhYmVsLCBjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMsIEFkYXB0ZXImIGFkYXB0
ZXIpCitSZWY8RGV2aWNlPiBEZXZpY2U6OmNyZWF0ZShpZDxNVExEZXZpY2U+IGRldmljZSwgU3Ry
aW5nJiYgZGV2aWNlTGFiZWwsIEhhcmR3YXJlQ2FwYWJpbGl0aWVzJiYgY2FwYWJpbGl0aWVzLCBB
ZGFwdGVyJiBhZGFwdGVyKQogewogICAgIGlkPE1UTENvbW1hbmRRdWV1ZT4gY29tbWFuZFF1ZXVl
ID0gW2RldmljZSBuZXdDb21tYW5kUXVldWVdOwogICAgIGlmICghY29tbWFuZFF1ZXVlKQpAQCAt
NTksMTMgKzYwLDEzIEBAIFJlZjxEZXZpY2U+IERldmljZTo6Y3JlYXRlKGlkPE1UTERldmljZT4g
ZGV2aWNlLCBTdHJpbmcmJiBkZXZpY2VMYWJlbCwgY29uc3QgV0dQCiAgICAgaWYgKCFkZXZpY2VM
YWJlbC5pc0VtcHR5KCkpCiAgICAgICAgIGNvbW1hbmRRdWV1ZS5sYWJlbCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRGVmYXVsdCBxdWV1ZSBmb3IgZGV2aWNlICVzIiwgZGV2aWNlTGFi
ZWwudXRmOCgpLmRhdGEoKV07CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZXZpY2UoZGV2
aWNlLCBjb21tYW5kUXVldWUsIGxpbWl0cywgYWRhcHRlcikpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERldmljZShkZXZpY2UsIGNvbW1hbmRRdWV1ZSwgV1RGTW92ZShjYXBhYmlsaXRpZXMp
LCBhZGFwdGVyKSk7CiB9CiAKLURldmljZTo6RGV2aWNlKGlkPE1UTERldmljZT4gZGV2aWNlLCBp
ZDxNVExDb21tYW5kUXVldWU+IGRlZmF1bHRRdWV1ZSwgY29uc3QgV0dQVUxpbWl0cyYgbGltaXRz
LCBBZGFwdGVyJiBhZGFwdGVyKQorRGV2aWNlOjpEZXZpY2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2Us
IGlkPE1UTENvbW1hbmRRdWV1ZT4gZGVmYXVsdFF1ZXVlLCBIYXJkd2FyZUNhcGFiaWxpdGllcyYm
IGNhcGFiaWxpdGllcywgQWRhcHRlciYgYWRhcHRlcikKICAgICA6IG1fZGV2aWNlKGRldmljZSkK
ICAgICAsIG1fZGVmYXVsdFF1ZXVlKFF1ZXVlOjpjcmVhdGUoZGVmYXVsdFF1ZXVlLCAqdGhpcykp
Ci0gICAgLCBtX2xpbWl0cyhsaW1pdHMpCisgICAgLCBtX2NhcGFiaWxpdGllcyhXVEZNb3ZlKGNh
cGFiaWxpdGllcykpCiAgICAgLCBtX2FkYXB0ZXIoYWRhcHRlcikKIHsKICNpZiBQTEFURk9STShN
QUMpCkBAIC0xMzcsMTAgKzEzOCwxMyBAQCB2b2lkIERldmljZTo6ZGVzdHJveSgpCiAgICAgbG9z
ZVRoZURldmljZShXR1BVRGV2aWNlTG9zdFJlYXNvbl9EZXN0cm95ZWQpOwogfQogCi1zaXplX3Qg
RGV2aWNlOjplbnVtZXJhdGVGZWF0dXJlcyhXR1BVRmVhdHVyZU5hbWUqKQorc2l6ZV90IERldmlj
ZTo6ZW51bWVyYXRlRmVhdHVyZXMoV0dQVUZlYXR1cmVOYW1lKiBmZWF0dXJlcykKIHsKLSAgICAv
LyBXZSBzdXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1cmVzIHJpZ2h0IG5vdy4KLSAgICByZXR1cm4g
MDsKKyAgICAvLyBUaGUgQVBJIGNvbnRyYWN0IGZvciB0aGlzIHJlcXVpcmVzIHRoYXQgc3VmZmlj
aWVudCBzcGFjZSBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIG91dHB1dC4KKyAg
ICAvLyBUaGlzIHJlcXVpcmVzIHRoZSBjYWxsZXIgY2FsbGluZyB1cyB0d2ljZTogb25jZSB0byBn
ZXQgdGhlIGFtb3VudCBvZiBzcGFjZSB0byBhbGxvY2F0ZSwgYW5kIG9uY2UgdG8gZmlsbCB0aGUg
c3BhY2UuCisgICAgaWYgKGZlYXR1cmVzKQorICAgICAgICBzdGQ6OmNvcHkobV9jYXBhYmlsaXRp
ZXMuZmVhdHVyZXMuYmVnaW4oKSwgbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuZW5kKCksIGZlYXR1
cmVzKTsKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuc2l6ZSgpOwogfQogCiBi
b29sIERldmljZTo6Z2V0TGltaXRzKFdHUFVTdXBwb3J0ZWRMaW1pdHMmIGxpbWl0cykKQEAgLTE0
OCw4ICsxNTIsNyBAQCBib29sIERldmljZTo6Z2V0TGltaXRzKFdHUFVTdXBwb3J0ZWRMaW1pdHMm
IGxpbWl0cykKICAgICBpZiAobGltaXRzLm5leHRJbkNoYWluICE9IG51bGxwdHIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBsaW1p
dHMubGltaXRzID0geyB9OworICAgIGxpbWl0cy5saW1pdHMgPSBtX2NhcGFiaWxpdGllcy5saW1p
dHM7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1OCwxMCArMTYxLDkgQEAgUXVldWUmIERl
dmljZTo6Z2V0UXVldWUoKQogICAgIHJldHVybiBtX2RlZmF1bHRRdWV1ZTsKIH0KIAotYm9vbCBE
ZXZpY2U6Omhhc0ZlYXR1cmUoV0dQVUZlYXR1cmVOYW1lKQorYm9vbCBEZXZpY2U6Omhhc0ZlYXR1
cmUoV0dQVUZlYXR1cmVOYW1lIGZlYXR1cmUpCiB7Ci0gICAgLy8gV2Ugc3VwcG9ydCBubyBvcHRp
b25hbCBmZWF0dXJlcyByaWdodCBub3cuCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBz
dGQ6OmZpbmQobV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuYmVnaW4oKSwgbV9jYXBhYmlsaXRpZXMu
ZmVhdHVyZXMuZW5kKCksIGZlYXR1cmUpOwogfQogCiBhdXRvIERldmljZTo6Y3VycmVudEVycm9y
U2NvcGUoV0dQVUVycm9yRmlsdGVyIHR5cGUpIC0+IEVycm9yU2NvcGUqCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9IYXJkd2FyZUNhcGFiaWxpdGllcy5oIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OGUzMjg2MzRlMGFh
OGQ0OGQ3ZGUyYWMxNWM1MWIxZjhkNDVkMWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkdQVS9XZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMuaApAQCAtMCwwICsxLDUxIEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkdQVSB7CisKK3N0cnVjdCBIYXJkd2FyZUNhcGFiaWxpdGllcyB7CisgICAgV0dQ
VUxpbWl0cyBsaW1pdHMgeyB9OworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+IGZlYXR1cmVz
OworCisgICAgc3RydWN0IEJhc2VDYXBhYmlsaXRpZXMgeworICAgICAgICBNVExBcmd1bWVudEJ1
ZmZlcnNUaWVyIGFyZ3VtZW50QnVmZmVyc1RpZXIgeyBNVExBcmd1bWVudEJ1ZmZlcnNUaWVyMSB9
OworICAgICAgICBib29sIHN1cHBvcnRzTm9uUHJpdmF0ZURlcHRoU3RlbmNpbFRleHR1cmVzIHsg
ZmFsc2UgfTsKKyAgICAgICAgaWQ8TVRMQ291bnRlclNldD4gdGltZXN0YW1wQ291bnRlclNldCB7
IG5pbCB9OworICAgICAgICBpZDxNVExDb3VudGVyU2V0PiBzdGF0aXN0aWNDb3VudGVyU2V0IHsg
bmlsIH07CisgICAgfSBiYXNlQ2FwYWJpbGl0aWVzOworfTsKKworc3RkOjpvcHRpb25hbDxIYXJk
d2FyZUNhcGFiaWxpdGllcz4gaGFyZHdhcmVDYXBhYmlsaXRpZXMoaWQ8TVRMRGV2aWNlPik7Citi
b29sIGlzVmFsaWQoY29uc3QgV0dQVUxpbWl0cyYpOworV0dQVUxpbWl0cyBkZWZhdWx0TGltaXRz
KCk7Citib29sIGFueUxpbWl0SXNCZXR0ZXJUaGFuKGNvbnN0IFdHUFVMaW1pdHMmIHRhcmdldCwg
Y29uc3QgV0dQVUxpbWl0cyYgcmVmZXJlbmNlKTsKK2Jvb2wgaW5jbHVkZXNVbnN1cHBvcnRlZEZl
YXR1cmVzKGNvbnN0IFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+JiB0YXJnZXQsIGNvbnN0IFZlY3Rv
cjxXR1BVRmVhdHVyZU5hbWU+JiByZWZlcmVuY2UpOworCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlQ2FwYWJpbGl0aWVzLm1t
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDQzZGUxODM3YmIzMDU2NWIyZmJhNTU0MGE4OGQ1NDkxMzRjZGJmMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlQ2FwYWJpbGl0aWVzLm1tCkBAIC0w
LDAgKzEsNjM0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJIYXJkd2FyZUNhcGFiaWxpdGllcy5oIgor
CisjaW1wb3J0IDxhbGdvcml0aG0+CisjaW1wb3J0IDxsaW1pdHM+CisjaW1wb3J0IDx3dGYvTWF0
aEV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1BhZ2VCbG9jay5oPgorI2ltcG9ydCA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViR1BVIHsKKworLy8gaHR0cHM6Ly9kZXZlbG9wZXIu
YXBwbGUuY29tL21ldGFsL01ldGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5wZGYKKworLy8gRklYTUU6
IGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2lzc3Vlcy8yNzQ5IHdlIG5lZWQgbW9y
ZSBsaW1pdHMuCisKK3N0YXRpYyBIYXJkd2FyZUNhcGFiaWxpdGllczo6QmFzZUNhcGFiaWxpdGll
cyBiYXNlQ2FwYWJpbGl0aWVzKGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIGlkPE1UTENv
dW50ZXJTZXQ+IHRpbWVzdGFtcENvdW50ZXJTZXQgPSBuaWw7CisgICAgaWQ8TVRMQ291bnRlclNl
dD4gc3RhdGlzdGljQ291bnRlclNldCA9IG5pbDsKKworICAgIGZvciAoaWQ8TVRMQ291bnRlclNl
dD4gY291bnRlclNldCBpbiBkZXZpY2UuY291bnRlclNldHMpIHsKKyAgICAgICAgaWYgKFtjb3Vu
dGVyU2V0Lm5hbWUgaXNFcXVhbFRvU3RyaW5nOk1UTENvbW1vbkNvdW50ZXJTZXRUaW1lc3RhbXBd
KQorICAgICAgICAgICAgdGltZXN0YW1wQ291bnRlclNldCA9IGNvdW50ZXJTZXQ7CisgICAgICAg
IGVsc2UgaWYgKFtjb3VudGVyU2V0Lm5hbWUgaXNFcXVhbFRvU3RyaW5nOk1UTENvbW1vbkNvdW50
ZXJTZXRTdGF0aXN0aWNdKQorICAgICAgICAgICAgc3RhdGlzdGljQ291bnRlclNldCA9IGNvdW50
ZXJTZXQ7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgW2RldmljZSBhcmd1bWVudEJ1
ZmZlcnNTdXBwb3J0XSwKKyAgICAgICAgZmFsc2UsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUg
Y2FsbGVyLgorICAgICAgICB0aW1lc3RhbXBDb3VudGVyU2V0LAorICAgICAgICBzdGF0aXN0aWND
b3VudGVyU2V0LAorICAgIH07Cit9CisKK3N0YXRpYyBWZWN0b3I8V0dQVUZlYXR1cmVOYW1lPiBi
YXNlRmVhdHVyZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIGNvbnN0IEhhcmR3YXJlQ2FwYWJpbGl0
aWVzOjpCYXNlQ2FwYWJpbGl0aWVzJiBiYXNlQ2FwYWJpbGl0aWVzKQoreworICAgIFZlY3RvcjxX
R1BVRmVhdHVyZU5hbWU+IGZlYXR1cmVzOworCisgICAgLy8gRklYTUU6IERldGVybWluZSBpZiBX
R1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29udHJvbCBpcyBzdXBwb3J0ZWQuCisKKyNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorICAgIGlmIChkZXZpY2UuZGVwdGgy
NFN0ZW5jaWw4UGl4ZWxGb3JtYXRTdXBwb3J0ZWQpCisgICAgICAgIGZlYXR1cmVzLmFwcGVuZChX
R1BVRmVhdHVyZU5hbWVfRGVwdGgyNFVub3JtU3RlbmNpbDgpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oZGV2aWNlKTsKKyNlbmRpZgorCisgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVGZWF0dXJl
TmFtZV9EZXB0aDMyRmxvYXRTdGVuY2lsOCk7CisKKyAgICBpZiAoYmFzZUNhcGFiaWxpdGllcy50
aW1lc3RhbXBDb3VudGVyU2V0KQorICAgICAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVO
YW1lX1RpbWVzdGFtcFF1ZXJ5KTsKKworICAgIGlmIChiYXNlQ2FwYWJpbGl0aWVzLnN0YXRpc3Rp
Y0NvdW50ZXJTZXQpCisgICAgICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfUGlw
ZWxpbmVTdGF0aXN0aWNzUXVlcnkpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChkZXZp
Y2Uuc3VwcG9ydHNCQ1RleHR1cmVDb21wcmVzc2lvbikKKyAgICAgICAgZmVhdHVyZXMuYXBwZW5k
KFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25CQyk7CisjZW5kaWYKKworICAgIC8v
IFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25FVEMyIGFuZCBXR1BVRmVhdHVyZU5h
bWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyBhcmUgdG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxs
ZXIuCisKKyAgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGlmIFdHUFVGZWF0dXJlTmFtZV9JbmRpcmVj
dEZpcnN0SW5zdGFuY2UgaXMgc3VwcG9ydGVkLgorCisgICAgcmV0dXJuIGZlYXR1cmVzOworfQor
CitzdGF0aWMgSGFyZHdhcmVDYXBhYmlsaXRpZXMgYXBwbGUzKGlkPE1UTERldmljZT4gZGV2aWNl
KQoreworICAgIGF1dG8gYmFzZUNhcGFiaWxpdGllcyA9IFdlYkdQVTo6YmFzZUNhcGFiaWxpdGll
cyhkZXZpY2UpOworCisgICAgYmFzZUNhcGFiaWxpdGllcy5zdXBwb3J0c05vblByaXZhdGVEZXB0
aFN0ZW5jaWxUZXh0dXJlcyA9IHRydWU7CisKKyAgICBhdXRvIGZlYXR1cmVzID0gV2ViR1BVOjpi
YXNlRmVhdHVyZXMoZGV2aWNlLCBiYXNlQ2FwYWJpbGl0aWVzKTsKKworICAgIGZlYXR1cmVzLmFw
cGVuZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uRVRDMik7CisgICAgZmVhdHVy
ZXMuYXBwZW5kKFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25BU1RDKTsKKworICAg
IHN0ZDo6c29ydChmZWF0dXJlcy5iZWdpbigpLCBmZWF0dXJlcy5lbmQoKSk7CisKKyAgICB1aW50
MzJfdCBtYXhCaW5kR3JvdXBzID0gMzA7CisKKyAgICByZXR1cm4geworICAgICAgICB7CisgICAg
ICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMUQgKi8gICAgMTYzODQsCisgICAgICAgICAg
ICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYzODQsCisgICAgICAgICAgICAvKiBt
YXhUZXh0dXJlRGltZW5zaW9uM0QgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heFRleHR1
cmVBcnJheUxheWVycyAqLyAgICAyMDQ4LAorICAgICAgICAgICAgLyogbWF4QmluZEdyb3VwcyAq
LyAgICBtYXhCaW5kR3JvdXBzLAorICAgICAgICAgICAgLyogbWF4RHluYW1pY1VuaWZvcm1CdWZm
ZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpLAorICAgICAgICAgICAgLyogbWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxp
bmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAg
ICAgICAgICAgLyogbWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4Qmlu
ZEdyb3VwcyAqIDMxLAorICAgICAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAq
LyAgICBtYXhCaW5kR3JvdXBzICogMTYsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVy
c1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAzMSwKKyAgICAgICAgICAgIC8q
IG1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAz
MSwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAg
bWF4QmluZEdyb3VwcyAqIDMxLAorICAgICAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRp
bmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAg
ICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZp
bGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9m
ZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9m
ZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAq
LyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCisg
ICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAvKiBtYXhJbnRlclN0YWdl
U2hhZGVyQ29tcG9uZW50cyAqLyAgICA2MCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3Jr
Z3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAxNiAqIEtCLAorICAgICAgICAgICAgLyogbWF4Q29tcHV0
ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDUxMiwKKyAgICAgICAgICAgIC8qIG1heENv
bXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICA1MTIsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRl
V29ya2dyb3VwU2l6ZVkgKi8gICAgNTEyLAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtn
cm91cFNpemVaICovICAgIDUxMiwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBz
UGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgfSwKKyAgICAgICAgV1RGTW92ZShmZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBh
YmlsaXRpZXMsCisgICAgfTsKK30KKworc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGFwcGxl
NChpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBhdXRvIGJhc2VDYXBhYmlsaXRpZXMgPSBX
ZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNlKTsKKworICAgIGJhc2VDYXBhYmlsaXRpZXMu
c3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgPSB0cnVlOworCisgICAgYXV0
byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1cmVzKGRldmljZSwgYmFzZUNhcGFiaWxpdGll
cyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVz
c2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNv
bXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNvcnQoZmVhdHVyZXMuYmVnaW4oKSwgZmVhdHVy
ZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOworCisgICAgcmV0
dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICov
ICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2
Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisg
ICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwKKyAgICAgICAg
ICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKKyAgICAgICAgICAgIC8q
IG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNT
dG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNo
YWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8qIG1heFNh
bXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDE2LAorICAgICAgICAg
ICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBz
ICogOTYsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAq
LyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVy
c1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8q
IG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4g
YnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6
ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAg
IC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAg
IC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAg
IC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhB
dHRyaWJ1dGVzICovICAgIDMxLAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlT
dHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAg
ICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0LAorICAgICAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplICovICAgIDMyICogS0IsCisg
ICAgICAgICAgICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAy
NCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAor
ICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDEwMjQsCisgICAg
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogKi8gICAgMTAyNCwKKyAgICAgICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgfSwKKyAgICAgICAgV1RGTW92ZShm
ZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBhYmlsaXRpZXMsCisgICAgfTsKK30KKworc3RhdGlj
IEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGFwcGxlNShpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAg
ICBhdXRvIGJhc2VDYXBhYmlsaXRpZXMgPSBXZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNl
KTsKKworICAgIGJhc2VDYXBhYmlsaXRpZXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2ls
VGV4dHVyZXMgPSB0cnVlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1
cmVzKGRldmljZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQ
VUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVu
ZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNv
cnQoZmVhdHVyZXMuYmVnaW4oKSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4
QmluZEdyb3VwcyA9IDMwOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAg
LyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4
VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlM
YXllcnMgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4
QmluZEdyb3VwcywKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBp
cGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0
ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAg
IC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMg
KiA5NiwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4
QmluZEdyb3VwcyAqIDE2LAorICAgICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFk
ZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAgICAgICAgICAvKiBtYXhTdG9y
YWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAg
ICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRH
cm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAq
LyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8q
IG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4g
YnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGln
bm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGln
bm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAs
CisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAorICAgICAgICAg
ICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpLAorICAgICAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNv
bXBvbmVudHMgKi8gICAgMTI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0
b3JhZ2VTaXplICovICAgIDMyICogS0IsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlSW52b2Nh
dGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVX
b3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtn
cm91cFNpemVZICovICAgIDEwMjQsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vw
U2l6ZVogKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVy
RGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAg
ICAgICAgfSwKKyAgICAgICAgV1RGTW92ZShmZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBhYmls
aXRpZXMsCisgICAgfTsKK30KKworI2lmICFQTEFURk9STShXQVRDSE9TKQorc3RhdGljIEhhcmR3
YXJlQ2FwYWJpbGl0aWVzIGFwcGxlNihpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBhdXRv
IGJhc2VDYXBhYmlsaXRpZXMgPSBXZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNlKTsKKwor
ICAgIGJhc2VDYXBhYmlsaXRpZXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVy
ZXMgPSB0cnVlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1cmVzKGRl
dmljZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1
cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVuZChXR1BV
RmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNvcnQoZmVh
dHVyZXMuYmVnaW4oKSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4QmluZEdy
b3VwcyA9IDMwOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF4
VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVu
c2lvbjNEICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMg
Ki8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdy
b3VwcywKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5l
TGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAg
ICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1h
eFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAw
MDAgLyAyLAorICAgICAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBt
YXhCaW5kR3JvdXBzICogMTAyNCwKKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVy
U2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAg
ICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBz
ICogNTAwMDAwIC8gMiwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVy
U3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAgICAvKiBt
YXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5
IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUg
Ki8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAv
KiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCisgICAgICAgICAgICAv
KiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCisgICAgICAgICAgICAv
KiBtYXhWZXJ0ZXhCdWZmZXJzICovICAgIDMwLAorICAgICAgICAgICAgLyogbWF4VmVydGV4QXR0
cmlidXRlcyAqLyAgICAzMSwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFycmF5U3Ry
aWRlICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAg
ICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzICovICAgIDEyNCwKKyAgICAgICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtCLAorICAg
ICAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQs
CisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAyNCwKKyAg
ICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAorICAgICAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCisgICAgICAgICAg
ICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgIH0sCisgICAgICAgIFdURk1vdmUoZmVh
dHVyZXMpLAorICAgICAgICBiYXNlQ2FwYWJpbGl0aWVzLAorICAgIH07Cit9CisKK3N0YXRpYyBI
YXJkd2FyZUNhcGFiaWxpdGllcyBhcHBsZTcoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAg
YXV0byBiYXNlQ2FwYWJpbGl0aWVzID0gV2ViR1BVOjpiYXNlQ2FwYWJpbGl0aWVzKGRldmljZSk7
CisKKyAgICBiYXNlQ2FwYWJpbGl0aWVzLnN1cHBvcnRzTm9uUHJpdmF0ZURlcHRoU3RlbmNpbFRl
eHR1cmVzID0gdHJ1ZTsKKworICAgIGF1dG8gZmVhdHVyZXMgPSBXZWJHUFU6OmJhc2VGZWF0dXJl
cyhkZXZpY2UsIGJhc2VDYXBhYmlsaXRpZXMpOworCisgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVG
ZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25FVEMyKTsKKyAgICBmZWF0dXJlcy5hcHBlbmQo
V0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEMpOworCisgICAgc3RkOjpzb3J0
KGZlYXR1cmVzLmJlZ2luKCksIGZlYXR1cmVzLmVuZCgpKTsKKworICAgIHVpbnQzMl90IG1heEJp
bmRHcm91cHMgPSAzMDsKKworICAgIHJldHVybiB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC8q
IG1heFRleHR1cmVEaW1lbnNpb24xRCAqLyAgICAxNjM4NCwKKyAgICAgICAgICAgIC8qIG1heFRl
eHR1cmVEaW1lbnNpb24yRCAqLyAgICAxNjM4NCwKKyAgICAgICAgICAgIC8qIG1heFRleHR1cmVE
aW1lbnNpb24zRCAqLyAgICAyMDQ4LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZUFycmF5TGF5
ZXJzICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIG1heEJp
bmRHcm91cHMsCisgICAgICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBl
bGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisg
ICAgICAgICAgICAvKiBtYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAq
LyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAv
KiBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICog
NTAwMDAwIC8gMiwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8g
ICAgbWF4QmluZEdyb3VwcyAqIDEwMjQsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVy
c1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAorICAgICAg
ICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdy
b3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNo
YWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAorICAgICAgICAgICAg
LyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBp
biBieSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdT
aXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAgICAg
ICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAg
ICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAg
ICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRl
eEF0dHJpYnV0ZXMgKi8gICAgMzEsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJh
eVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAg
ICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAxMjQsCisgICAg
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIgKiBLQiwK
KyAgICAgICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCAqLyAgICAx
MDI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAgIDEwMjQs
CisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMTAyNCwKKyAg
ICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICAxMDI0LAorICAgICAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gKi8gICAgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAgICB9LAorICAgICAgICBXVEZNb3Zl
KGZlYXR1cmVzKSwKKyAgICAgICAgYmFzZUNhcGFiaWxpdGllcywKKyAgICB9OworfQorI2VuZGlm
CisKK3N0YXRpYyBIYXJkd2FyZUNhcGFiaWxpdGllcyBtYWMyKGlkPE1UTERldmljZT4gZGV2aWNl
KQoreworICAgIGF1dG8gYmFzZUNhcGFiaWxpdGllcyA9IFdlYkdQVTo6YmFzZUNhcGFiaWxpdGll
cyhkZXZpY2UpOworCisgICAgYmFzZUNhcGFiaWxpdGllcy5zdXBwb3J0c05vblByaXZhdGVEZXB0
aFN0ZW5jaWxUZXh0dXJlcyA9IGZhbHNlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6
YmFzZUZlYXR1cmVzKGRldmljZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBzdGQ6OnNvcnQo
ZmVhdHVyZXMuYmVnaW4oKSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgYnVmZmVy
c1BlckJpbmRHcm91cCA9IDA7CisgICAgdWludDMyX3QgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSAw
OworICAgIHVpbnQzMl90IHNhbXBsZXJzUGVyQmluZEdyb3VwID0gMDsKKyAgICBzd2l0Y2ggKGJh
c2VDYXBhYmlsaXRpZXMuYXJndW1lbnRCdWZmZXJzVGllcikgeworICAgIGNhc2UgTVRMQXJndW1l
bnRCdWZmZXJzVGllcjE6CisgICAgICAgIGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSA2NDsKKyAgICAg
ICAgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSAxMjg7CisgICAgICAgIHNhbXBsZXJzUGVyQmluZEdy
b3VwID0gMTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTVRMQXJndW1lbnRCdWZmZXJzVGll
cjI6CisgICAgICAgIGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSA1MDAwMDAgLyAyOworICAgICAgICB0
ZXh0dXJlc1BlckJpbmRHcm91cCA9IDUwMDAwMCAvIDI7CisgICAgICAgIHNhbXBsZXJzUGVyQmlu
ZEdyb3VwID0gMTAyNDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdWludDMyX3QgbWF4
QmluZEdyb3VwcyA9IDMwOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAg
LyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4
VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlM
YXllcnMgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4
QmluZEdyb3VwcywKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBp
cGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0
ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAg
IC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMg
KiB0ZXh0dXJlc1BlckJpbmRHcm91cCwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hh
ZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIHNhbXBsZXJzUGVyQmluZEdyb3VwLAorICAg
ICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5k
R3JvdXBzICogYnVmZmVyc1BlckJpbmRHcm91cCwKKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VU
ZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiB0ZXh0dXJlc1BlckJp
bmRHcm91cCwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2Ug
Ki8gICAgbWF4QmluZEdyb3VwcyAqIGJ1ZmZlcnNQZXJCaW5kR3JvdXAsCisgICAgICAgICAgICAv
KiBtYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGlu
IGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1Np
emUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAg
ICAvKiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDI1NiwKKyAgICAgICAg
ICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgMjU2LAorICAgICAg
ICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZl
cnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJB
cnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisg
ICAgICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAzMiwKKyAg
ICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtC
LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAg
IDEwMjQsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAy
NCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAor
ICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCisgICAg
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgIH0sCisgICAgICAgIFdURk1v
dmUoZmVhdHVyZXMpLAorICAgICAgICBiYXNlQ2FwYWJpbGl0aWVzLAorICAgIH07Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFQgbWVyZ2VNYXhpbXVtKFQgcHJldmlvdXMsIFQg
bmV4dCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNsaW1pdC1j
bGFzcy1tYXhpbXVtCisgICAgcmV0dXJuIHN0ZDo6bWF4KHByZXZpb3VzLCBuZXh0KTsKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFQgbWVyZ2VBbGlnbm1lbnQoVCBwcmV2aW91
cywgVCBuZXh0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2xp
bWl0LWNsYXNzLWFsaWdubWVudAorICAgIHJldHVybiBzdGQ6Om1pbihXVEY6OnJvdW5kVXBUb1Bv
d2VyT2ZUd28ocHJldmlvdXMpLCBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28obmV4dCkpOworfTsK
Kworc3RhdGljIFdHUFVMaW1pdHMgbWVyZ2VMaW1pdHMoY29uc3QgV0dQVUxpbWl0cyYgcHJldmlv
dXMsIGNvbnN0IFdHUFVMaW1pdHMmIG5leHQpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgbWVy
Z2VNYXhpbXVtKHByZXZpb3VzLm1heFRleHR1cmVEaW1lbnNpb24xRCwgbmV4dC5tYXhUZXh0dXJl
RGltZW5zaW9uMUQpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VGV4dHVyZURp
bWVuc2lvbjJELCBuZXh0Lm1heFRleHR1cmVEaW1lbnNpb24yRCksCisgICAgICAgIG1lcmdlTWF4
aW11bShwcmV2aW91cy5tYXhUZXh0dXJlRGltZW5zaW9uM0QsIG5leHQubWF4VGV4dHVyZURpbWVu
c2lvbjNEKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFRleHR1cmVBcnJheUxh
eWVycywgbmV4dC5tYXhUZXh0dXJlQXJyYXlMYXllcnMpLAorICAgICAgICBtZXJnZU1heGltdW0o
cHJldmlvdXMubWF4QmluZEdyb3VwcywgbmV4dC5tYXhCaW5kR3JvdXBzKSwKKyAgICAgICAgbWVy
Z2VNYXhpbXVtKHByZXZpb3VzLm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5
b3V0LCBuZXh0Lm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0KSwKKyAg
ICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBp
cGVsaW5lTGF5b3V0LCBuZXh0Lm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5
b3V0KSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFNhbXBsZWRUZXh0dXJlc1Bl
clNoYWRlclN0YWdlLCBuZXh0Lm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlKSwKKyAg
ICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsIG5l
eHQubWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2
aW91cy5tYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlLCBuZXh0Lm1heFN0b3JhZ2VCdWZm
ZXJzUGVyU2hhZGVyU3RhZ2UpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4U3Rv
cmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UsIG5leHQubWF4U3RvcmFnZVRleHR1cmVzUGVyU2hh
ZGVyU3RhZ2UpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VW5pZm9ybUJ1ZmZl
cnNQZXJTaGFkZXJTdGFnZSwgbmV4dC5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlKSwK
KyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6
ZSwgbmV4dC5tYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUpLAorICAgICAgICBtZXJnZU1heGlt
dW0ocHJldmlvdXMubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplLCBuZXh0Lm1heFN0b3JhZ2VC
dWZmZXJCaW5kaW5nU2l6ZSksCisgICAgICAgIG1lcmdlQWxpZ25tZW50KHByZXZpb3VzLm1pblVu
aWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQsIG5leHQubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFs
aWdubWVudCksCisgICAgICAgIG1lcmdlQWxpZ25tZW50KHByZXZpb3VzLm1pblN0b3JhZ2VCdWZm
ZXJPZmZzZXRBbGlnbm1lbnQsIG5leHQubWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCks
CisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhWZXJ0ZXhCdWZmZXJzLCBuZXh0Lm1h
eFZlcnRleEJ1ZmZlcnMpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VmVydGV4
QXR0cmlidXRlcywgbmV4dC5tYXhWZXJ0ZXhBdHRyaWJ1dGVzKSwKKyAgICAgICAgbWVyZ2VNYXhp
bXVtKHByZXZpb3VzLm1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlLCBuZXh0Lm1heFZlcnRleEJ1
ZmZlckFycmF5U3RyaWRlKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heEludGVy
U3RhZ2VTaGFkZXJDb21wb25lbnRzLCBuZXh0Lm1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRz
KSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heENvbXB1dGVXb3JrZ3JvdXBTdG9y
YWdlU2l6ZSwgbmV4dC5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUpLAorICAgICAgICBt
ZXJnZU1heGltdW0ocHJldmlvdXMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLCBu
ZXh0Lm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCksCisgICAgICAgIG1lcmdlTWF4
aW11bShwcmV2aW91cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgsIG5leHQubWF4Q29tcHV0ZVdv
cmtncm91cFNpemVYKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heENvbXB1dGVX
b3JrZ3JvdXBTaXplWSwgbmV4dC5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkpLAorICAgICAgICBt
ZXJnZU1heGltdW0ocHJldmlvdXMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaLCBuZXh0Lm1heENv
bXB1dGVXb3JrZ3JvdXBTaXplWiksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhD
b21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiwgbmV4dC5tYXhDb21wdXRlV29ya2dyb3Vwc1Bl
ckRpbWVuc2lvbiksCisgICAgfTsKK307CisKK3N0YXRpYyBWZWN0b3I8V0dQVUZlYXR1cmVOYW1l
PiBtZXJnZUZlYXR1cmVzKGNvbnN0IFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+JiBwcmV2aW91cywg
Y29uc3QgVmVjdG9yPFdHUFVGZWF0dXJlTmFtZT4mIG5leHQpCit7CisgICAgQVNTRVJUKFdURjo6
aXNTb3J0ZWRDb25zdEV4cHIocHJldmlvdXMuYmVnaW4oKSwgcHJldmlvdXMuZW5kKCkpKTsKKyAg
ICBBU1NFUlQoV1RGOjppc1NvcnRlZENvbnN0RXhwcihuZXh0LmJlZ2luKCksIG5leHQuZW5kKCkp
KTsKKworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+IHJlc3VsdChwcmV2aW91cy5zaXplKCkg
KyBuZXh0LnNpemUoKSk7CisgICAgYXV0byBlbmQgPSBtZXJnZURlZHVwbGljYXRlZFNvcnRlZChw
cmV2aW91cy5iZWdpbigpLCBwcmV2aW91cy5lbmQoKSwgbmV4dC5iZWdpbigpLCBuZXh0LmVuZCgp
LCByZXN1bHQuYmVnaW4oKSk7CisgICAgcmVzdWx0LnJlc2l6ZShlbmQgLSByZXN1bHQuYmVnaW4o
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0aWVz
OjpCYXNlQ2FwYWJpbGl0aWVzIG1lcmdlQmFzZUNhcGFiaWxpdGllcyhjb25zdCBIYXJkd2FyZUNh
cGFiaWxpdGllczo6QmFzZUNhcGFiaWxpdGllcyYgcHJldmlvdXMsIGNvbnN0IEhhcmR3YXJlQ2Fw
YWJpbGl0aWVzOjpCYXNlQ2FwYWJpbGl0aWVzJiBuZXh0KQoreworICAgIEFTU0VSVChwcmV2aW91
cy5hcmd1bWVudEJ1ZmZlcnNUaWVyID09IG5leHQuYXJndW1lbnRCdWZmZXJzVGllcik7CisgICAg
QVNTRVJUKCFwcmV2aW91cy50aW1lc3RhbXBDb3VudGVyU2V0IHx8IFtwcmV2aW91cy50aW1lc3Rh
bXBDb3VudGVyU2V0IGlzRXF1YWw6bmV4dC50aW1lc3RhbXBDb3VudGVyU2V0XSk7CisgICAgQVNT
RVJUKCFwcmV2aW91cy5zdGF0aXN0aWNDb3VudGVyU2V0IHx8IFtwcmV2aW91cy5zdGF0aXN0aWND
b3VudGVyU2V0IGlzRXF1YWw6bmV4dC5zdGF0aXN0aWNDb3VudGVyU2V0XSk7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgcHJldmlvdXMuYXJndW1lbnRCdWZmZXJzVGllciwKKyAgICAgICAgcHJldmlv
dXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgfHwgbmV4dC5zdXBwb3J0
c05vblByaXZhdGVEZXB0aFN0ZW5jaWxUZXh0dXJlcywKKyAgICAgICAgcHJldmlvdXMudGltZXN0
YW1wQ291bnRlclNldCwKKyAgICAgICAgcHJldmlvdXMuc3RhdGlzdGljQ291bnRlclNldCwKKyAg
ICB9OworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxIYXJkd2FyZUNhcGFiaWxpdGllcz4gcmF3
SGFyZHdhcmVDYXBhYmlsaXRpZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgc3RkOjpv
cHRpb25hbDxIYXJkd2FyZUNhcGFiaWxpdGllcz4gcmVzdWx0OworCisgICAgYXV0byBtZXJnZSA9
IFsmXShjb25zdCBIYXJkd2FyZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKSB7CisgICAgICAg
IGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBjYXBhYmlsaXRpZXM7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQtPmxpbWl0cyA9IG1l
cmdlTGltaXRzKHJlc3VsdC0+bGltaXRzLCBjYXBhYmlsaXRpZXMubGltaXRzKTsKKyAgICAgICAg
cmVzdWx0LT5mZWF0dXJlcyA9IG1lcmdlRmVhdHVyZXMocmVzdWx0LT5mZWF0dXJlcywgY2FwYWJp
bGl0aWVzLmZlYXR1cmVzKTsKKyAgICAgICAgcmVzdWx0LT5iYXNlQ2FwYWJpbGl0aWVzID0gbWVy
Z2VCYXNlQ2FwYWJpbGl0aWVzKHJlc3VsdC0+YmFzZUNhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVz
LmJhc2VDYXBhYmlsaXRpZXMpOworICAgIH07CisKKyAgICAvLyBUaGUgZmVhdHVyZSBzZXQgdGFi
bGVzIGRvIG5vdCBsaXN0IGxpbWl0cyBmb3IgTVRMR1BVRmFtaWx5Q29tbW9uMSwgTVRMR1BVRmFt
aWx5Q29tbW9uMiwgb3IgTVRMR1BVRmFtaWx5Q29tbW9uMy4KKyAgICAvLyBNVExHUFVGYW1pbHlB
cHBsZTEgYW5kIE1UTEdQVUZhbWlseUFwcGxlMiBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICBpZiAo
W2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNdKQorICAgICAgICBtZXJn
ZShhcHBsZTMoZGV2aWNlKSk7CisgICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BV
RmFtaWx5QXBwbGU0XSkKKyAgICAgICAgbWVyZ2UoYXBwbGU0KGRldmljZSkpOworICAgIGlmIChb
ZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlNV0pCisgICAgICAgIG1lcmdl
KGFwcGxlNShkZXZpY2UpKTsKKyNpZiAhUExBVEZPUk0oV0FUQ0hPUykKKyAgICBpZiAoW2Rldmlj
ZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTZdKQorICAgICAgICBtZXJnZShhcHBs
ZTYoZGV2aWNlKSk7CisgICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5
QXBwbGU3XSkKKyAgICAgICAgbWVyZ2UoYXBwbGU3KGRldmljZSkpOworI2VuZGlmCisgICAgLy8g
TVRMR1BVRmFtaWx5TWFjMSBpcyBub3Qgc3VwcG9ydGVkICh5ZXQ/KS4KKyAgICBpZiAoW2Rldmlj
ZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlNYWMyXSkKKyAgICAgICAgbWVyZ2UobWFjMihk
ZXZpY2UpKTsKKworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgYXV0byBtYXhCdWZmZXJMZW5n
dGggPSBkZXZpY2UubWF4QnVmZmVyTGVuZ3RoOworICAgICAgICByZXN1bHQtPmxpbWl0cy5tYXhV
bmlmb3JtQnVmZmVyQmluZGluZ1NpemUgPSBtYXhCdWZmZXJMZW5ndGg7CisgICAgICAgIHJlc3Vs
dC0+bGltaXRzLm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSA9IG1heEJ1ZmZlckxlbmd0aDsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGFueUxpbWl0SXNCZXR0ZXJU
aGFuKGNvbnN0IFdHUFVMaW1pdHMmIHRhcmdldCwgY29uc3QgV0dQVUxpbWl0cyYgcmVmZXJlbmNl
KQoreworICAgIGlmICh0YXJnZXQubWF4VGV4dHVyZURpbWVuc2lvbjFEID4gcmVmZXJlbmNlLm1h
eFRleHR1cmVEaW1lbnNpb24xRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdl
dC5tYXhUZXh0dXJlRGltZW5zaW9uMkQgPiByZWZlcmVuY2UubWF4VGV4dHVyZURpbWVuc2lvbjJE
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heFRleHR1cmVEaW1lbnNp
b24zRCA+IHJlZmVyZW5jZS5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmICh0YXJnZXQubWF4VGV4dHVyZUFycmF5TGF5ZXJzID4gcmVmZXJlbmNlLm1h
eFRleHR1cmVBcnJheUxheWVycykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdl
dC5tYXhCaW5kR3JvdXBzID4gcmVmZXJlbmNlLm1heEJpbmRHcm91cHMpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmICh0YXJnZXQubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxp
bmVMYXlvdXQgPiByZWZlcmVuY2UubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVM
YXlvdXQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4RHluYW1pY1N0
b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgPiByZWZlcmVuY2UubWF4RHluYW1pY1N0b3Jh
Z2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
ICh0YXJnZXQubWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4
U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmICh0YXJnZXQubWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTYW1w
bGVyc1BlclNoYWRlclN0YWdlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0
Lm1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1
ZmZlcnNQZXJTaGFkZXJTdGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdl
dC5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTdG9yYWdl
VGV4dHVyZXNQZXJTaGFkZXJTdGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRh
cmdldC5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlID4gcmVmZXJlbmNlLm1heFVuaWZv
cm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0
YXJnZXQubWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplID4gcmVmZXJlbmNlLm1heFVuaWZvcm1C
dWZmZXJCaW5kaW5nU2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5t
YXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1ZmZlckJp
bmRpbmdTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1pblVuaWZv
cm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgPCByZWZlcmVuY2UubWluVW5pZm9ybUJ1ZmZlck9mZnNl
dEFsaWdubWVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5taW5TdG9y
YWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50IDwgcmVmZXJlbmNlLm1pblN0b3JhZ2VCdWZmZXJPZmZz
ZXRBbGlnbm1lbnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4VmVy
dGV4QnVmZmVycyA+IHJlZmVyZW5jZS5tYXhWZXJ0ZXhCdWZmZXJzKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heFZlcnRleEF0dHJpYnV0ZXMgPiByZWZlcmVuY2UubWF4
VmVydGV4QXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5t
YXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSA+IHJlZmVyZW5jZS5tYXhWZXJ0ZXhCdWZmZXJBcnJh
eVN0cmlkZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhJbnRlclN0
YWdlU2hhZGVyQ29tcG9uZW50cyA+IHJlZmVyZW5jZS5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9u
ZW50cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29y
a2dyb3VwU3RvcmFnZVNpemUgPiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VT
aXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVJbnZv
Y2F0aW9uc1Blcldvcmtncm91cCA+IHJlZmVyZW5jZS5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJX
b3JrZ3JvdXApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4Q29tcHV0
ZVdvcmtncm91cFNpemVYID4gcmVmZXJlbmNlLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU2l6
ZVkgPiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFNpemVZKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiA+IHJlZmVyZW5j
ZS5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVopCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
ICh0YXJnZXQubWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gPiByZWZlcmVuY2UubWF4
Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24pCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGluY2x1ZGVzVW5zdXBwb3J0ZWRGZWF0dXJlcyhj
b25zdCBWZWN0b3I8V0dQVUZlYXR1cmVOYW1lPiYgdGFyZ2V0LCBjb25zdCBWZWN0b3I8V0dQVUZl
YXR1cmVOYW1lPiYgcmVmZXJlbmNlKQoreworICAgIGZvciAoYXV0byBmZWF0dXJlIDogdGFyZ2V0
KSB7CisgICAgICAgIGlmICghcmVmZXJlbmNlLmNvbnRhaW5zKGZlYXR1cmUpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworV0dQVUxpbWl0
cyBkZWZhdWx0TGltaXRzKCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1
d2ViLyNsaW1pdC1kZWZhdWx0CisKKyAgICByZXR1cm4geworICAgICAgICAvKiBtYXhUZXh0dXJl
RGltZW5zaW9uMUQgKi8gICAgODE5MiwKKyAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJE
ICovICAgIDgxOTIsCisgICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4
LAorICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjU2LAorICAgICAgICAv
KiBtYXhCaW5kR3JvdXBzICovICAgIDQsCisgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVm
ZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIDgsCisgICAgICAgIC8qIG1heER5bmFtaWNTdG9y
YWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIDQsCisgICAgICAgIC8qIG1heFNhbXBs
ZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIDE2LAorICAgICAgICAvKiBtYXhTYW1wbGVy
c1BlclNoYWRlclN0YWdlICovICAgIDE2LAorICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyc1Bl
clNoYWRlclN0YWdlICovICAgIDgsCisgICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0dXJlc1BlclNo
YWRlclN0YWdlICovICAgIDQsCisgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVy
U3RhZ2UgKi8gICAgMTIsCisgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAq
LyAgICA2NTUzNiwKKyAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAg
IDEzNDIxNzcyOCwKKyAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAq
LyAgICAyNTYsCisgICAgICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8g
ICAgMjU2LAorICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJzICovICAgIDgsCisgICAgICAgIC8q
IG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMTYsCisgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZl
ckFycmF5U3RyaWRlICovICAgIDIwNDgsCisgICAgICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJD
b21wb25lbnRzICovICAgIDMyLAorICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFn
ZVNpemUgKi8gICAgMTYzNTIsCisgICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldv
cmtncm91cCAqLyAgICAyNTYsCisgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAq
LyAgICAyNTYsCisgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAyNTYs
CisgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICA2NCwKKyAgICAgICAg
LyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gKi8gICAgNjU1MzUsCisgICAgfTsK
K30KKworc3RkOjpvcHRpb25hbDxIYXJkd2FyZUNhcGFiaWxpdGllcz4gaGFyZHdhcmVDYXBhYmls
aXRpZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgYXV0byByZXN1bHQgPSByYXdIYXJk
d2FyZUNhcGFiaWxpdGllcyhkZXZpY2UpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoYW55TGltaXRJc0JldHRlclRoYW4oZGVmYXVs
dExpbWl0cygpLCByZXN1bHQtPmxpbWl0cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGlzVmFsaWQoY29uc3QgV0dQVUxpbWl0
cyYgbGltaXRzKQoreworICAgIHJldHVybiBpc1Bvd2VyT2ZUd28obGltaXRzLm1pblVuaWZvcm1C
dWZmZXJPZmZzZXRBbGlnbm1lbnQpICYmIGlzUG93ZXJPZlR3byhsaW1pdHMubWluU3RvcmFnZUJ1
ZmZlck9mZnNldEFsaWdubWVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVMaW1pdHMuaCBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0hhcmR3YXJlTGltaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDBkMjUzZTc4ZjY0NzhkYmFmZDA0OWViY2E0NzhmM2FkNGRkZjUzZWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvSGFy
ZHdhcmVMaW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8b3B0aW9uYWw+Ci0KLW5hbWVzcGFjZSBXZWJHUFUgewotCi1zdGQ6Om9wdGlvbmFs
PFdHUFVMaW1pdHM+IGxpbWl0cyhpZDxNVExEZXZpY2U+KTsKLWJvb2wgaXNWYWxpZChjb25zdCBX
R1BVTGltaXRzJik7Ci1ib29sIGFueUxpbWl0SXNCZXR0ZXJUaGFuKGNvbnN0IFdHUFVMaW1pdHMm
IHRhcmdldCwgY29uc3QgV0dQVUxpbWl0cyYgcmVmZXJlbmNlKTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9IYXJkd2FyZUxpbWl0cy5t
bSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlTGltaXRzLm1tCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2ZTIxYjI1YjJjN2E3ZjU2OTc5NDVhNTdlZGFmMjRiNzViNGFiYmE5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL0hhcmR3YXJlTGltaXRzLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDQ5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkhhcmR3YXJlTGltaXRzLmgiCi0KLSNpbXBvcnQgPGFs
Z29yaXRobT4KLSNpbXBvcnQgPGxpbWl0cz4KLSNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW1wb3J0IDx3dGYvUGFnZUJsb2NrLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0K
LW5hbWVzcGFjZSBXZWJHUFUgewotCi0vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbWV0
YWwvTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVzLnBkZgotCi0vLyBGSVhNRTogaHR0cHM6Ly9naXRo
dWIuY29tL2dwdXdlYi9ncHV3ZWIvaXNzdWVzLzI3NDkgd2UgbmVlZCBtb3JlIGxpbWl0cy4KLQot
Y29uc3RleHByIHN0YXRpYyBXR1BVTGltaXRzIGFwcGxlMygpCi17Ci0gICAgdWludDMyX3QgbWF4
QmluZEdyb3VwcyA9IDMwOwotCi0gICAgcmV0dXJuIFdHUFVMaW1pdHMgewotICAgICAgICAvKiBt
YXhUZXh0dXJlRGltZW5zaW9uMUQgKi8gICAgMTYzODQsCi0gICAgICAgIC8qIG1heFRleHR1cmVE
aW1lbnNpb24yRCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNE
ICovICAgIDIwNDgsCi0gICAgICAgIC8qIG1heFRleHR1cmVBcnJheUxheWVycyAqLyAgICAyMDQ4
LAotICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIG1heEJpbmRHcm91cHMsCi0gICAgICAg
IC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4RHluYW1pY1N0
b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJT
dGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogMzEsCi0gICAgICAgIC8qIG1heFNhbXBsZXJzUGVy
U2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDE2LAotICAgICAgICAvKiBtYXhTdG9y
YWdlQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAzMSwKLSAgICAg
ICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3Vw
cyAqIDMxLAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAg
IG1heEJpbmRHcm91cHMgKiAzMSwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdT
aXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAgICAgICAv
KiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGlu
IGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1l
bnQgKi8gICAgNCwKLSAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAq
LyAgICA0LAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJzICovICAgIDMwLAotICAgICAgICAv
KiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZm
ZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCks
Ci0gICAgICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzICovICAgIDYwLAotICAg
ICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMTYgKiBLQiwKLSAg
ICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDUxMiwKLSAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAgIDUxMiwKLSAgICAgICAgLyog
bWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDUxMiwKLSAgICAgICAgLyogbWF4Q29tcHV0
ZVdvcmtncm91cFNpemVaICovICAgIDUxMiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91
cHNQZXJEaW1lbnNpb24gKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
LAotICAgIH07Ci19Ci0KLWNvbnN0ZXhwciBzdGF0aWMgV0dQVUxpbWl0cyBhcHBsZTQoKQotewot
ICAgIHVpbnQzMl90IG1heEJpbmRHcm91cHMgPSAzMDsKLQotICAgIHJldHVybiBXR1BVTGltaXRz
IHsKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAotICAgICAg
ICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYzODQsCi0gICAgICAgIC8qIG1heFRl
eHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlM
YXllcnMgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4QmluZEdyb3VwcyAqLyAgICBtYXhCaW5k
R3JvdXBzLAotICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBlbGluZUxh
eW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAgICAg
IC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4U2FtcGxlZFRl
eHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDk2LAotICAgICAgICAv
KiBtYXhTYW1wbGVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAxNiwKLSAg
ICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3Jv
dXBzICogOTYsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0YWdlICov
ICAgIG1heEJpbmRHcm91cHMgKiA5NiwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlcnNQZXJT
aGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCi0gICAgICAgIC8qIG1heFVuaWZv
cm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNh
bGxlci4KLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8v
IFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAgICAgICAvKiBtaW5Vbmlmb3JtQnVm
ZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCi0gICAgICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAg
ICAzMCwKLSAgICAgICAgLyogbWF4VmVydGV4QXR0cmlidXRlcyAqLyAgICAzMSwKLSAgICAgICAg
LyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50
cyAqLyAgICAxMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAq
LyAgICAzMiAqIEtCLAotICAgICAgICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3Jv
dXAgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAg
IDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAot
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogKi8gICAgMTAyNCwKLSAgICAgICAg
LyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gKi8gICAgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpLAotICAgIH07Ci19Ci0KLWNvbnN0ZXhwciBzdGF0aWMgV0dQ
VUxpbWl0cyBhcHBsZTUoKQotewotICAgIHVpbnQzMl90IG1heEJpbmRHcm91cHMgPSAzMDsKLQot
ICAgIHJldHVybiBXR1BVTGltaXRzIHsKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFE
ICovICAgIDE2Mzg0LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYz
ODQsCi0gICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4LAotICAgICAg
ICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4Qmlu
ZEdyb3VwcyAqLyAgICBtYXhCaW5kR3JvdXBzLAotICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9y
bUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVs
aW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAg
ICAgICAgLyogbWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdy
b3VwcyAqIDk2LAotICAgICAgICAvKiBtYXhTYW1wbGVyc1BlclNoYWRlclN0YWdlICovICAgIG1h
eEJpbmRHcm91cHMgKiAxNiwKLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJT
dGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0
dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKLSAgICAgICAgLyog
bWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYs
Ci0gICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBi
ZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJp
bmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAg
ICAgICAvKiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCi0gICAgICAg
IC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKLSAgICAgICAgLyog
bWF4VmVydGV4QnVmZmVycyAqLyAgICAzMCwKLSAgICAgICAgLyogbWF4VmVydGV4QXR0cmlidXRl
cyAqLyAgICAzMSwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAg
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhJbnRl
clN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAxMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVX
b3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtCLAotICAgICAgICAvKiBtYXhDb21wdXRl
SW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0
ZVdvcmtncm91cFNpemVYICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3Jv
dXBTaXplWSAqLyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVog
Ki8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24g
Ki8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgIH07Ci19Ci0K
LSNpZiAhUExBVEZPUk0oV0FUQ0hPUykKLWNvbnN0ZXhwciBzdGF0aWMgV0dQVUxpbWl0cyBhcHBs
ZTYoKQotewotICAgIHVpbnQzMl90IG1heEJpbmRHcm91cHMgPSAzMDsKLQotICAgIHJldHVybiBX
R1BVTGltaXRzIHsKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0
LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYzODQsCi0gICAgICAg
IC8qIG1heFRleHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhUZXh0
dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4QmluZEdyb3VwcyAqLyAg
ICBtYXhCaW5kR3JvdXBzLAotICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQ
aXBlbGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCks
Ci0gICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICov
ICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4
U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAw
MCAvIDIsCi0gICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4Qmlu
ZEdyb3VwcyAqIDEwMjQsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3Rh
Z2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCi0gICAgICAgIC8qIG1heFN0b3Jh
Z2VUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAy
LAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJp
bmRHcm91cHMgKiA1MDAwMDAgLyAyLAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmluZGlu
Z1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAg
IC8qIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQg
aW4gYnkgdGhlIGNhbGxlci4KLSAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdu
bWVudCAqLyAgICA0LAotICAgICAgICAvKiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50
ICovICAgIDQsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCi0gICAgICAg
IC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1
ZmZlckFycmF5U3RyaWRlICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwKLSAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0LAot
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIgKiBLQiwK
LSAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQs
Ci0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAotICAgICAg
ICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4
Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVX
b3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwKLSAgICB9OwotfQotCi1jb25zdGV4cHIgc3RhdGljIFdHUFVMaW1pdHMgYXBwbGU3
KCkKLXsKLSAgICB1aW50MzJfdCBtYXhCaW5kR3JvdXBzID0gMzA7Ci0KLSAgICByZXR1cm4gV0dQ
VUxpbWl0cyB7Ci0gICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24xRCAqLyAgICAxNjM4NCwK
LSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAotICAgICAgICAv
KiBtYXhUZXh0dXJlRGltZW5zaW9uM0QgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4VGV4dHVy
ZUFycmF5TGF5ZXJzICovICAgIDIwNDgsCi0gICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAg
bWF4QmluZEdyb3VwcywKLSAgICAgICAgLyogbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlw
ZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAot
ICAgICAgICAvKiBtYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAg
ICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heFNh
bXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAg
LyAyLAotICAgICAgICAvKiBtYXhTYW1wbGVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRH
cm91cHMgKiAxMDI0LAotICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdl
ICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAotICAgICAgICAvKiBtYXhTdG9yYWdl
VGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogNTAwMDAwIC8gMiwK
LSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5k
R3JvdXBzICogNTAwMDAwIC8gMiwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdT
aXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAgICAgICAv
KiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGlu
IGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1l
bnQgKi8gICAgNCwKLSAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAq
LyAgICA0LAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJzICovICAgIDMwLAotICAgICAgICAv
KiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZm
ZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCks
Ci0gICAgICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzICovICAgIDEyNCwKLSAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplICovICAgIDMyICogS0IsCi0g
ICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCAqLyAgICAxMDI0LAot
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAyNCwKLSAgICAgICAg
LyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENv
bXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29y
a2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksCi0gICAgfTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgV0dQVUxpbWl0cyBtYWMyKGlkPE1U
TERldmljZT4gZGV2aWNlKQotewotICAgIHVpbnQzMl90IGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSAw
OwotICAgIHVpbnQzMl90IHRleHR1cmVzUGVyQmluZEdyb3VwID0gMDsKLSAgICB1aW50MzJfdCBz
YW1wbGVyc1BlckJpbmRHcm91cCA9IDA7Ci0gICAgc3dpdGNoIChbZGV2aWNlIGFyZ3VtZW50QnVm
ZmVyc1N1cHBvcnRdKSB7Ci0gICAgY2FzZSBNVExBcmd1bWVudEJ1ZmZlcnNUaWVyMToKLSAgICAg
ICAgYnVmZmVyc1BlckJpbmRHcm91cCA9IDY0OwotICAgICAgICB0ZXh0dXJlc1BlckJpbmRHcm91
cCA9IDEyODsKLSAgICAgICAgc2FtcGxlcnNQZXJCaW5kR3JvdXAgPSAxNjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBNVExBcmd1bWVudEJ1ZmZlcnNUaWVyMjoKLSAgICAgICAgYnVmZmVyc1Bl
ckJpbmRHcm91cCA9IDUwMDAwMCAvIDI7Ci0gICAgICAgIHRleHR1cmVzUGVyQmluZEdyb3VwID0g
NTAwMDAwIC8gMjsKLSAgICAgICAgc2FtcGxlcnNQZXJCaW5kR3JvdXAgPSAxMDI0OwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBtYXhCaW5kR3JvdXBzID0gMzA7Ci0KLSAg
ICByZXR1cm4gV0dQVUxpbWl0cyB7Ci0gICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24xRCAq
LyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2Mzg0
LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uM0QgKi8gICAgMjA0OCwKLSAgICAgICAg
LyogbWF4VGV4dHVyZUFycmF5TGF5ZXJzICovICAgIDIwNDgsCi0gICAgICAgIC8qIG1heEJpbmRH
cm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKLSAgICAgICAgLyogbWF4RHluYW1pY1VuaWZvcm1C
dWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpLAotICAgICAgICAvKiBtYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGlu
ZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAg
ICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91
cHMgKiB0ZXh0dXJlc1BlckJpbmRHcm91cCwKLSAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFk
ZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogc2FtcGxlcnNQZXJCaW5kR3JvdXAsCi0gICAg
ICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3Vw
cyAqIGJ1ZmZlcnNQZXJCaW5kR3JvdXAsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0dXJlc1Bl
clNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiB0ZXh0dXJlc1BlckJpbmRHcm91cCwK
LSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5k
R3JvdXBzICogYnVmZmVyc1BlckJpbmRHcm91cCwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZl
ckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgot
ICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUg
ZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJPZmZz
ZXRBbGlnbm1lbnQgKi8gICAgMjU2LAotICAgICAgICAvKiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0
QWxpZ25tZW50ICovICAgIDI1NiwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICAz
MCwKLSAgICAgICAgLyogbWF4VmVydGV4QXR0cmlidXRlcyAqLyAgICAzMSwKLSAgICAgICAgLyog
bWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAq
LyAgICAzMiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplICovICAg
IDMyICogS0IsCi0gICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCAq
LyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAy
NCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDEwMjQsCi0gICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICAxMDI0LAotICAgICAgICAvKiBt
YXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCksCi0gICAgfTsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQ
VUxpbWl0cz4gcmF3TGltaXRzKGlkPE1UTERldmljZT4gZGV2aWNlKQotewotICAgIHN0ZDo6b3B0
aW9uYWw8V0dQVUxpbWl0cz4gcmVzdWx0OwotCi0gICAgYXV0byBtZXJnZSA9IFsmXShjb25zdCBX
R1BVTGltaXRzJiBsaW1pdHMpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAg
IHJlc3VsdCA9IGxpbWl0czsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2xpbWl0LWNsYXNzLW1heGlt
dW0KLSAgICAgICAgYXV0byBtZXJnZU1heGltdW0gPSBbXShhdXRvIHByZXZpb3VzLCBhdXRvIG5l
eHQpIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heChwcmV2aW91cywgbmV4dCk7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jbGlt
aXQtY2xhc3MtYWxpZ25tZW50Ci0gICAgICAgIGF1dG8gbWVyZ2VBbGlnbm1lbnQgPSBbXShhdXRv
IHByZXZpb3VzLCBhdXRvIG5leHQpIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbihXVEY6
OnJvdW5kVXBUb1Bvd2VyT2ZUd28ocHJldmlvdXMpLCBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28o
bmV4dCkpOwotICAgICAgICB9OwotCi0gICAgICAgIHJlc3VsdC0+bWF4VGV4dHVyZURpbWVuc2lv
bjFEID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4VGV4dHVyZURpbWVuc2lvbjFELCBsaW1pdHMu
bWF4VGV4dHVyZURpbWVuc2lvbjFEKTsKLSAgICAgICAgcmVzdWx0LT5tYXhUZXh0dXJlRGltZW5z
aW9uMkQgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhUZXh0dXJlRGltZW5zaW9uMkQsIGxpbWl0
cy5tYXhUZXh0dXJlRGltZW5zaW9uMkQpOwotICAgICAgICByZXN1bHQtPm1heFRleHR1cmVEaW1l
bnNpb24zRCA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFRleHR1cmVEaW1lbnNpb24zRCwgbGlt
aXRzLm1heFRleHR1cmVEaW1lbnNpb24zRCk7Ci0gICAgICAgIHJlc3VsdC0+bWF4VGV4dHVyZUFy
cmF5TGF5ZXJzID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4VGV4dHVyZUFycmF5TGF5ZXJzLCBs
aW1pdHMubWF4VGV4dHVyZUFycmF5TGF5ZXJzKTsKLSAgICAgICAgcmVzdWx0LT5tYXhCaW5kR3Jv
dXBzID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4QmluZEdyb3VwcywgbGltaXRzLm1heEJpbmRH
cm91cHMpOwotICAgICAgICByZXN1bHQtPm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVs
aW5lTGF5b3V0ID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4RHluYW1pY1VuaWZvcm1CdWZmZXJz
UGVyUGlwZWxpbmVMYXlvdXQsIGxpbWl0cy5tYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBl
bGluZUxheW91dCk7Ci0gICAgICAgIHJlc3VsdC0+bWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVy
UGlwZWxpbmVMYXlvdXQgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhEeW5hbWljU3RvcmFnZUJ1
ZmZlcnNQZXJQaXBlbGluZUxheW91dCwgbGltaXRzLm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1Bl
clBpcGVsaW5lTGF5b3V0KTsKLSAgICAgICAgcmVzdWx0LT5tYXhTYW1wbGVkVGV4dHVyZXNQZXJT
aGFkZXJTdGFnZSA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFNhbXBsZWRUZXh0dXJlc1BlclNo
YWRlclN0YWdlLCBsaW1pdHMubWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UpOwotICAg
ICAgICByZXN1bHQtPm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgPSBtZXJnZU1heGltdW0ocmVz
dWx0LT5tYXhTYW1wbGVyc1BlclNoYWRlclN0YWdlLCBsaW1pdHMubWF4U2FtcGxlcnNQZXJTaGFk
ZXJTdGFnZSk7Ci0gICAgICAgIHJlc3VsdC0+bWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFn
ZSA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2Us
IGxpbWl0cy5tYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlKTsKLSAgICAgICAgcmVzdWx0
LT5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSA9IG1lcmdlTWF4aW11bShyZXN1bHQt
Pm1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0YWdlLCBsaW1pdHMubWF4U3RvcmFnZVRleHR1
cmVzUGVyU2hhZGVyU3RhZ2UpOwotICAgICAgICByZXN1bHQtPm1heFVuaWZvcm1CdWZmZXJzUGVy
U2hhZGVyU3RhZ2UgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhVbmlmb3JtQnVmZmVyc1BlclNo
YWRlclN0YWdlLCBsaW1pdHMubWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSk7Ci0gICAg
ICAgIHJlc3VsdC0+bWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplID0gbWVyZ2VNYXhpbXVtKHJl
c3VsdC0+bWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplLCBsaW1pdHMubWF4VW5pZm9ybUJ1ZmZl
ckJpbmRpbmdTaXplKTsKLSAgICAgICAgcmVzdWx0LT5tYXhTdG9yYWdlQnVmZmVyQmluZGluZ1Np
emUgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUsIGxp
bWl0cy5tYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUpOwotICAgICAgICByZXN1bHQtPm1pblVu
aWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgPSBtZXJnZUFsaWdubWVudChyZXN1bHQtPm1pblVu
aWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQsIGxpbWl0cy5taW5Vbmlmb3JtQnVmZmVyT2Zmc2V0
QWxpZ25tZW50KTsKLSAgICAgICAgcmVzdWx0LT5taW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25t
ZW50ID0gbWVyZ2VBbGlnbm1lbnQocmVzdWx0LT5taW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25t
ZW50LCBsaW1pdHMubWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCk7Ci0gICAgICAgIHJl
c3VsdC0+bWF4VmVydGV4QnVmZmVycyA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFZlcnRleEJ1
ZmZlcnMsIGxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJzKTsKLSAgICAgICAgcmVzdWx0LT5tYXhWZXJ0
ZXhBdHRyaWJ1dGVzID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4VmVydGV4QXR0cmlidXRlcywg
bGltaXRzLm1heFZlcnRleEF0dHJpYnV0ZXMpOwotICAgICAgICByZXN1bHQtPm1heFZlcnRleEJ1
ZmZlckFycmF5U3RyaWRlID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4VmVydGV4QnVmZmVyQXJy
YXlTdHJpZGUsIGxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSk7Ci0gICAgICAgIHJl
c3VsdC0+bWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgPSBtZXJnZU1heGltdW0ocmVzdWx0
LT5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cywgbGltaXRzLm1heEludGVyU3RhZ2VTaGFk
ZXJDb21wb25lbnRzKTsKLSAgICAgICAgcmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFn
ZVNpemUgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNp
emUsIGxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUpOwotICAgICAgICByZXN1
bHQtPm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCA9IG1lcmdlTWF4aW11bShyZXN1
bHQtPm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCwgbGltaXRzLm1heENvbXB1dGVJ
bnZvY2F0aW9uc1Blcldvcmtncm91cCk7Ci0gICAgICAgIHJlc3VsdC0+bWF4Q29tcHV0ZVdvcmtn
cm91cFNpemVYID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4Q29tcHV0ZVdvcmtncm91cFNpemVY
LCBsaW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYKTsKLSAgICAgICAgcmVzdWx0LT5tYXhD
b21wdXRlV29ya2dyb3VwU2l6ZVkgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhDb21wdXRlV29y
a2dyb3VwU2l6ZVksIGxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkpOwotICAgICAgICBy
ZXN1bHQtPm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1h
eENvbXB1dGVXb3JrZ3JvdXBTaXplWiwgbGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWik7
Ci0gICAgICAgIHJlc3VsdC0+bWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gPSBtZXJn
ZU1heGltdW0ocmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiwgbGltaXRz
Lm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uKTsKLSAgICB9OwotCi0gICAgLy8gVGhl
IGZlYXR1cmUgc2V0IHRhYmxlcyBkbyBub3QgbGlzdCBsaW1pdHMgZm9yIE1UTEdQVUZhbWlseUNv
bW1vbjEsIE1UTEdQVUZhbWlseUNvbW1vbjIsIG9yIE1UTEdQVUZhbWlseUNvbW1vbjMuCi0gICAg
Ly8gTVRMR1BVRmFtaWx5QXBwbGUxIGFuZCBNVExHUFVGYW1pbHlBcHBsZTIgYXJlIG5vdCBzdXBw
b3J0ZWQuCi0gICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBwbGUz
XSkKLSAgICAgICAgbWVyZ2UoYXBwbGUzKCkpOwotICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFt
aWx5Ok1UTEdQVUZhbWlseUFwcGxlNF0pCi0gICAgICAgIG1lcmdlKGFwcGxlNCgpKTsKLSAgICBp
ZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTVdKQotICAgICAgICBt
ZXJnZShhcHBsZTUoKSk7Ci0jaWYgIVBMQVRGT1JNKFdBVENIT1MpCi0gICAgaWYgKFtkZXZpY2Ug
c3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBwbGU2XSkKLSAgICAgICAgbWVyZ2UoYXBwbGU2
KCkpOwotICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlN10p
Ci0gICAgICAgIG1lcmdlKGFwcGxlNygpKTsKLSNlbmRpZgotICAgIC8vIE1UTEdQVUZhbWlseU1h
YzEgaXMgbm90IHN1cHBvcnRlZCAoeWV0PykuCi0gICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1p
bHk6TVRMR1BVRmFtaWx5TWFjMl0pCi0gICAgICAgIG1lcmdlKG1hYzIoZGV2aWNlKSk7Ci0KLSAg
ICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gbWF4QnVmZmVyTGVuZ3RoID0gZGV2aWNlLm1h
eEJ1ZmZlckxlbmd0aDsKLSAgICAgICAgcmVzdWx0LT5tYXhVbmlmb3JtQnVmZmVyQmluZGluZ1Np
emUgPSBtYXhCdWZmZXJMZW5ndGg7Ci0gICAgICAgIHJlc3VsdC0+bWF4U3RvcmFnZUJ1ZmZlckJp
bmRpbmdTaXplID0gbWF4QnVmZmVyTGVuZ3RoOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0YXRpYyBib29sIGNoZWNrTGltaXRzKGNvbnN0IFdHUFVMaW1pdHMmIGxpbWl0cykK
LXsKLSAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNsaW1pdC1kZWZhdWx0
Ci0gICAgYXV0byBkZWZhdWx0TGltaXRzID0gV0dQVUxpbWl0cyB7Ci0gICAgICAgIC8qIG1heFRl
eHR1cmVEaW1lbnNpb24xRCAqLyAgICA4MTkyLAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5z
aW9uMkQgKi8gICAgODE5MiwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAg
IDIwNDgsCi0gICAgICAgIC8qIG1heFRleHR1cmVBcnJheUxheWVycyAqLyAgICAyNTYsCi0gICAg
ICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgNCwKLSAgICAgICAgLyogbWF4RHluYW1pY1VuaWZv
cm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgOCwKLSAgICAgICAgLyogbWF4RHluYW1p
Y1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgNCwKLSAgICAgICAgLyogbWF4
U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgMTYsCi0gICAgICAgIC8qIG1heFNh
bXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgMTYsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VCdWZm
ZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgOCwKLSAgICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVz
UGVyU2hhZGVyU3RhZ2UgKi8gICAgNCwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlcnNQZXJT
aGFkZXJTdGFnZSAqLyAgICAxMiwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdT
aXplICovICAgIDY1NTM2LAotICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUg
Ki8gICAgMTM0MjE3NzI4LAotICAgICAgICAvKiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25t
ZW50ICovICAgIDI1NiwKLSAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVu
dCAqLyAgICAyNTYsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgOCwKLSAgICAg
ICAgLyogbWF4VmVydGV4QXR0cmlidXRlcyAqLyAgICAxNiwKLSAgICAgICAgLyogbWF4VmVydGV4
QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNo
YWRlckNvbXBvbmVudHMgKi8gICAgMzIsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBT
dG9yYWdlU2l6ZSAqLyAgICAxNjM1MiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25z
UGVyV29ya2dyb3VwICovICAgIDI1NiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNp
emVYICovICAgIDI1NiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAg
IDI1NiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDY0LAotICAg
ICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICA2NTUzNSwKLSAg
ICB9OwotCi0gICAgcmV0dXJuICFhbnlMaW1pdElzQmV0dGVyVGhhbihkZWZhdWx0TGltaXRzLCBs
aW1pdHMpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFdHUFVMaW1pdHM+IGxpbWl0cyhpZDxNVExEZXZp
Y2U+IGRldmljZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IHJhd0xpbWl0cyhkZXZpY2UpOwotCi0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAo
IWNoZWNrTGltaXRzKCpyZXN1bHQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBpc1ZhbGlkKGNvbnN0IFdHUFVMaW1pdHMmIGxp
bWl0cykKLXsKLSAgICByZXR1cm4gaXNQb3dlck9mVHdvKGxpbWl0cy5taW5Vbmlmb3JtQnVmZmVy
T2Zmc2V0QWxpZ25tZW50KSAmJiBpc1Bvd2VyT2ZUd28obGltaXRzLm1pblN0b3JhZ2VCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQpOwotfQotCi1ib29sIGFueUxpbWl0SXNCZXR0ZXJUaGFuKGNvbnN0IFdH
UFVMaW1pdHMmIHRhcmdldCwgY29uc3QgV0dQVUxpbWl0cyYgcmVmZXJlbmNlKQotewotICAgIGlm
ICh0YXJnZXQubWF4VGV4dHVyZURpbWVuc2lvbjFEID4gcmVmZXJlbmNlLm1heFRleHR1cmVEaW1l
bnNpb24xRCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhUZXh0dXJl
RGltZW5zaW9uMkQgPiByZWZlcmVuY2UubWF4VGV4dHVyZURpbWVuc2lvbjJEKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFRleHR1cmVEaW1lbnNpb24zRCA+IHJlZmVy
ZW5jZS5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
ICh0YXJnZXQubWF4VGV4dHVyZUFycmF5TGF5ZXJzID4gcmVmZXJlbmNlLm1heFRleHR1cmVBcnJh
eUxheWVycykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhCaW5kR3Jv
dXBzID4gcmVmZXJlbmNlLm1heEJpbmRHcm91cHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmICh0YXJnZXQubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgPiBy
ZWZlcmVuY2UubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJz
UGVyUGlwZWxpbmVMYXlvdXQgPiByZWZlcmVuY2UubWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVy
UGlwZWxpbmVMYXlvdXQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4
U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4U2FtcGxlZFRleHR1
cmVzUGVyU2hhZGVyU3RhZ2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQu
bWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTYW1wbGVyc1BlclNoYWRl
clN0YWdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFN0b3JhZ2VC
dWZmZXJzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFk
ZXJTdGFnZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhTdG9yYWdl
VGV4dHVyZXNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTdG9yYWdlVGV4dHVyZXNQZXJT
aGFkZXJTdGFnZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhVbmlm
b3JtQnVmZmVyc1BlclNoYWRlclN0YWdlID4gcmVmZXJlbmNlLm1heFVuaWZvcm1CdWZmZXJzUGVy
U2hhZGVyU3RhZ2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4VW5p
Zm9ybUJ1ZmZlckJpbmRpbmdTaXplID4gcmVmZXJlbmNlLm1heFVuaWZvcm1CdWZmZXJCaW5kaW5n
U2l6ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhTdG9yYWdlQnVm
ZmVyQmluZGluZ1NpemUgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1pblVuaWZvcm1CdWZmZXJPZmZz
ZXRBbGlnbm1lbnQgPCByZWZlcmVuY2UubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5taW5TdG9yYWdlQnVmZmVyT2Zm
c2V0QWxpZ25tZW50IDwgcmVmZXJlbmNlLm1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4VmVydGV4QnVmZmVycyA+
IHJlZmVyZW5jZS5tYXhWZXJ0ZXhCdWZmZXJzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAodGFyZ2V0Lm1heFZlcnRleEF0dHJpYnV0ZXMgPiByZWZlcmVuY2UubWF4VmVydGV4QXR0cmli
dXRlcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhWZXJ0ZXhCdWZm
ZXJBcnJheVN0cmlkZSA+IHJlZmVyZW5jZS5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhJbnRlclN0YWdlU2hhZGVyQ29t
cG9uZW50cyA+IHJlZmVyZW5jZS5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cykKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFn
ZVNpemUgPiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldv
cmtncm91cCA+IHJlZmVyZW5jZS5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXApCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4Q29tcHV0ZVdvcmtncm91cFNp
emVYID4gcmVmZXJlbmNlLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgPiByZWZlcmVu
Y2UubWF4Q29tcHV0ZVdvcmtncm91cFNpemVZKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAodGFyZ2V0Lm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiA+IHJlZmVyZW5jZS5tYXhDb21wdXRl
V29ya2dyb3VwU2l6ZVopCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4
Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gPiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtn
cm91cHNQZXJEaW1lbnNpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0luc3RhbmNlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFuY2UubW0K
aW5kZXggYTY1YzkyNjYxYmVhODY3ZjFlMjMwMWJjNWRhYWQyOTUyOGExNzlmYy4uNzg1Y2EwNGMw
YmRhOGM3YjgwNmViNzQ1OTczNjY0ZTViMmRkNGJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvSW5zdGFuY2UubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFuY2Uu
bW0KQEAgLTI4LDcgKzI4LDcgQEAKIAogI2ltcG9ydCAiQVBJQ29udmVyc2lvbnMuaCIKICNpbXBv
cnQgIkFkYXB0ZXIuaCIKLSNpbXBvcnQgIkhhcmR3YXJlTGltaXRzLmgiCisjaW1wb3J0ICJIYXJk
d2FyZUNhcGFiaWxpdGllcy5oIgogI2ltcG9ydCAiU3VyZmFjZS5oIgogI2ltcG9ydCA8Y3N0cmlu
Zz4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpAQCAtMTg2LDE3ICsxODYsMTcgQEAgdm9pZCBJ
bnN0YW5jZTo6cmVxdWVzdEFkYXB0ZXIoY29uc3QgV0dQVVJlcXVlc3RBZGFwdGVyT3B0aW9ucyYg
b3B0aW9ucywgQ29tcGxldGkKIAogICAgIGF1dG8gZGV2aWNlID0gc29ydGVkRGV2aWNlc1swXTsK
IAotICAgIGF1dG8gZGV2aWNlTGltaXRzID0gbGltaXRzKGRldmljZSk7CisgICAgYXV0byBkZXZp
Y2VDYXBhYmlsdGllcyA9IGhhcmR3YXJlQ2FwYWJpbGl0aWVzKGRldmljZSk7CiAKLSAgICBpZiAo
IWRldmljZUxpbWl0cykgeworICAgIGlmICghZGV2aWNlQ2FwYWJpbHRpZXMpIHsKICAgICAgICAg
c2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdHUFVSZXF1
ZXN0QWRhcHRlclN0YXR1c19FcnJvciwgQWRhcHRlcjo6Y3JlYXRlSW52YWxpZChzdHJvbmdUaGlz
KSwgIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFdlYkdQVSJfcyk7CiAgICAgICAgIH0pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVm
IHsgKnRoaXMgfSwgZGV2aWNlID0gc29ydGVkRGV2aWNlc1swXSwgbGltaXRzID0gV1RGTW92ZSgq
ZGV2aWNlTGltaXRzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgY2FsbGJhY2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzX1N1Y2Nlc3MsIEFkYXB0
ZXI6OmNyZWF0ZShkZXZpY2UsIHN0cm9uZ1RoaXMsIFdURk1vdmUobGltaXRzKSksIHsgfSk7Cisg
ICAgc2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgZGV2aWNlID0gc29y
dGVkRGV2aWNlc1swXSwgZGV2aWNlQ2FwYWJpbHRpZXMgPSBXVEZNb3ZlKCpkZXZpY2VDYXBhYmls
dGllcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAg
IGNhbGxiYWNrKFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1c19TdWNjZXNzLCBBZGFwdGVyOjpjcmVh
dGUoZGV2aWNlLCBzdHJvbmdUaGlzLCBXVEZNb3ZlKGRldmljZUNhcGFiaWx0aWVzKSksIHsgfSk7
CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUu
bW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCmluZGV4IDc1NjJiZWU4NDFkMzE4
N2FkMjE2NjFiZGY5ODkyYzBiMzYxNDFkM2QuLjAxOWFhYzQ1MmI2OTE3YzA4N2Y5MTYwZjg1MTIw
OGQ0MDU1NzI5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0K
KysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQpAQCAtMzcsNyArMzcsNyBAQCBu
YW1lc3BhY2UgV2ViR1BVIHsKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdHUFVGZWF0dXJlTmFtZT4g
ZmVhdHVyZVJlcXVpcmVtZW50Rm9yRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsK
ICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgy
NFVub3JtU3RlbmNpbDg6IC8vIEZJWE1FOiBUaGlzIGhhcyB0byBiZSBndWFyZGVkIGJ5IE1UTERl
dmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZvcm1hdFN1cHBvcnRlZAorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfRGVwdGgyNFVub3JtU3RlbmNpbDg6CiAgICAgICAgIHJldHVybiBXR1BVRmVh
dHVyZU5hbWVfRGVwdGgyNFVub3JtU3RlbmNpbDg7CiAgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKICAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9E
ZXB0aDMyRmxvYXRTdGVuY2lsODsKQEAgLTEyNDYsNyArMTI0Niw3IEBAIGJvb2wgRGV2aWNlOjp2
YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBjb25zCiAKICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IuZGltZW5zaW9uKSB7CiAgICAgY2Fz
ZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS53
aWR0aCA+IG1fbGltaXRzLm1heFRleHR1cmVEaW1lbnNpb24xRCkKKyAgICAgICAgaWYgKGRlc2Ny
aXB0b3Iuc2l6ZS53aWR0aCA+IGxpbWl0cygpLm1heFRleHR1cmVEaW1lbnNpb24xRCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXplLmhlaWdo
dCAhPSAxKQpAQCAtMTI2MiwyMyArMTI2MiwyMyBAQCBib29sIERldmljZTo6dmFsaWRhdGVDcmVh
dGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgY29ucwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdHUFVU
ZXh0dXJlRGltZW5zaW9uXzJEOgotICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXplLndpZHRoID4g
bV9saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjJEKQorICAgICAgICBpZiAoZGVzY3JpcHRvci5z
aXplLndpZHRoID4gbGltaXRzKCkubWF4VGV4dHVyZURpbWVuc2lvbjJEKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUuaGVpZ2h0ID4gbV9s
aW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjJEKQorICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXpl
LmhlaWdodCA+IGxpbWl0cygpLm1heFRleHR1cmVEaW1lbnNpb24yRCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXplLmRlcHRoT3JBcnJheUxh
eWVycyA+IG1fbGltaXRzLm1heFRleHR1cmVBcnJheUxheWVycykKKyAgICAgICAgaWYgKGRlc2Ny
aXB0b3Iuc2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgPiBsaW1pdHMoKS5tYXhUZXh0dXJlQXJyYXlM
YXllcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUu
d2lkdGggPiBtX2xpbWl0cy5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCisgICAgICAgIGlmIChkZXNj
cmlwdG9yLnNpemUud2lkdGggPiBsaW1pdHMoKS5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS5oZWln
aHQgPiBtX2xpbWl0cy5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCisgICAgICAgIGlmIChkZXNjcmlw
dG9yLnNpemUuaGVpZ2h0ID4gbGltaXRzKCkubWF4VGV4dHVyZURpbWVuc2lvbjNEKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUuZGVwdGhP
ckFycmF5TGF5ZXJzID4gbV9saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjNEKQorICAgICAgICBp
ZiAoZGVzY3JpcHRvci5zaXplLmRlcHRoT3JBcnJheUxheWVycyA+IGxpbWl0cygpLm1heFRleHR1
cmVEaW1lbnNpb24zRCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAo
ZGVzY3JpcHRvci5zYW1wbGVDb3VudCAhPSAxKQpAQCAtMTk2MSw4ICsxOTYxLDEwIEBAIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPE1UTFBpeGVsRm9ybWF0PiBzdGVuY2lsT25seUFzcGVjdE1ldGFsRm9y
bWF0KFdHUFVUZXh0dXJlRm9yCiAgICAgfQogfQogCi1zdGF0aWMgTVRMU3RvcmFnZU1vZGUgc3Rv
cmFnZU1vZGUoYm9vbCBkZXZpY2VIYXNVbmlmaWVkTWVtb3J5KQorc3RhdGljIE1UTFN0b3JhZ2VN
b2RlIHN0b3JhZ2VNb2RlKGJvb2wgZGV2aWNlSGFzVW5pZmllZE1lbW9yeSwgYm9vbCBzdXBwb3J0
c05vblByaXZhdGVEZXB0aFN0ZW5jaWxUZXh0dXJlcykKIHsKKyAgICBpZiAoIXN1cHBvcnRzTm9u
UHJpdmF0ZURlcHRoU3RlbmNpbFRleHR1cmVzKQorICAgICAgICByZXR1cm4gTVRMU3RvcmFnZU1v
ZGVQcml2YXRlOwogICAgIGlmIChkZXZpY2VIYXNVbmlmaWVkTWVtb3J5KQogICAgICAgICByZXR1
cm4gTVRMU3RvcmFnZU1vZGVTaGFyZWQ7CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShN
QUNDQVRBTFlTVCkKQEAgLTE5ODcsOSArMTk4OSwxMSBAQCBSZWY8VGV4dHVyZT4gRGV2aWNlOjpj
cmVhdGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIAog
ICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1ncHVkZXZpY2UtY3Jl
YXRldGV4dHVyZQogCi0gICAgaWYgKGZlYXR1cmVSZXF1aXJlbWVudEZvckZvcm1hdChkZXNjcmlw
dG9yLmZvcm1hdCkpIHsKLSAgICAgICAgLy8gRklYTUU6ICJidXQgdGhpcy5bW2RldmljZV1dLltb
ZmVhdHVyZXNdXSBkb2VzIG5vdCBjb250YWluIHRoZSBmZWF0dXJlLCB0aHJvdyBhIFR5cGVFcnJv
ci4iCi0gICAgICAgIHJldHVybiBUZXh0dXJlOjpjcmVhdGVJbnZhbGlkKCp0aGlzKTsKKyAgICBp
ZiAoYXV0byByZXF1aXJlbWVudCA9IGZlYXR1cmVSZXF1aXJlbWVudEZvckZvcm1hdChkZXNjcmlw
dG9yLmZvcm1hdCkpIHsKKyAgICAgICAgaWYgKCFoYXNGZWF0dXJlKCpyZXF1aXJlbWVudCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiAidGhyb3cgYSBUeXBlRXJyb3IuIgorICAgICAgICAgICAg
cmV0dXJuIFRleHR1cmU6OmNyZWF0ZUludmFsaWQoKnRoaXMpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKCF2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoZGVzY3JpcHRvciwgdmlld0Zvcm1hdHMp
KSB7CkBAIC0yMDQ3LDcgKzIwNTEsNyBAQCBSZWY8VGV4dHVyZT4gRGV2aWNlOjpjcmVhdGVUZXh0
dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIAogICAgIHRleHR1
cmVEZXNjcmlwdG9yLnNhbXBsZUNvdW50ID0gZGVzY3JpcHRvci5zYW1wbGVDb3VudDsKIAotICAg
IHRleHR1cmVEZXNjcmlwdG9yLnN0b3JhZ2VNb2RlID0gc3RvcmFnZU1vZGUoaGFzVW5pZmllZE1l
bW9yeSgpKTsKKyAgICB0ZXh0dXJlRGVzY3JpcHRvci5zdG9yYWdlTW9kZSA9IHN0b3JhZ2VNb2Rl
KGhhc1VuaWZpZWRNZW1vcnkoKSwgYmFzZUNhcGFiaWxpdGllcygpLnN1cHBvcnRzTm9uUHJpdmF0
ZURlcHRoU3RlbmNpbFRleHR1cmVzKTsKIAogICAgIC8vIEZJWE1FKFBFUkZPUk1BTkNFKTogQ29u
c2lkZXIgd3JpdGUtY29tYmluaW5nIENQVSBjYWNoZSBtb2RlLgogICAgIC8vIEZJWE1FKFBFUkZP
Uk1BTkNFKTogQ29uc2lkZXIgaW1wbGVtZW50aW5nIGhhemFyZCB0cmFja2luZyBvdXJzZWxmLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457782</attachid>
            <date>2022-04-17 15:40:56 -0700</date>
            <delta_ts>2022-04-17 16:56:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239443-20220417154055.patch</filename>
            <type>text/plain</type>
            <size>82246</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDkyN2Y3MzkxMzk5YzYyNzBm
NWJhYWE5MTc4Zjk2NWNiNDg1MWRlN2MuLmE4OGU2MDI2OTIyMWE4YmM2ODdkYTdiZWE1ZmE2ZTJi
ZWVmYzg0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMjItMDQtMTcgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBFeHBh
bmQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRvIGluY2x1ZGUgZmVhdHVyZXMgKGJleW9uZCBqdXN0
IGxpbWl0cykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzOTQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9ubHkgTVRMR1BVRmFtaWx5QXBwbGUgZGV2aWNlcyBzdXBwb3J0IGRlcHRoL3N0ZW5jaWwgdGV4
dHVyZXMgaW4gdGhlIG1hbmFnZWQvc2hhcmVkIGFkZHJlc3Mgc3BhY2UuCisgICAgICAgIFNvLCB3
ZSBoYXZlIHRvIGV4cGFuZCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGluZnJhc3RydWN0dXJl
IHRvIGJlIGFibGUgdG8gaG9sZCB0aGlzIGtpbmQKKyAgICAgICAgb2YgaW5mb3JtYXRpb24gKHNv
IHRoZSB0ZXh0dXJlIGNyZWF0aW9uIGZ1bmN0aW9uIGNhbiBjb25zdWx0IHdpdGggdGhpcyBzdGF0
ZSB0byBrbm93IHdoYXQgc3RvcmFnZQorICAgICAgICBtb2RlIHRvIHVzZSBmb3IgdGhlIGNyZWF0
ZWQgdGV4dHVyZSkuIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIHN0b3JlZCBXR1BVTGltaXRzIHN0
cnVjdCB3aXRoIGEgbmV3CisgICAgICAgIHN0cnVjdCwgSGFyZHdhcmVDYXBhYmlsaXRpZXMsIHdo
aWNoIGhvbGRzIGEgV0dQVUxpbWl0cyBpbmlzaWRlIGl0LgorCisgICAgICAgIFdoaWxlIEkgd2Fz
IGhlcmUsIEkgYWxzbyBpbmNsdWRlZCBhIFZlY3RvcjxXR1BVRmVhdHVyZT4gaW5zaWRlIHRoZSBI
YXJkd2FyZUNhcGFiaWxpdGllcyBzdHJ1Y3QsCisgICAgICAgIGFuZCBob29rZWQgaXQgdXAgdG8g
dGhlIHZhcmlvdXMgcGxhY2VzIHdoaWNoIG5lZWQgdG8gYmUgZ3VhcmRlZCBieSB0aGUgcHJlc2Vu
Y2Ugb2YgZmVhdHVyZXMuCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzIHRvIHdvcmsgKGFtb25nIG90aGVyIHRoaW5ncykuIEJlY2F1c2UgdGhlcmUgYXJlIG9u
bHkKKyAgICAgICAgYSBoYW5kZnVsIG9mIHBvc3NpYmxlIGZlYXR1cmVzLCBJIGVsZWN0ZWQgdG8g
dXNlIGEgc29ydGVkIFZlY3RvciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBiaWcgSGFzaFNldAorICAg
ICAgICBoYW1tZXIuCisKKyAgICAgICAgKiBXZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBXZWJHUFUvQWRhcHRlci5oOgorICAgICAgICAoV2ViR1BVOjpBZGFwdGVy
OjpjcmVhdGUpOgorICAgICAgICAqIFdlYkdQVS9BZGFwdGVyLm1tOgorICAgICAgICAoV2ViR1BV
OjpBZGFwdGVyOjpBZGFwdGVyKToKKyAgICAgICAgKFdlYkdQVTo6QWRhcHRlcjo6ZW51bWVyYXRl
RmVhdHVyZXMpOgorICAgICAgICAoV2ViR1BVOjpBZGFwdGVyOjpnZXRMaW1pdHMpOgorICAgICAg
ICAoV2ViR1BVOjpBZGFwdGVyOjpoYXNGZWF0dXJlKToKKyAgICAgICAgKFdlYkdQVTo6QWRhcHRl
cjo6cmVxdWVzdERldmljZSk6CisgICAgICAgICogV2ViR1BVL0RldmljZS5oOgorICAgICAgICAo
V2ViR1BVOjpEZXZpY2U6OmxpbWl0cyBjb25zdCk6CisgICAgICAgIChXZWJHUFU6OkRldmljZTo6
ZmVhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OmJhc2VDYXBhYmlsaXRp
ZXMgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9EZXZpY2UubW06CisgICAgICAgIChXZWJHUFU6
OkRldmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpEZXZpY2UpOgorICAg
ICAgICAoV2ViR1BVOjpEZXZpY2U6OmVudW1lcmF0ZUZlYXR1cmVzKToKKyAgICAgICAgKFdlYkdQ
VTo6RGV2aWNlOjpnZXRMaW1pdHMpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6Omhhc0ZlYXR1
cmUpOgorICAgICAgICAqIFdlYkdQVS9IYXJkd2FyZUNhcGFiaWxpdGllcy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVMaW1pdHMuaC4KKyAgICAgICAgKiBXZWJH
UFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMubW06IEFkZGVkLgorICAgICAgICAoV2ViR1BVOjpiYXNl
Q2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkdQVTo6YmFzZUZlYXR1cmVzKToKKyAgICAgICAg
KFdlYkdQVTo6YXBwbGUzKToKKyAgICAgICAgKFdlYkdQVTo6YXBwbGU0KToKKyAgICAgICAgKFdl
YkdQVTo6YXBwbGU1KToKKyAgICAgICAgKFdlYkdQVTo6YXBwbGU2KToKKyAgICAgICAgKFdlYkdQ
VTo6YXBwbGU3KToKKyAgICAgICAgKFdlYkdQVTo6bWFjMik6CisgICAgICAgIChXZWJHUFU6Om1l
cmdlTWF4aW11bSk6CisgICAgICAgIChXZWJHUFU6Om1lcmdlQWxpZ25tZW50KToKKyAgICAgICAg
KFdlYkdQVTo6bWVyZ2VMaW1pdHMpOgorICAgICAgICAoV2ViR1BVOjptZXJnZUZlYXR1cmVzKToK
KyAgICAgICAgKFdlYkdQVTo6bWVyZ2VCYXNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkdQ
VTo6cmF3SGFyZHdhcmVDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViR1BVOjphbnlMaW1pdElz
QmV0dGVyVGhhbik6CisgICAgICAgIChXZWJHUFU6OmluY2x1ZGVzVW5zdXBwb3J0ZWRGZWF0dXJl
cyk6CisgICAgICAgIChXZWJHUFU6OmNoZWNrTGltaXRzKToKKyAgICAgICAgKFdlYkdQVTo6aGFy
ZHdhcmVDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViR1BVOjppc1ZhbGlkKToKKyAgICAgICAg
KiBXZWJHUFUvSGFyZHdhcmVMaW1pdHMubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BVL0lu
c3RhbmNlLm1tOgorICAgICAgICAoV2ViR1BVOjpJbnN0YW5jZTo6cmVxdWVzdEFkYXB0ZXIpOgor
ICAgICAgICAqIFdlYkdQVS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpmZWF0dXJlUmVx
dWlyZW1lbnRGb3JGb3JtYXQpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OnZhbGlkYXRlQ3Jl
YXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OnN0b3JhZ2VNb2RlKToKKyAgICAgICAgKFdl
YkdQVTo6RGV2aWNlOjpjcmVhdGVUZXh0dXJlKToKKwogMjAyMi0wNC0xNiAgTXlsZXMgQy4gTWF4
ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEZpeCB0aGUg
QmlnIFN1ciBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYmVlMTA0MDU1ODk0NWMxZmE5ZWJhY2ExNTJjYjcwMDc1MGQ3MDhjYS4u
ZjM0YmNkNmM5ODI1ZDFhNzYzMDE5Y2I4NDZmMzE2YTJiMzk5N2I5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMCw4ICsxMCw4IEBA
CiAJCTFDMDIzRDNGMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDIzRDNFMjc0NDkwNzAw
MDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSAqLzsgfTsKIAkJMUMwMjNENDAyNzQ0OTA3MDAw
MURCNzM0IC8qIGxpYndnc2wuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDRUJEN0YyMjcxNkIyQ0MwMEE1MjU0RCAvKiBsaWJ3Z3NsLmEgKi87IH07
CiAJCTFDMDIzRDRCMjc0NDk1QjkwMDFEQjczNCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAyM0Q0
QTI3NDQ5NUI5MDAxREI3MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwotCQkx
QzBGNDFFRTI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVMaW1pdHMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzBGNDFFQzI4MDk0MDY1MDAwNTg4
NkQgLyogSGFyZHdhcmVMaW1pdHMubW0gKi87IH07Ci0JCTFDMEY0MUVGMjgwOTQwNjUwMDA1ODg2
RCAvKiBIYXJkd2FyZUxpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUMwRjQxRUQyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlTGltaXRzLmgg
Ki87IH07CisJCTFDMEY0MUVFMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGll
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMEY0
MUVDMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGllcy5tbSAqLzsgfTsKKwkJ
MUMwRjQxRUYyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2FwYWJpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzBGNDFFRDI4MDk0MDY1
MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMUMyQ0VERUUyNzFF
OEE3MzAwRURDMTZGIC8qIE1ldGFsLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMkNFREVEMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRh
bC5mcmFtZXdvcmsgKi87IH07CiAJCTFDMzM3NTVGMjdGQTIzQjgwMDJGMTY0NCAvKiBJc1ZhbGlk
VG9Vc2VXaXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzMzNzU1RDI3RkEyM0I4MDAyRjE2NDQgLyogSXNWYWxpZFRvVXNlV2l0aC5oICovOyB9Owog
CQkxQzUzMTlDMDI3QkRDNkNDMDBDRDEyN0UgLyogbWFpbi5zd2lmdCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNTMxOUJGMjdCREM2Q0MwMENEMTI3RSAv
KiBtYWluLnN3aWZ0ICovOyB9OwpAQCAtMTMzLDggKzEzMyw4IEBACiAJCTFDMDIzRDNFMjc0NDkw
NzAwMDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdH
U0xMZXhlclRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAyM0Q0NzI3
NDQ5MTZEMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBX
R1NMVW5pdFRlc3RzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAy
M0Q0QTI3NDQ5NUI5MDAxREI3MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07Ci0JCTFDMEY0MUVDMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUxp
bWl0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhhcmR3YXJlTGltaXRzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQzBGNDFFRDI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdh
cmVMaW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFyZHdhcmVMaW1pdHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMwRjQxRUMyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2Fw
YWJpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSGFyZHdhcmVDYXBhYmlsaXRpZXMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMEY0MUVEMjgwOTQwNjUwMDA1ODg2
RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXJkd2FyZUNhcGFi
aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzJDRURFRDI3MUU4QTcz
MDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBNZXRhbC5mcmFt
ZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL01ldGFsLmZyYW1ld29yazsg
c291cmNlVHJlZSA9IFNES1JPT1Q7IH07CiAJCTFDMzM3NTVEMjdGQTIzQjgwMDJGMTY0NCAvKiBJ
c1ZhbGlkVG9Vc2VXaXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzVmFsaWRUb1VzZVdpdGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM1MzE5QkQyN0JEQzZDQjAwQ0QxMjdFIC8qIENv
bW1hbmRMaW5lUGxheWdyb3VuZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gQ29tbWFuZExpbmVQbGF5Z3JvdW5kOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwpAQCAtMzQ4LDggKzM0OCw4IEBACiAJCQkJMUM1QUNBOUIyNzNBNDI2RDAw
OTVGOEQ1IC8qIERldmljZS5oICovLAogCQkJCTFDNUFDQUEzMjczQTQyNkQwMDk1RjhENSAvKiBE
ZXZpY2UubW0gKi8sCiAJCQkJMUNFQkQ4MEIyNzE2QzM3OTAwQTUyNTREIC8qIEV4cG9ydE1hY3Jv
cy5oICovLAotCQkJCTFDMEY0MUVEMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUxpbWl0cy5o
ICovLAotCQkJCTFDMEY0MUVDMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUxpbWl0cy5tbSAq
LywKKwkJCQkxQzBGNDFFRDI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRpZXMu
aCAqLywKKwkJCQkxQzBGNDFFQzI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRp
ZXMubW0gKi8sCiAJCQkJMUM1QUNBQTAyNzNBNDI2RDAwOTVGOEQ1IC8qIEluc3RhbmNlLmggKi8s
CiAJCQkJMUM1QUNBOTIyNzNBNDFDMjAwOTVGOEQ1IC8qIEluc3RhbmNlLm1tICovLAogCQkJCTFD
MzM3NTVEMjdGQTIzQjgwMDJGMTY0NCAvKiBJc1ZhbGlkVG9Vc2VXaXRoLmggKi8sCkBAIC00ODcs
NyArNDg3LDcgQEAKIAkJCQkxQzU4MzAxODI3RTE2ODIzMDA5QjQwRjAgLyogQVBJQ29udmVyc2lv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNUFDQUQ3MjczQTRENzAwMDk1RjhENSAvKiBCaW5k
R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNTgyRkZBMjdFMDQxMzEwMDlCNDBGMCAvKiBD
b21tYW5kc01peGluLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQzBGNDFFRjI4MDk0MDY1MDAwNTg4
NkQgLyogSGFyZHdhcmVMaW1pdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTFDMEY0MUVGMjgwOTQw
NjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMzMzc1NUYyN0ZBMjNCODAwMkYxNjQ0IC8qIElzVmFsaWRUb1VzZVdpdGguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDRUJEN0U3MjcxNkFGQkEwMEE1MjU0RCAvKiBXZWJHUFUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDNUFDQUQzMjczQTRDODYwMDk1RjhENSAvKiBXZWJHUFVFeHQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzM4LDcgKzczOCw3IEBACiAJCQkJMUM1QUNBQzYyNzNBNDI2RDAwOTVGOEQ1
IC8qIENvbXB1dGVQYXNzRW5jb2Rlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDNUFDQUMwMjcz
QTQyNkQwMDk1RjhENSAvKiBDb21wdXRlUGlwZWxpbmUubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QzVBQ0FDMTI3M0E0MjZEMDA5NUY4RDUgLyogRGV2aWNlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MUMwRjQxRUUyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlTGltaXRzLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMwRjQxRUUyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2FwYWJpbGl0aWVz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBOTQyNzNBNDFDMjAwOTVGOEQ1IC8qIEluc3Rh
bmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBRTUyNzNBNTVERDAwOTVGOEQ1IC8qIFBp
cGVsaW5lTGF5b3V0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBQkQyNzNBNDI2RDAwOTVG
OEQ1IC8qIFF1ZXJ5U2V0Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9BZGFwdGVyLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9BZGFwdGVyLmgKaW5k
ZXggMjM0MjFkYmVlMDY0MTk1ZTkxNzk1YzljNTE5NjQ2YmE0ODgyZGE3MC4uODZiMTgzNzRhYzMz
ZDM3MGEwYmE2MDU2YTI5N2MzOTQ2ZTc3NzM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQWRhcHRlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0FkYXB0ZXIuaApAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCAiSGFyZHdhcmVDYXBhYmls
aXRpZXMuaCIKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbXBvcnQgPHd0Zi9SZWYuaD4KQEAgLTQyLDkgKzQzLDkgQEAgY2xh
c3MgSW5zdGFuY2U7CiBjbGFzcyBBZGFwdGVyIDogcHVibGljIFdHUFVBZGFwdGVySW1wbCwgcHVi
bGljIFJlZkNvdW50ZWQ8QWRhcHRlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8QWRhcHRlcj4gY3JlYXRlKGlkPE1UTERldmljZT4gZGV2
aWNlLCBJbnN0YW5jZSYgaW5zdGFuY2UsIGNvbnN0IFdHUFVMaW1pdHMmIGxpbWl0cykKKyAgICBz
dGF0aWMgUmVmPEFkYXB0ZXI+IGNyZWF0ZShpZDxNVExEZXZpY2U+IGRldmljZSwgSW5zdGFuY2Um
IGluc3RhbmNlLCBIYXJkd2FyZUNhcGFiaWxpdGllcyYmIGNhcGFiaWxpdGllcykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXIoZGV2aWNlLCBpbnN0YW5jZSwgbGlt
aXRzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXIoZGV2aWNlLCBpbnN0
YW5jZSwgV1RGTW92ZShjYXBhYmlsaXRpZXMpKSk7CiAgICAgfQogICAgIHN0YXRpYyBSZWY8QWRh
cHRlcj4gY3JlYXRlSW52YWxpZChJbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgewpAQCAtNjcsMTMg
KzY4LDEzIEBAIHB1YmxpYzoKIAogCiBwcml2YXRlOgotICAgIEFkYXB0ZXIoaWQ8TVRMRGV2aWNl
PiwgSW5zdGFuY2UmLCBjb25zdCBXR1BVTGltaXRzJik7CisgICAgQWRhcHRlcihpZDxNVExEZXZp
Y2U+LCBJbnN0YW5jZSYsIEhhcmR3YXJlQ2FwYWJpbGl0aWVzJiYpOwogICAgIEFkYXB0ZXIoSW5z
dGFuY2UmKTsKIAogICAgIGlkPE1UTERldmljZT4gbV9kZXZpY2UgeyBuaWwgfTsKICAgICBjb25z
dCBSZWY8SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAKLSAgICBXR1BVTGltaXRzIG1fbGltaXRzIHsg
fTsKKyAgICBIYXJkd2FyZUNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllcyB7IH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Fk
YXB0ZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9BZGFwdGVyLm1tCmluZGV4IDFmOTU3MGNh
NjdkM2Q1NmMwMDUwZjlhOWQ0ZjZjYmViOTQ4OTYxZGUuLmU3YmQwYjdjZmI4ZDU0NDdhYmNmOTU2
OWJmY2E3MDBjZDE0ZmE0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0FkYXB0
ZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQWRhcHRlci5tbQpAQCAtMjgsMTYgKzI4
LDE2IEBACiAKICNpbXBvcnQgIkFQSUNvbnZlcnNpb25zLmgiCiAjaW1wb3J0ICJEZXZpY2UuaCIK
LSNpbXBvcnQgIkhhcmR3YXJlTGltaXRzLmgiCiAjaW1wb3J0ICJJbnN0YW5jZS5oIgorI2ltcG9y
dCA8YWxnb3JpdGhtPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
V2ViR1BVIHsKIAotQWRhcHRlcjo6QWRhcHRlcihpZDxNVExEZXZpY2U+IGRldmljZSwgSW5zdGFu
Y2UmIGluc3RhbmNlLCBjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMpCitBZGFwdGVyOjpBZGFwdGVy
KGlkPE1UTERldmljZT4gZGV2aWNlLCBJbnN0YW5jZSYgaW5zdGFuY2UsIEhhcmR3YXJlQ2FwYWJp
bGl0aWVzJiYgY2FwYWJpbGl0aWVzKQogICAgIDogbV9kZXZpY2UoZGV2aWNlKQogICAgICwgbV9p
bnN0YW5jZShpbnN0YW5jZSkKLSAgICAsIG1fbGltaXRzKGxpbWl0cykKKyAgICAsIG1fY2FwYWJp
bGl0aWVzKFdURk1vdmUoY2FwYWJpbGl0aWVzKSkKIHsKIH0KIApAQCAtNDgsMTAgKzQ4LDEzIEBA
IEFkYXB0ZXI6OkFkYXB0ZXIoSW5zdGFuY2UmIGluc3RhbmNlKQogCiBBZGFwdGVyOjp+QWRhcHRl
cigpID0gZGVmYXVsdDsKIAotc2l6ZV90IEFkYXB0ZXI6OmVudW1lcmF0ZUZlYXR1cmVzKFdHUFVG
ZWF0dXJlTmFtZSopCitzaXplX3QgQWRhcHRlcjo6ZW51bWVyYXRlRmVhdHVyZXMoV0dQVUZlYXR1
cmVOYW1lKiBmZWF0dXJlcykKIHsKLSAgICAvLyBXZSBzdXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1
cmVzIHJpZ2h0IG5vdy4KLSAgICByZXR1cm4gMDsKKyAgICAvLyBUaGUgQVBJIGNvbnRyYWN0IGZv
ciB0aGlzIHJlcXVpcmVzIHRoYXQgc3VmZmljaWVudCBzcGFjZSBoYXMgYWxyZWFkeSBiZWVuIGFs
bG9jYXRlZCBmb3IgdGhlIG91dHB1dC4KKyAgICAvLyBUaGlzIHJlcXVpcmVzIHRoZSBjYWxsZXIg
Y2FsbGluZyB1cyB0d2ljZTogb25jZSB0byBnZXQgdGhlIGFtb3VudCBvZiBzcGFjZSB0byBhbGxv
Y2F0ZSwgYW5kIG9uY2UgdG8gZmlsbCB0aGUgc3BhY2UuCisgICAgaWYgKGZlYXR1cmVzKQorICAg
ICAgICBzdGQ6OmNvcHkobV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuYmVnaW4oKSwgbV9jYXBhYmls
aXRpZXMuZmVhdHVyZXMuZW5kKCksIGZlYXR1cmVzKTsKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRp
ZXMuZmVhdHVyZXMuc2l6ZSgpOwogfQogCiBib29sIEFkYXB0ZXI6OmdldExpbWl0cyhXR1BVU3Vw
cG9ydGVkTGltaXRzJiBsaW1pdHMpCkBAIC01OSw4ICs2Miw3IEBAIGJvb2wgQWRhcHRlcjo6Z2V0
TGltaXRzKFdHUFVTdXBwb3J0ZWRMaW1pdHMmIGxpbWl0cykKICAgICBpZiAobGltaXRzLm5leHRJ
bkNoYWluICE9IG51bGxwdHIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KLSAgICBsaW1pdHMubGltaXRzID0geyB9OworICAgIGxpbWl0cy5s
aW1pdHMgPSBtX2NhcGFiaWxpdGllcy5saW1pdHM7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTc1LDEwICs3Nyw5IEBAIHZvaWQgQWRhcHRlcjo6Z2V0UHJvcGVydGllcyhXR1BVQWRhcHRlclBy
b3BlcnRpZXMmIHByb3BlcnRpZXMpCiAgICAgcHJvcGVydGllcy5iYWNrZW5kVHlwZSA9IFdHUFVC
YWNrZW5kVHlwZV9NZXRhbDsKIH0KIAotYm9vbCBBZGFwdGVyOjpoYXNGZWF0dXJlKFdHUFVGZWF0
dXJlTmFtZSkKK2Jvb2wgQWRhcHRlcjo6aGFzRmVhdHVyZShXR1BVRmVhdHVyZU5hbWUgZmVhdHVy
ZSkKIHsKLSAgICAvLyBXZSBzdXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1cmVzIHJpZ2h0IG5vdy4K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0ZDo6ZmluZChtX2NhcGFiaWxpdGllcy5m
ZWF0dXJlcy5iZWdpbigpLCBtX2NhcGFiaWxpdGllcy5mZWF0dXJlcy5lbmQoKSwgZmVhdHVyZSk7
CiB9CiAKIHZvaWQgQWRhcHRlcjo6cmVxdWVzdERldmljZShjb25zdCBXR1BVRGV2aWNlRGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXR1BVUmVxdWVzdERldmlj
ZVN0YXR1cywgUmVmPERldmljZT4mJiwgU3RyaW5nJiYpPiYmIGNhbGxiYWNrKQpAQCAtOTcsNyAr
OTgsNyBAQCB2b2lkIEFkYXB0ZXI6OnJlcXVlc3REZXZpY2UoY29uc3QgV0dQVURldmljZURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIENvbXBsZXRpb25IYQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBsaW1pdHMgPSBtX2xpbWl0czsKKyAgICBXR1BVTGltaXRzIGxpbWl0cyB7IH07
CiAKICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZExpbWl0cykgewogICAgICAgICBpZiAoZGVz
Y3JpcHRvci5yZXF1aXJlZExpbWl0cy0+bmV4dEluQ2hhaW4pIHsKQEAgLTExNCw3ICsxMTUsNyBA
QCB2b2lkIEFkYXB0ZXI6OnJlcXVlc3REZXZpY2UoY29uc3QgV0dQVURldmljZURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIENvbXBsZXRpb25IYQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGFueUxpbWl0SXNCZXR0ZXJUaGFuKGRlc2NyaXB0b3IucmVxdWlyZWRM
aW1pdHMtPmxpbWl0cywgbV9saW1pdHMpKSB7CisgICAgICAgIGlmIChhbnlMaW1pdElzQmV0dGVy
VGhhbihkZXNjcmlwdG9yLnJlcXVpcmVkTGltaXRzLT5saW1pdHMsIG1fY2FwYWJpbGl0aWVzLmxp
bWl0cykpIHsKICAgICAgICAgICAgIGluc3RhbmNlKCkuc2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlz
ID0gUmVmIHsgKnRoaXMgfSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1c19FcnJv
ciwgRGV2aWNlOjpjcmVhdGVJbnZhbGlkKHN0cm9uZ1RoaXMpLCAiRGV2aWNlIGRvZXMgbm90IHN1
cHBvcnQgcmVxdWVzdGVkIGxpbWl0cyJfcyk7CiAgICAgICAgICAgICB9KTsKQEAgLTEyMiwxMSAr
MTIzLDI2IEBAIHZvaWQgQWRhcHRlcjo6cmVxdWVzdERldmljZShjb25zdCBXR1BVRGV2aWNlRGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgQ29tcGxldGlvbkhhCiAgICAgICAgIH0KIAogICAgICAgICBs
aW1pdHMgPSBkZXNjcmlwdG9yLnJlcXVpcmVkTGltaXRzLT5saW1pdHM7CisgICAgfSBlbHNlCisg
ICAgICAgIGxpbWl0cyA9IGRlZmF1bHRMaW1pdHMoKTsKKworICAgIGF1dG8gZmVhdHVyZXMgPSBW
ZWN0b3IgeyBkZXNjcmlwdG9yLnJlcXVpcmVkRmVhdHVyZXMsIGRlc2NyaXB0b3IucmVxdWlyZWRG
ZWF0dXJlc0NvdW50IH07CisgICAgaWYgKGluY2x1ZGVzVW5zdXBwb3J0ZWRGZWF0dXJlcyhmZWF0
dXJlcywgbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMpKSB7CisgICAgICAgIGluc3RhbmNlKCkuc2No
ZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdHUFVSZXF1ZXN0
RGV2aWNlU3RhdHVzX0Vycm9yLCBEZXZpY2U6OmNyZWF0ZUludmFsaWQoc3Ryb25nVGhpcyksICJE
ZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0ZWQgZmVhdHVyZXMiX3MpOworICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGNh
cGFiaWxpdGllcyB7CisgICAgICAgIGxpbWl0cywKKyAgICAgICAgV1RGTW92ZShmZWF0dXJlcyks
CisgICAgICAgIG1fY2FwYWJpbGl0aWVzLmJhc2VDYXBhYmlsaXRpZXMsCisgICAgfTsKKwogICAg
IGF1dG8gbGFiZWwgPSBmcm9tQVBJKGRlc2NyaXB0b3IubGFiZWwpOwotICAgIGluc3RhbmNlKCku
c2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgbGFiZWwgPSBXVEZNb3Zl
KGxhYmVsKSwgbGltaXRzID0gV1RGTW92ZShsaW1pdHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBjYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0
YXR1c19TdWNjZXNzLCBEZXZpY2U6OmNyZWF0ZShzdHJvbmdUaGlzLT5tX2RldmljZSwgV1RGTW92
ZShsYWJlbCksIFdURk1vdmUobGltaXRzKSwgc3Ryb25nVGhpcyksIHsgfSk7CisgICAgaW5zdGFu
Y2UoKS5zY2hlZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAqdGhpcyB9LCBsYWJlbCA9IFdU
Rk1vdmUobGFiZWwpLCBjYXBhYmlsaXRpZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKFdH
UFVSZXF1ZXN0RGV2aWNlU3RhdHVzX1N1Y2Nlc3MsIERldmljZTo6Y3JlYXRlKHN0cm9uZ1RoaXMt
Pm1fZGV2aWNlLCBXVEZNb3ZlKGxhYmVsKSwgV1RGTW92ZShjYXBhYmlsaXRpZXMpLCBzdHJvbmdU
aGlzKSwgeyB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvRGV2aWNlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UuaAppbmRleCAwMDIwZTZl
YmQ5MjZkMjI2ZDcyYTdmMjg4MDBlZmE1NTI1YzM2ODBmLi4wYTE2MjY4NzhhMTFkNjI0N2U1M2Y5
NzlmNDU2ZmQ5MzRhYTg2Mzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZp
Y2UuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UuaApAQCAtMjYsNiArMjYsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbXBvcnQgIkFkYXB0ZXIuaCIKKyNpbXBvcnQgIkhhcmR3YXJl
Q2FwYWJpbGl0aWVzLmgiCiAjaW1wb3J0ICJRdWV1ZS5oIgogI2ltcG9ydCA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtNjEsNyArNjIsNyBA
QCBjbGFzcyBUZXh0dXJlOwogY2xhc3MgRGV2aWNlIDogcHVibGljIFdHUFVEZXZpY2VJbXBsLCBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGV2aWNlPiwgcHVibGljIENhbk1ha2VXZWFrUHRy
PERldmljZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RGV2aWNlPiBjcmVhdGUoaWQ8TVRMRGV2aWNlPiwgU3RyaW5nJiYgZGV2aWNlTGFi
ZWwsIGNvbnN0IFdHUFVMaW1pdHMmLCBBZGFwdGVyJik7CisgICAgc3RhdGljIFJlZjxEZXZpY2U+
IGNyZWF0ZShpZDxNVExEZXZpY2U+LCBTdHJpbmcmJiBkZXZpY2VMYWJlbCwgSGFyZHdhcmVDYXBh
YmlsaXRpZXMmJiwgQWRhcHRlciYpOwogICAgIHN0YXRpYyBSZWY8RGV2aWNlPiBjcmVhdGVJbnZh
bGlkKEFkYXB0ZXImIGFkYXB0ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEZXZpY2UoYWRhcHRlcikpOwpAQCAtOTcsNiArOTgsOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2RldmljZTsgfQogICAgIGJvb2wgaXNMb3N0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0xvc3Q7IH0KKyAgICBjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMo
KSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllcy5saW1pdHM7IH0KKyAgICBjb25zdCBWZWN0
b3I8V0dQVUZlYXR1cmVOYW1lPiYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxp
dGllcy5mZWF0dXJlczsgfQorICAgIGNvbnN0IEhhcmR3YXJlQ2FwYWJpbGl0aWVzOjpCYXNlQ2Fw
YWJpbGl0aWVzJiBiYXNlQ2FwYWJpbGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRp
ZXMuYmFzZUNhcGFiaWxpdGllczsgfQogCiAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UoKSBjb25z
dCB7IHJldHVybiBtX2RldmljZTsgfQogCkBAIC0xMDYsNyArMTEwLDcgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzVW5pZmllZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlLmhhc1VuaWZp
ZWRNZW1vcnk7IH0KIAogcHJpdmF0ZToKLSAgICBEZXZpY2UoaWQ8TVRMRGV2aWNlPiwgaWQ8TVRM
Q29tbWFuZFF1ZXVlPiBkZWZhdWx0UXVldWUsIGNvbnN0IFdHUFVMaW1pdHMmLCBBZGFwdGVyJik7
CisgICAgRGV2aWNlKGlkPE1UTERldmljZT4sIGlkPE1UTENvbW1hbmRRdWV1ZT4gZGVmYXVsdFF1
ZXVlLCBIYXJkd2FyZUNhcGFiaWxpdGllcyYmLCBBZGFwdGVyJik7CiAgICAgRGV2aWNlKEFkYXB0
ZXImKTsKIAogICAgIHN0cnVjdCBFcnJvclNjb3BlOwpAQCAtMTM4LDcgKzE0Miw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzTG9zdCB7IGZhbHNlIH07CiAgICAgaWQ8TlNPYmplY3Q+IG1fZGV2
aWNlT2JzZXJ2ZXIgeyBuaWwgfTsKIAotICAgIFdHUFVMaW1pdHMgbV9saW1pdHMgeyB9OworICAg
IEhhcmR3YXJlQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzIHsgfTsKIAogICAgIGNvbnN0IFJl
ZjxBZGFwdGVyPiBtX2FkYXB0ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvRGV2aWNlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvRGV2aWNlLm1tCmluZGV4IDg4NWFh
NzNmMjliZDM1ZmMyMDIyNTk0ZGE2ZWVjN2U5NDVjYWQwYmMuLmU2Y2Q2MTEwZjQ1YjE5OGMyNTVl
ZDU0NWI3ZDdjNDA1MDNhM2EyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Rl
dmljZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UubW0KQEAgLTQyLDEyICs0
MiwxMyBAQAogI2ltcG9ydCAiU3VyZmFjZS5oIgogI2ltcG9ydCAiU3dhcENoYWluLmgiCiAjaW1w
b3J0ICJUZXh0dXJlLmgiCisjaW1wb3J0IDxhbGdvcml0aG0+CiAjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViR1BVIHsK
IAotUmVmPERldmljZT4gRGV2aWNlOjpjcmVhdGUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIFN0cmlu
ZyYmIGRldmljZUxhYmVsLCBjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMsIEFkYXB0ZXImIGFkYXB0
ZXIpCitSZWY8RGV2aWNlPiBEZXZpY2U6OmNyZWF0ZShpZDxNVExEZXZpY2U+IGRldmljZSwgU3Ry
aW5nJiYgZGV2aWNlTGFiZWwsIEhhcmR3YXJlQ2FwYWJpbGl0aWVzJiYgY2FwYWJpbGl0aWVzLCBB
ZGFwdGVyJiBhZGFwdGVyKQogewogICAgIGlkPE1UTENvbW1hbmRRdWV1ZT4gY29tbWFuZFF1ZXVl
ID0gW2RldmljZSBuZXdDb21tYW5kUXVldWVdOwogICAgIGlmICghY29tbWFuZFF1ZXVlKQpAQCAt
NTksMTMgKzYwLDEzIEBAIFJlZjxEZXZpY2U+IERldmljZTo6Y3JlYXRlKGlkPE1UTERldmljZT4g
ZGV2aWNlLCBTdHJpbmcmJiBkZXZpY2VMYWJlbCwgY29uc3QgV0dQCiAgICAgaWYgKCFkZXZpY2VM
YWJlbC5pc0VtcHR5KCkpCiAgICAgICAgIGNvbW1hbmRRdWV1ZS5sYWJlbCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRGVmYXVsdCBxdWV1ZSBmb3IgZGV2aWNlICVzIiwgZGV2aWNlTGFi
ZWwudXRmOCgpLmRhdGEoKV07CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZXZpY2UoZGV2
aWNlLCBjb21tYW5kUXVldWUsIGxpbWl0cywgYWRhcHRlcikpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERldmljZShkZXZpY2UsIGNvbW1hbmRRdWV1ZSwgV1RGTW92ZShjYXBhYmlsaXRpZXMp
LCBhZGFwdGVyKSk7CiB9CiAKLURldmljZTo6RGV2aWNlKGlkPE1UTERldmljZT4gZGV2aWNlLCBp
ZDxNVExDb21tYW5kUXVldWU+IGRlZmF1bHRRdWV1ZSwgY29uc3QgV0dQVUxpbWl0cyYgbGltaXRz
LCBBZGFwdGVyJiBhZGFwdGVyKQorRGV2aWNlOjpEZXZpY2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2Us
IGlkPE1UTENvbW1hbmRRdWV1ZT4gZGVmYXVsdFF1ZXVlLCBIYXJkd2FyZUNhcGFiaWxpdGllcyYm
IGNhcGFiaWxpdGllcywgQWRhcHRlciYgYWRhcHRlcikKICAgICA6IG1fZGV2aWNlKGRldmljZSkK
ICAgICAsIG1fZGVmYXVsdFF1ZXVlKFF1ZXVlOjpjcmVhdGUoZGVmYXVsdFF1ZXVlLCAqdGhpcykp
Ci0gICAgLCBtX2xpbWl0cyhsaW1pdHMpCisgICAgLCBtX2NhcGFiaWxpdGllcyhXVEZNb3ZlKGNh
cGFiaWxpdGllcykpCiAgICAgLCBtX2FkYXB0ZXIoYWRhcHRlcikKIHsKICNpZiBQTEFURk9STShN
QUMpCkBAIC0xMzcsMTAgKzEzOCwxMyBAQCB2b2lkIERldmljZTo6ZGVzdHJveSgpCiAgICAgbG9z
ZVRoZURldmljZShXR1BVRGV2aWNlTG9zdFJlYXNvbl9EZXN0cm95ZWQpOwogfQogCi1zaXplX3Qg
RGV2aWNlOjplbnVtZXJhdGVGZWF0dXJlcyhXR1BVRmVhdHVyZU5hbWUqKQorc2l6ZV90IERldmlj
ZTo6ZW51bWVyYXRlRmVhdHVyZXMoV0dQVUZlYXR1cmVOYW1lKiBmZWF0dXJlcykKIHsKLSAgICAv
LyBXZSBzdXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1cmVzIHJpZ2h0IG5vdy4KLSAgICByZXR1cm4g
MDsKKyAgICAvLyBUaGUgQVBJIGNvbnRyYWN0IGZvciB0aGlzIHJlcXVpcmVzIHRoYXQgc3VmZmlj
aWVudCBzcGFjZSBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIG91dHB1dC4KKyAg
ICAvLyBUaGlzIHJlcXVpcmVzIHRoZSBjYWxsZXIgY2FsbGluZyB1cyB0d2ljZTogb25jZSB0byBn
ZXQgdGhlIGFtb3VudCBvZiBzcGFjZSB0byBhbGxvY2F0ZSwgYW5kIG9uY2UgdG8gZmlsbCB0aGUg
c3BhY2UuCisgICAgaWYgKGZlYXR1cmVzKQorICAgICAgICBzdGQ6OmNvcHkobV9jYXBhYmlsaXRp
ZXMuZmVhdHVyZXMuYmVnaW4oKSwgbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuZW5kKCksIGZlYXR1
cmVzKTsKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuc2l6ZSgpOwogfQogCiBi
b29sIERldmljZTo6Z2V0TGltaXRzKFdHUFVTdXBwb3J0ZWRMaW1pdHMmIGxpbWl0cykKQEAgLTE0
OCw4ICsxNTIsNyBAQCBib29sIERldmljZTo6Z2V0TGltaXRzKFdHUFVTdXBwb3J0ZWRMaW1pdHMm
IGxpbWl0cykKICAgICBpZiAobGltaXRzLm5leHRJbkNoYWluICE9IG51bGxwdHIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBsaW1p
dHMubGltaXRzID0geyB9OworICAgIGxpbWl0cy5saW1pdHMgPSBtX2NhcGFiaWxpdGllcy5saW1p
dHM7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1OCwxMCArMTYxLDkgQEAgUXVldWUmIERl
dmljZTo6Z2V0UXVldWUoKQogICAgIHJldHVybiBtX2RlZmF1bHRRdWV1ZTsKIH0KIAotYm9vbCBE
ZXZpY2U6Omhhc0ZlYXR1cmUoV0dQVUZlYXR1cmVOYW1lKQorYm9vbCBEZXZpY2U6Omhhc0ZlYXR1
cmUoV0dQVUZlYXR1cmVOYW1lIGZlYXR1cmUpCiB7Ci0gICAgLy8gV2Ugc3VwcG9ydCBubyBvcHRp
b25hbCBmZWF0dXJlcyByaWdodCBub3cuCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBz
dGQ6OmZpbmQobV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuYmVnaW4oKSwgbV9jYXBhYmlsaXRpZXMu
ZmVhdHVyZXMuZW5kKCksIGZlYXR1cmUpOwogfQogCiBhdXRvIERldmljZTo6Y3VycmVudEVycm9y
U2NvcGUoV0dQVUVycm9yRmlsdGVyIHR5cGUpIC0+IEVycm9yU2NvcGUqCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9IYXJkd2FyZUNhcGFiaWxpdGllcy5oIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OGUzMjg2MzRlMGFh
OGQ0OGQ3ZGUyYWMxNWM1MWIxZjhkNDVkMWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkdQVS9XZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMuaApAQCAtMCwwICsxLDUxIEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkdQVSB7CisKK3N0cnVjdCBIYXJkd2FyZUNhcGFiaWxpdGllcyB7CisgICAgV0dQ
VUxpbWl0cyBsaW1pdHMgeyB9OworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+IGZlYXR1cmVz
OworCisgICAgc3RydWN0IEJhc2VDYXBhYmlsaXRpZXMgeworICAgICAgICBNVExBcmd1bWVudEJ1
ZmZlcnNUaWVyIGFyZ3VtZW50QnVmZmVyc1RpZXIgeyBNVExBcmd1bWVudEJ1ZmZlcnNUaWVyMSB9
OworICAgICAgICBib29sIHN1cHBvcnRzTm9uUHJpdmF0ZURlcHRoU3RlbmNpbFRleHR1cmVzIHsg
ZmFsc2UgfTsKKyAgICAgICAgaWQ8TVRMQ291bnRlclNldD4gdGltZXN0YW1wQ291bnRlclNldCB7
IG5pbCB9OworICAgICAgICBpZDxNVExDb3VudGVyU2V0PiBzdGF0aXN0aWNDb3VudGVyU2V0IHsg
bmlsIH07CisgICAgfSBiYXNlQ2FwYWJpbGl0aWVzOworfTsKKworc3RkOjpvcHRpb25hbDxIYXJk
d2FyZUNhcGFiaWxpdGllcz4gaGFyZHdhcmVDYXBhYmlsaXRpZXMoaWQ8TVRMRGV2aWNlPik7Citi
b29sIGlzVmFsaWQoY29uc3QgV0dQVUxpbWl0cyYpOworV0dQVUxpbWl0cyBkZWZhdWx0TGltaXRz
KCk7Citib29sIGFueUxpbWl0SXNCZXR0ZXJUaGFuKGNvbnN0IFdHUFVMaW1pdHMmIHRhcmdldCwg
Y29uc3QgV0dQVUxpbWl0cyYgcmVmZXJlbmNlKTsKK2Jvb2wgaW5jbHVkZXNVbnN1cHBvcnRlZEZl
YXR1cmVzKGNvbnN0IFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+JiB0YXJnZXQsIGNvbnN0IFZlY3Rv
cjxXR1BVRmVhdHVyZU5hbWU+JiByZWZlcmVuY2UpOworCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlQ2FwYWJpbGl0aWVzLm1t
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTRiM2Y1ZjIxY2M5NWFjNmFkNGIzOTlhMjYyZGU0Mjk5MTZmZTliYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlQ2FwYWJpbGl0aWVzLm1tCkBAIC0w
LDAgKzEsNjM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJIYXJkd2FyZUNhcGFiaWxpdGllcy5oIgor
CisjaW1wb3J0IDxhbGdvcml0aG0+CisjaW1wb3J0IDxsaW1pdHM+CisjaW1wb3J0IDx3dGYvTWF0
aEV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1BhZ2VCbG9jay5oPgorI2ltcG9ydCA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViR1BVIHsKKworLy8gaHR0cHM6Ly9kZXZlbG9wZXIu
YXBwbGUuY29tL21ldGFsL01ldGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5wZGYKKworLy8gRklYTUU6
IGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2lzc3Vlcy8yNzQ5IHdlIG5lZWQgbW9y
ZSBsaW1pdHMuCisKK3N0YXRpYyBIYXJkd2FyZUNhcGFiaWxpdGllczo6QmFzZUNhcGFiaWxpdGll
cyBiYXNlQ2FwYWJpbGl0aWVzKGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIGlkPE1UTENv
dW50ZXJTZXQ+IHRpbWVzdGFtcENvdW50ZXJTZXQgPSBuaWw7CisgICAgaWQ8TVRMQ291bnRlclNl
dD4gc3RhdGlzdGljQ291bnRlclNldCA9IG5pbDsKKworICAgIGZvciAoaWQ8TVRMQ291bnRlclNl
dD4gY291bnRlclNldCBpbiBkZXZpY2UuY291bnRlclNldHMpIHsKKyAgICAgICAgaWYgKFtjb3Vu
dGVyU2V0Lm5hbWUgaXNFcXVhbFRvU3RyaW5nOk1UTENvbW1vbkNvdW50ZXJTZXRUaW1lc3RhbXBd
KQorICAgICAgICAgICAgdGltZXN0YW1wQ291bnRlclNldCA9IGNvdW50ZXJTZXQ7CisgICAgICAg
IGVsc2UgaWYgKFtjb3VudGVyU2V0Lm5hbWUgaXNFcXVhbFRvU3RyaW5nOk1UTENvbW1vbkNvdW50
ZXJTZXRTdGF0aXN0aWNdKQorICAgICAgICAgICAgc3RhdGlzdGljQ291bnRlclNldCA9IGNvdW50
ZXJTZXQ7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgW2RldmljZSBhcmd1bWVudEJ1
ZmZlcnNTdXBwb3J0XSwKKyAgICAgICAgZmFsc2UsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUg
Y2FsbGVyLgorICAgICAgICB0aW1lc3RhbXBDb3VudGVyU2V0LAorICAgICAgICBzdGF0aXN0aWND
b3VudGVyU2V0LAorICAgIH07Cit9CisKK3N0YXRpYyBWZWN0b3I8V0dQVUZlYXR1cmVOYW1lPiBi
YXNlRmVhdHVyZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIGNvbnN0IEhhcmR3YXJlQ2FwYWJpbGl0
aWVzOjpCYXNlQ2FwYWJpbGl0aWVzJiBiYXNlQ2FwYWJpbGl0aWVzKQoreworICAgIFZlY3RvcjxX
R1BVRmVhdHVyZU5hbWU+IGZlYXR1cmVzOworCisgICAgLy8gRklYTUU6IERldGVybWluZSBpZiBX
R1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29udHJvbCBpcyBzdXBwb3J0ZWQuCisKKyNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorICAgIGlmIChkZXZpY2UuZGVwdGgy
NFN0ZW5jaWw4UGl4ZWxGb3JtYXRTdXBwb3J0ZWQpCisgICAgICAgIGZlYXR1cmVzLmFwcGVuZChX
R1BVRmVhdHVyZU5hbWVfRGVwdGgyNFVub3JtU3RlbmNpbDgpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oZGV2aWNlKTsKKyNlbmRpZgorCisgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVGZWF0dXJl
TmFtZV9EZXB0aDMyRmxvYXRTdGVuY2lsOCk7CisKKyAgICBpZiAoYmFzZUNhcGFiaWxpdGllcy50
aW1lc3RhbXBDb3VudGVyU2V0KQorICAgICAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVO
YW1lX1RpbWVzdGFtcFF1ZXJ5KTsKKworICAgIGlmIChiYXNlQ2FwYWJpbGl0aWVzLnN0YXRpc3Rp
Y0NvdW50ZXJTZXQpCisgICAgICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfUGlw
ZWxpbmVTdGF0aXN0aWNzUXVlcnkpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChkZXZp
Y2Uuc3VwcG9ydHNCQ1RleHR1cmVDb21wcmVzc2lvbikKKyAgICAgICAgZmVhdHVyZXMuYXBwZW5k
KFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25CQyk7CisjZW5kaWYKKworICAgIC8v
IFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25FVEMyIGFuZCBXR1BVRmVhdHVyZU5h
bWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyBhcmUgdG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxs
ZXIuCisKKyAgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGlmIFdHUFVGZWF0dXJlTmFtZV9JbmRpcmVj
dEZpcnN0SW5zdGFuY2UgaXMgc3VwcG9ydGVkLgorCisgICAgcmV0dXJuIGZlYXR1cmVzOworfQor
CitzdGF0aWMgSGFyZHdhcmVDYXBhYmlsaXRpZXMgYXBwbGUzKGlkPE1UTERldmljZT4gZGV2aWNl
KQoreworICAgIGF1dG8gYmFzZUNhcGFiaWxpdGllcyA9IFdlYkdQVTo6YmFzZUNhcGFiaWxpdGll
cyhkZXZpY2UpOworCisgICAgYmFzZUNhcGFiaWxpdGllcy5zdXBwb3J0c05vblByaXZhdGVEZXB0
aFN0ZW5jaWxUZXh0dXJlcyA9IHRydWU7CisKKyAgICBhdXRvIGZlYXR1cmVzID0gV2ViR1BVOjpi
YXNlRmVhdHVyZXMoZGV2aWNlLCBiYXNlQ2FwYWJpbGl0aWVzKTsKKworICAgIGZlYXR1cmVzLmFw
cGVuZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uRVRDMik7CisgICAgZmVhdHVy
ZXMuYXBwZW5kKFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25BU1RDKTsKKworICAg
IHN0ZDo6c29ydChmZWF0dXJlcy5iZWdpbigpLCBmZWF0dXJlcy5lbmQoKSk7CisKKyAgICB1aW50
MzJfdCBtYXhCaW5kR3JvdXBzID0gMzA7CisKKyAgICByZXR1cm4geworICAgICAgICB7CisgICAg
ICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMUQgKi8gICAgMTYzODQsCisgICAgICAgICAg
ICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYzODQsCisgICAgICAgICAgICAvKiBt
YXhUZXh0dXJlRGltZW5zaW9uM0QgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heFRleHR1
cmVBcnJheUxheWVycyAqLyAgICAyMDQ4LAorICAgICAgICAgICAgLyogbWF4QmluZEdyb3VwcyAq
LyAgICBtYXhCaW5kR3JvdXBzLAorICAgICAgICAgICAgLyogbWF4RHluYW1pY1VuaWZvcm1CdWZm
ZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpLAorICAgICAgICAgICAgLyogbWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxp
bmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAg
ICAgICAgICAgLyogbWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4Qmlu
ZEdyb3VwcyAqIDMxLAorICAgICAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAq
LyAgICBtYXhCaW5kR3JvdXBzICogMTYsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVy
c1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAzMSwKKyAgICAgICAgICAgIC8q
IG1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAz
MSwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAg
bWF4QmluZEdyb3VwcyAqIDMxLAorICAgICAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRp
bmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAg
ICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZp
bGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9m
ZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9m
ZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAq
LyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCisg
ICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAvKiBtYXhJbnRlclN0YWdl
U2hhZGVyQ29tcG9uZW50cyAqLyAgICA2MCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3Jr
Z3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAxNiAqIEtCLAorICAgICAgICAgICAgLyogbWF4Q29tcHV0
ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDUxMiwKKyAgICAgICAgICAgIC8qIG1heENv
bXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICA1MTIsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRl
V29ya2dyb3VwU2l6ZVkgKi8gICAgNTEyLAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtn
cm91cFNpemVaICovICAgIDUxMiwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBz
UGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgfSwKKyAgICAgICAgV1RGTW92ZShmZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBh
YmlsaXRpZXMsCisgICAgfTsKK30KKworc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGFwcGxl
NChpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBhdXRvIGJhc2VDYXBhYmlsaXRpZXMgPSBX
ZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNlKTsKKworICAgIGJhc2VDYXBhYmlsaXRpZXMu
c3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgPSB0cnVlOworCisgICAgYXV0
byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1cmVzKGRldmljZSwgYmFzZUNhcGFiaWxpdGll
cyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVz
c2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNv
bXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNvcnQoZmVhdHVyZXMuYmVnaW4oKSwgZmVhdHVy
ZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOworCisgICAgcmV0
dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICov
ICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2
Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisg
ICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwKKyAgICAgICAg
ICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKKyAgICAgICAgICAgIC8q
IG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNT
dG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNo
YWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8qIG1heFNh
bXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDE2LAorICAgICAgICAg
ICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBz
ICogOTYsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAq
LyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVy
c1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8q
IG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4g
YnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6
ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAg
IC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAg
IC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAg
IC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhB
dHRyaWJ1dGVzICovICAgIDMxLAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlT
dHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAg
ICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0LAorICAgICAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplICovICAgIDMyICogS0IsCisg
ICAgICAgICAgICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAy
NCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAor
ICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDEwMjQsCisgICAg
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogKi8gICAgMTAyNCwKKyAgICAgICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgfSwKKyAgICAgICAgV1RGTW92ZShm
ZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBhYmlsaXRpZXMsCisgICAgfTsKK30KKworc3RhdGlj
IEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGFwcGxlNShpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAg
ICBhdXRvIGJhc2VDYXBhYmlsaXRpZXMgPSBXZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNl
KTsKKworICAgIGJhc2VDYXBhYmlsaXRpZXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2ls
VGV4dHVyZXMgPSB0cnVlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1
cmVzKGRldmljZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQ
VUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVu
ZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNv
cnQoZmVhdHVyZXMuYmVnaW4oKSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4
QmluZEdyb3VwcyA9IDMwOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAg
LyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4
VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlM
YXllcnMgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4
QmluZEdyb3VwcywKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBp
cGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0
ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAg
IC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMg
KiA5NiwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4
QmluZEdyb3VwcyAqIDE2LAorICAgICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFk
ZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAgICAgICAgICAvKiBtYXhTdG9y
YWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAg
ICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRH
cm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAq
LyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8q
IG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4g
YnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGln
bm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGln
bm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAs
CisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAorICAgICAgICAg
ICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpLAorICAgICAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNv
bXBvbmVudHMgKi8gICAgMTI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0
b3JhZ2VTaXplICovICAgIDMyICogS0IsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlSW52b2Nh
dGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVX
b3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtn
cm91cFNpemVZICovICAgIDEwMjQsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vw
U2l6ZVogKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVy
RGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAg
ICAgICAgfSwKKyAgICAgICAgV1RGTW92ZShmZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBhYmls
aXRpZXMsCisgICAgfTsKK30KKworI2lmICFQTEFURk9STShXQVRDSE9TKQorc3RhdGljIEhhcmR3
YXJlQ2FwYWJpbGl0aWVzIGFwcGxlNihpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBhdXRv
IGJhc2VDYXBhYmlsaXRpZXMgPSBXZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNlKTsKKwor
ICAgIGJhc2VDYXBhYmlsaXRpZXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVy
ZXMgPSB0cnVlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1cmVzKGRl
dmljZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1
cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVuZChXR1BV
RmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNvcnQoZmVh
dHVyZXMuYmVnaW4oKSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4QmluZEdy
b3VwcyA9IDMwOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF4
VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVu
c2lvbjNEICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMg
Ki8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdy
b3VwcywKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5l
TGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAg
ICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1h
eFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAw
MDAgLyAyLAorICAgICAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBt
YXhCaW5kR3JvdXBzICogMTAyNCwKKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVy
U2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAg
ICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBz
ICogNTAwMDAwIC8gMiwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVy
U3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAgICAvKiBt
YXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5
IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUg
Ki8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAv
KiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCisgICAgICAgICAgICAv
KiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCisgICAgICAgICAgICAv
KiBtYXhWZXJ0ZXhCdWZmZXJzICovICAgIDMwLAorICAgICAgICAgICAgLyogbWF4VmVydGV4QXR0
cmlidXRlcyAqLyAgICAzMSwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFycmF5U3Ry
aWRlICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAg
ICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzICovICAgIDEyNCwKKyAgICAgICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtCLAorICAg
ICAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQs
CisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAyNCwKKyAg
ICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAorICAgICAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCisgICAgICAgICAg
ICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgIH0sCisgICAgICAgIFdURk1vdmUoZmVh
dHVyZXMpLAorICAgICAgICBiYXNlQ2FwYWJpbGl0aWVzLAorICAgIH07Cit9CisKK3N0YXRpYyBI
YXJkd2FyZUNhcGFiaWxpdGllcyBhcHBsZTcoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAg
YXV0byBiYXNlQ2FwYWJpbGl0aWVzID0gV2ViR1BVOjpiYXNlQ2FwYWJpbGl0aWVzKGRldmljZSk7
CisKKyAgICBiYXNlQ2FwYWJpbGl0aWVzLnN1cHBvcnRzTm9uUHJpdmF0ZURlcHRoU3RlbmNpbFRl
eHR1cmVzID0gdHJ1ZTsKKworICAgIGF1dG8gZmVhdHVyZXMgPSBXZWJHUFU6OmJhc2VGZWF0dXJl
cyhkZXZpY2UsIGJhc2VDYXBhYmlsaXRpZXMpOworCisgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVG
ZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25FVEMyKTsKKyAgICBmZWF0dXJlcy5hcHBlbmQo
V0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEMpOworCisgICAgc3RkOjpzb3J0
KGZlYXR1cmVzLmJlZ2luKCksIGZlYXR1cmVzLmVuZCgpKTsKKworICAgIHVpbnQzMl90IG1heEJp
bmRHcm91cHMgPSAzMDsKKworICAgIHJldHVybiB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC8q
IG1heFRleHR1cmVEaW1lbnNpb24xRCAqLyAgICAxNjM4NCwKKyAgICAgICAgICAgIC8qIG1heFRl
eHR1cmVEaW1lbnNpb24yRCAqLyAgICAxNjM4NCwKKyAgICAgICAgICAgIC8qIG1heFRleHR1cmVE
aW1lbnNpb24zRCAqLyAgICAyMDQ4LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZUFycmF5TGF5
ZXJzICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIG1heEJp
bmRHcm91cHMsCisgICAgICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBl
bGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisg
ICAgICAgICAgICAvKiBtYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAq
LyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAv
KiBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICog
NTAwMDAwIC8gMiwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8g
ICAgbWF4QmluZEdyb3VwcyAqIDEwMjQsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVy
c1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAorICAgICAg
ICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdy
b3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNo
YWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAorICAgICAgICAgICAg
LyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBp
biBieSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdT
aXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAgICAg
ICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAg
ICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAg
ICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRl
eEF0dHJpYnV0ZXMgKi8gICAgMzEsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJh
eVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAg
ICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAxMjQsCisgICAg
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIgKiBLQiwK
KyAgICAgICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCAqLyAgICAx
MDI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAgIDEwMjQs
CisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMTAyNCwKKyAg
ICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICAxMDI0LAorICAgICAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gKi8gICAgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAgICB9LAorICAgICAgICBXVEZNb3Zl
KGZlYXR1cmVzKSwKKyAgICAgICAgYmFzZUNhcGFiaWxpdGllcywKKyAgICB9OworfQorI2VuZGlm
CisKK3N0YXRpYyBIYXJkd2FyZUNhcGFiaWxpdGllcyBtYWMyKGlkPE1UTERldmljZT4gZGV2aWNl
KQoreworICAgIGF1dG8gYmFzZUNhcGFiaWxpdGllcyA9IFdlYkdQVTo6YmFzZUNhcGFiaWxpdGll
cyhkZXZpY2UpOworCisgICAgYmFzZUNhcGFiaWxpdGllcy5zdXBwb3J0c05vblByaXZhdGVEZXB0
aFN0ZW5jaWxUZXh0dXJlcyA9IGZhbHNlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6
YmFzZUZlYXR1cmVzKGRldmljZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBzdGQ6OnNvcnQo
ZmVhdHVyZXMuYmVnaW4oKSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgYnVmZmVy
c1BlckJpbmRHcm91cCA9IDA7CisgICAgdWludDMyX3QgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSAw
OworICAgIHVpbnQzMl90IHNhbXBsZXJzUGVyQmluZEdyb3VwID0gMDsKKyAgICBzd2l0Y2ggKGJh
c2VDYXBhYmlsaXRpZXMuYXJndW1lbnRCdWZmZXJzVGllcikgeworICAgIGNhc2UgTVRMQXJndW1l
bnRCdWZmZXJzVGllcjE6CisgICAgICAgIGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSA2NDsKKyAgICAg
ICAgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSAxMjg7CisgICAgICAgIHNhbXBsZXJzUGVyQmluZEdy
b3VwID0gMTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTVRMQXJndW1lbnRCdWZmZXJzVGll
cjI6CisgICAgICAgIGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSA1MDAwMDAgLyAyOworICAgICAgICB0
ZXh0dXJlc1BlckJpbmRHcm91cCA9IDUwMDAwMCAvIDI7CisgICAgICAgIHNhbXBsZXJzUGVyQmlu
ZEdyb3VwID0gMTAyNDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdWludDMyX3QgbWF4
QmluZEdyb3VwcyA9IDMwOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAg
LyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4
VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlM
YXllcnMgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4
QmluZEdyb3VwcywKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBp
cGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0
ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAg
IC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMg
KiB0ZXh0dXJlc1BlckJpbmRHcm91cCwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hh
ZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIHNhbXBsZXJzUGVyQmluZEdyb3VwLAorICAg
ICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5k
R3JvdXBzICogYnVmZmVyc1BlckJpbmRHcm91cCwKKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VU
ZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiB0ZXh0dXJlc1BlckJp
bmRHcm91cCwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2Ug
Ki8gICAgbWF4QmluZEdyb3VwcyAqIGJ1ZmZlcnNQZXJCaW5kR3JvdXAsCisgICAgICAgICAgICAv
KiBtYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGlu
IGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1Np
emUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAg
ICAvKiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDI1NiwKKyAgICAgICAg
ICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgMjU2LAorICAgICAg
ICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZl
cnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJB
cnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisg
ICAgICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAzMiwKKyAg
ICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtC
LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAg
IDEwMjQsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAy
NCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAor
ICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCisgICAg
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgIH0sCisgICAgICAgIFdURk1v
dmUoZmVhdHVyZXMpLAorICAgICAgICBiYXNlQ2FwYWJpbGl0aWVzLAorICAgIH07Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFQgbWVyZ2VNYXhpbXVtKFQgcHJldmlvdXMsIFQg
bmV4dCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNsaW1pdC1j
bGFzcy1tYXhpbXVtCisgICAgcmV0dXJuIHN0ZDo6bWF4KHByZXZpb3VzLCBuZXh0KTsKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFQgbWVyZ2VBbGlnbm1lbnQoVCBwcmV2aW91
cywgVCBuZXh0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2xp
bWl0LWNsYXNzLWFsaWdubWVudAorICAgIHJldHVybiBzdGQ6Om1pbihXVEY6OnJvdW5kVXBUb1Bv
d2VyT2ZUd28ocHJldmlvdXMpLCBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28obmV4dCkpOworfTsK
Kworc3RhdGljIFdHUFVMaW1pdHMgbWVyZ2VMaW1pdHMoY29uc3QgV0dQVUxpbWl0cyYgcHJldmlv
dXMsIGNvbnN0IFdHUFVMaW1pdHMmIG5leHQpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgbWVy
Z2VNYXhpbXVtKHByZXZpb3VzLm1heFRleHR1cmVEaW1lbnNpb24xRCwgbmV4dC5tYXhUZXh0dXJl
RGltZW5zaW9uMUQpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VGV4dHVyZURp
bWVuc2lvbjJELCBuZXh0Lm1heFRleHR1cmVEaW1lbnNpb24yRCksCisgICAgICAgIG1lcmdlTWF4
aW11bShwcmV2aW91cy5tYXhUZXh0dXJlRGltZW5zaW9uM0QsIG5leHQubWF4VGV4dHVyZURpbWVu
c2lvbjNEKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFRleHR1cmVBcnJheUxh
eWVycywgbmV4dC5tYXhUZXh0dXJlQXJyYXlMYXllcnMpLAorICAgICAgICBtZXJnZU1heGltdW0o
cHJldmlvdXMubWF4QmluZEdyb3VwcywgbmV4dC5tYXhCaW5kR3JvdXBzKSwKKyAgICAgICAgbWVy
Z2VNYXhpbXVtKHByZXZpb3VzLm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5
b3V0LCBuZXh0Lm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0KSwKKyAg
ICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBp
cGVsaW5lTGF5b3V0LCBuZXh0Lm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5
b3V0KSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFNhbXBsZWRUZXh0dXJlc1Bl
clNoYWRlclN0YWdlLCBuZXh0Lm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlKSwKKyAg
ICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsIG5l
eHQubWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2
aW91cy5tYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlLCBuZXh0Lm1heFN0b3JhZ2VCdWZm
ZXJzUGVyU2hhZGVyU3RhZ2UpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4U3Rv
cmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UsIG5leHQubWF4U3RvcmFnZVRleHR1cmVzUGVyU2hh
ZGVyU3RhZ2UpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VW5pZm9ybUJ1ZmZl
cnNQZXJTaGFkZXJTdGFnZSwgbmV4dC5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlKSwK
KyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6
ZSwgbmV4dC5tYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUpLAorICAgICAgICBtZXJnZU1heGlt
dW0ocHJldmlvdXMubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplLCBuZXh0Lm1heFN0b3JhZ2VC
dWZmZXJCaW5kaW5nU2l6ZSksCisgICAgICAgIG1lcmdlQWxpZ25tZW50KHByZXZpb3VzLm1pblVu
aWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQsIG5leHQubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFs
aWdubWVudCksCisgICAgICAgIG1lcmdlQWxpZ25tZW50KHByZXZpb3VzLm1pblN0b3JhZ2VCdWZm
ZXJPZmZzZXRBbGlnbm1lbnQsIG5leHQubWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCks
CisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhWZXJ0ZXhCdWZmZXJzLCBuZXh0Lm1h
eFZlcnRleEJ1ZmZlcnMpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VmVydGV4
QXR0cmlidXRlcywgbmV4dC5tYXhWZXJ0ZXhBdHRyaWJ1dGVzKSwKKyAgICAgICAgbWVyZ2VNYXhp
bXVtKHByZXZpb3VzLm1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlLCBuZXh0Lm1heFZlcnRleEJ1
ZmZlckFycmF5U3RyaWRlKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heEludGVy
U3RhZ2VTaGFkZXJDb21wb25lbnRzLCBuZXh0Lm1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRz
KSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heENvbXB1dGVXb3JrZ3JvdXBTdG9y
YWdlU2l6ZSwgbmV4dC5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUpLAorICAgICAgICBt
ZXJnZU1heGltdW0ocHJldmlvdXMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLCBu
ZXh0Lm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCksCisgICAgICAgIG1lcmdlTWF4
aW11bShwcmV2aW91cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgsIG5leHQubWF4Q29tcHV0ZVdv
cmtncm91cFNpemVYKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heENvbXB1dGVX
b3JrZ3JvdXBTaXplWSwgbmV4dC5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkpLAorICAgICAgICBt
ZXJnZU1heGltdW0ocHJldmlvdXMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaLCBuZXh0Lm1heENv
bXB1dGVXb3JrZ3JvdXBTaXplWiksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhD
b21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiwgbmV4dC5tYXhDb21wdXRlV29ya2dyb3Vwc1Bl
ckRpbWVuc2lvbiksCisgICAgfTsKK307CisKK3N0YXRpYyBWZWN0b3I8V0dQVUZlYXR1cmVOYW1l
PiBtZXJnZUZlYXR1cmVzKGNvbnN0IFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+JiBwcmV2aW91cywg
Y29uc3QgVmVjdG9yPFdHUFVGZWF0dXJlTmFtZT4mIG5leHQpCit7CisgICAgQVNTRVJUKFdURjo6
aXNTb3J0ZWRDb25zdEV4cHIocHJldmlvdXMuYmVnaW4oKSwgcHJldmlvdXMuZW5kKCkpKTsKKyAg
ICBBU1NFUlQoV1RGOjppc1NvcnRlZENvbnN0RXhwcihuZXh0LmJlZ2luKCksIG5leHQuZW5kKCkp
KTsKKworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+IHJlc3VsdChwcmV2aW91cy5zaXplKCkg
KyBuZXh0LnNpemUoKSk7CisgICAgYXV0byBlbmQgPSBtZXJnZURlZHVwbGljYXRlZFNvcnRlZChw
cmV2aW91cy5iZWdpbigpLCBwcmV2aW91cy5lbmQoKSwgbmV4dC5iZWdpbigpLCBuZXh0LmVuZCgp
LCByZXN1bHQuYmVnaW4oKSk7CisgICAgcmVzdWx0LnJlc2l6ZShlbmQgLSByZXN1bHQuYmVnaW4o
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0aWVz
OjpCYXNlQ2FwYWJpbGl0aWVzIG1lcmdlQmFzZUNhcGFiaWxpdGllcyhjb25zdCBIYXJkd2FyZUNh
cGFiaWxpdGllczo6QmFzZUNhcGFiaWxpdGllcyYgcHJldmlvdXMsIGNvbnN0IEhhcmR3YXJlQ2Fw
YWJpbGl0aWVzOjpCYXNlQ2FwYWJpbGl0aWVzJiBuZXh0KQoreworICAgIEFTU0VSVChwcmV2aW91
cy5hcmd1bWVudEJ1ZmZlcnNUaWVyID09IG5leHQuYXJndW1lbnRCdWZmZXJzVGllcik7CisgICAg
QVNTRVJUKCFwcmV2aW91cy50aW1lc3RhbXBDb3VudGVyU2V0IHx8IFtwcmV2aW91cy50aW1lc3Rh
bXBDb3VudGVyU2V0IGlzRXF1YWw6bmV4dC50aW1lc3RhbXBDb3VudGVyU2V0XSk7CisgICAgQVNT
RVJUKCFwcmV2aW91cy5zdGF0aXN0aWNDb3VudGVyU2V0IHx8IFtwcmV2aW91cy5zdGF0aXN0aWND
b3VudGVyU2V0IGlzRXF1YWw6bmV4dC5zdGF0aXN0aWNDb3VudGVyU2V0XSk7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgcHJldmlvdXMuYXJndW1lbnRCdWZmZXJzVGllciwKKyAgICAgICAgcHJldmlv
dXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgfHwgbmV4dC5zdXBwb3J0
c05vblByaXZhdGVEZXB0aFN0ZW5jaWxUZXh0dXJlcywKKyAgICAgICAgcHJldmlvdXMudGltZXN0
YW1wQ291bnRlclNldCwKKyAgICAgICAgcHJldmlvdXMuc3RhdGlzdGljQ291bnRlclNldCwKKyAg
ICB9OworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxIYXJkd2FyZUNhcGFiaWxpdGllcz4gcmF3
SGFyZHdhcmVDYXBhYmlsaXRpZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgc3RkOjpv
cHRpb25hbDxIYXJkd2FyZUNhcGFiaWxpdGllcz4gcmVzdWx0OworCisgICAgYXV0byBtZXJnZSA9
IFsmXShjb25zdCBIYXJkd2FyZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKSB7CisgICAgICAg
IGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBjYXBhYmlsaXRpZXM7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQtPmxpbWl0cyA9IG1l
cmdlTGltaXRzKHJlc3VsdC0+bGltaXRzLCBjYXBhYmlsaXRpZXMubGltaXRzKTsKKyAgICAgICAg
cmVzdWx0LT5mZWF0dXJlcyA9IG1lcmdlRmVhdHVyZXMocmVzdWx0LT5mZWF0dXJlcywgY2FwYWJp
bGl0aWVzLmZlYXR1cmVzKTsKKyAgICAgICAgcmVzdWx0LT5iYXNlQ2FwYWJpbGl0aWVzID0gbWVy
Z2VCYXNlQ2FwYWJpbGl0aWVzKHJlc3VsdC0+YmFzZUNhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVz
LmJhc2VDYXBhYmlsaXRpZXMpOworICAgIH07CisKKyAgICAvLyBUaGUgZmVhdHVyZSBzZXQgdGFi
bGVzIGRvIG5vdCBsaXN0IGxpbWl0cyBmb3IgTVRMR1BVRmFtaWx5Q29tbW9uMSwgTVRMR1BVRmFt
aWx5Q29tbW9uMiwgb3IgTVRMR1BVRmFtaWx5Q29tbW9uMy4KKyAgICAvLyBNVExHUFVGYW1pbHlB
cHBsZTEgYW5kIE1UTEdQVUZhbWlseUFwcGxlMiBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICBpZiAo
W2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNdKQorICAgICAgICBtZXJn
ZShhcHBsZTMoZGV2aWNlKSk7CisgICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BV
RmFtaWx5QXBwbGU0XSkKKyAgICAgICAgbWVyZ2UoYXBwbGU0KGRldmljZSkpOworICAgIGlmIChb
ZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlNV0pCisgICAgICAgIG1lcmdl
KGFwcGxlNShkZXZpY2UpKTsKKyNpZiAhUExBVEZPUk0oV0FUQ0hPUykKKyAgICBpZiAoW2Rldmlj
ZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTZdKQorICAgICAgICBtZXJnZShhcHBs
ZTYoZGV2aWNlKSk7CisgICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5
QXBwbGU3XSkKKyAgICAgICAgbWVyZ2UoYXBwbGU3KGRldmljZSkpOworI2VuZGlmCisgICAgLy8g
TVRMR1BVRmFtaWx5TWFjMSBpcyBub3Qgc3VwcG9ydGVkICh5ZXQ/KS4KKyAgICBpZiAoW2Rldmlj
ZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlNYWMyXSkKKyAgICAgICAgbWVyZ2UobWFjMihk
ZXZpY2UpKTsKKworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgYXV0byBtYXhCdWZmZXJMZW5n
dGggPSBkZXZpY2UubWF4QnVmZmVyTGVuZ3RoOworICAgICAgICByZXN1bHQtPmxpbWl0cy5tYXhV
bmlmb3JtQnVmZmVyQmluZGluZ1NpemUgPSBtYXhCdWZmZXJMZW5ndGg7CisgICAgICAgIHJlc3Vs
dC0+bGltaXRzLm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSA9IG1heEJ1ZmZlckxlbmd0aDsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGFueUxpbWl0SXNCZXR0ZXJU
aGFuKGNvbnN0IFdHUFVMaW1pdHMmIHRhcmdldCwgY29uc3QgV0dQVUxpbWl0cyYgcmVmZXJlbmNl
KQoreworICAgIGlmICh0YXJnZXQubWF4VGV4dHVyZURpbWVuc2lvbjFEID4gcmVmZXJlbmNlLm1h
eFRleHR1cmVEaW1lbnNpb24xRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdl
dC5tYXhUZXh0dXJlRGltZW5zaW9uMkQgPiByZWZlcmVuY2UubWF4VGV4dHVyZURpbWVuc2lvbjJE
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heFRleHR1cmVEaW1lbnNp
b24zRCA+IHJlZmVyZW5jZS5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmICh0YXJnZXQubWF4VGV4dHVyZUFycmF5TGF5ZXJzID4gcmVmZXJlbmNlLm1h
eFRleHR1cmVBcnJheUxheWVycykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdl
dC5tYXhCaW5kR3JvdXBzID4gcmVmZXJlbmNlLm1heEJpbmRHcm91cHMpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmICh0YXJnZXQubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxp
bmVMYXlvdXQgPiByZWZlcmVuY2UubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVM
YXlvdXQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4RHluYW1pY1N0
b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgPiByZWZlcmVuY2UubWF4RHluYW1pY1N0b3Jh
Z2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
ICh0YXJnZXQubWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4
U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmICh0YXJnZXQubWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTYW1w
bGVyc1BlclNoYWRlclN0YWdlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0
Lm1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1
ZmZlcnNQZXJTaGFkZXJTdGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdl
dC5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTdG9yYWdl
VGV4dHVyZXNQZXJTaGFkZXJTdGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRh
cmdldC5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlID4gcmVmZXJlbmNlLm1heFVuaWZv
cm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0
YXJnZXQubWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplID4gcmVmZXJlbmNlLm1heFVuaWZvcm1C
dWZmZXJCaW5kaW5nU2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5t
YXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1ZmZlckJp
bmRpbmdTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1pblVuaWZv
cm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgPCByZWZlcmVuY2UubWluVW5pZm9ybUJ1ZmZlck9mZnNl
dEFsaWdubWVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5taW5TdG9y
YWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50IDwgcmVmZXJlbmNlLm1pblN0b3JhZ2VCdWZmZXJPZmZz
ZXRBbGlnbm1lbnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4VmVy
dGV4QnVmZmVycyA+IHJlZmVyZW5jZS5tYXhWZXJ0ZXhCdWZmZXJzKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heFZlcnRleEF0dHJpYnV0ZXMgPiByZWZlcmVuY2UubWF4
VmVydGV4QXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5t
YXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSA+IHJlZmVyZW5jZS5tYXhWZXJ0ZXhCdWZmZXJBcnJh
eVN0cmlkZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhJbnRlclN0
YWdlU2hhZGVyQ29tcG9uZW50cyA+IHJlZmVyZW5jZS5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9u
ZW50cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29y
a2dyb3VwU3RvcmFnZVNpemUgPiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VT
aXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVJbnZv
Y2F0aW9uc1Blcldvcmtncm91cCA+IHJlZmVyZW5jZS5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJX
b3JrZ3JvdXApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4Q29tcHV0
ZVdvcmtncm91cFNpemVYID4gcmVmZXJlbmNlLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU2l6
ZVkgPiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFNpemVZKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiA+IHJlZmVyZW5j
ZS5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVopCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
ICh0YXJnZXQubWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gPiByZWZlcmVuY2UubWF4
Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24pCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGluY2x1ZGVzVW5zdXBwb3J0ZWRGZWF0dXJlcyhj
b25zdCBWZWN0b3I8V0dQVUZlYXR1cmVOYW1lPiYgdGFyZ2V0LCBjb25zdCBWZWN0b3I8V0dQVUZl
YXR1cmVOYW1lPiYgcmVmZXJlbmNlKQoreworICAgIEFTU0VSVChXVEY6OmlzU29ydGVkQ29uc3RF
eHByKHRhcmdldC5iZWdpbigpLCB0YXJnZXQuZW5kKCkpKTsKKyAgICBBU1NFUlQoV1RGOjppc1Nv
cnRlZENvbnN0RXhwcihyZWZlcmVuY2UuYmVnaW4oKSwgcmVmZXJlbmNlLmVuZCgpKSk7CisgICAg
Zm9yIChhdXRvIGZlYXR1cmUgOiB0YXJnZXQpIHsKKyAgICAgICAgaWYgKCFzdGQ6OmZpbmQocmVm
ZXJlbmNlLmJlZ2luKCksIHJlZmVyZW5jZS5lbmQoKSwgZmVhdHVyZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXR1BVTGltaXRzIGRl
ZmF1bHRMaW1pdHMoKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2xpbWl0LWRlZmF1bHQKKworICAgIHJldHVybiB7CisgICAgICAgIC8qIG1heFRleHR1cmVEaW1l
bnNpb24xRCAqLyAgICA4MTkyLAorICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8g
ICAgODE5MiwKKyAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisg
ICAgICAgIC8qIG1heFRleHR1cmVBcnJheUxheWVycyAqLyAgICAyNTYsCisgICAgICAgIC8qIG1h
eEJpbmRHcm91cHMgKi8gICAgNCwKKyAgICAgICAgLyogbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJz
UGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgOCwKKyAgICAgICAgLyogbWF4RHluYW1pY1N0b3JhZ2VC
dWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgNCwKKyAgICAgICAgLyogbWF4U2FtcGxlZFRl
eHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgMTYsCisgICAgICAgIC8qIG1heFNhbXBsZXJzUGVy
U2hhZGVyU3RhZ2UgKi8gICAgMTYsCisgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVyU2hh
ZGVyU3RhZ2UgKi8gICAgOCwKKyAgICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVy
U3RhZ2UgKi8gICAgNCwKKyAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFn
ZSAqLyAgICAxMiwKKyAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplICovICAg
IDY1NTM2LAorICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMTM0
MjE3NzI4LAorICAgICAgICAvKiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAg
IDI1NiwKKyAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICAy
NTYsCisgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgOCwKKyAgICAgICAgLyogbWF4
VmVydGV4QXR0cmlidXRlcyAqLyAgICAxNiwKKyAgICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJy
YXlTdHJpZGUgKi8gICAgMjA0OCwKKyAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBv
bmVudHMgKi8gICAgMzIsCisgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6
ZSAqLyAgICAxNjM1MiwKKyAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dy
b3VwICovICAgIDI1NiwKKyAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAg
IDI1NiwKKyAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDI1NiwKKyAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDY0LAorICAgICAgICAvKiBt
YXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICA2NTUzNSwKKyAgICB9OworfQor
CitzdGQ6Om9wdGlvbmFsPEhhcmR3YXJlQ2FwYWJpbGl0aWVzPiBoYXJkd2FyZUNhcGFiaWxpdGll
cyhpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHJhd0hhcmR3YXJl
Q2FwYWJpbGl0aWVzKGRldmljZSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGlmIChhbnlMaW1pdElzQmV0dGVyVGhhbihkZWZhdWx0TGlt
aXRzKCksIHJlc3VsdC0+bGltaXRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgaXNWYWxpZChjb25zdCBXR1BVTGltaXRzJiBs
aW1pdHMpCit7CisgICAgcmV0dXJuIGlzUG93ZXJPZlR3byhsaW1pdHMubWluVW5pZm9ybUJ1ZmZl
ck9mZnNldEFsaWdubWVudCkgJiYgaXNQb3dlck9mVHdvKGxpbWl0cy5taW5TdG9yYWdlQnVmZmVy
T2Zmc2V0QWxpZ25tZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9IYXJkd2FyZUxpbWl0cy5oIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvSGFyZHdhcmVMaW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQy
NTNlNzhmNjQ3OGRiYWZkMDQ5ZWJjYTQ3OGYzYWQ0ZGRmNTNlYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9IYXJkd2Fy
ZUxpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDxvcHRpb25hbD4KLQotbmFtZXNwYWNlIFdlYkdQVSB7Ci0KLXN0ZDo6b3B0aW9uYWw8V0dQ
VUxpbWl0cz4gbGltaXRzKGlkPE1UTERldmljZT4pOwotYm9vbCBpc1ZhbGlkKGNvbnN0IFdHUFVM
aW1pdHMmKTsKLWJvb2wgYW55TGltaXRJc0JldHRlclRoYW4oY29uc3QgV0dQVUxpbWl0cyYgdGFy
Z2V0LCBjb25zdCBXR1BVTGltaXRzJiByZWZlcmVuY2UpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJH
UFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlTGltaXRzLm1tIGIv
U291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVMaW1pdHMubW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDZlMjFiMjViMmM3YTdmNTY5Nzk0NWE1N2VkYWYyNGI3NWI0YWJiYTkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvSGFyZHdhcmVMaW1pdHMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiSGFyZHdhcmVMaW1pdHMuaCIKLQotI2ltcG9ydCA8YWxnb3Jp
dGhtPgotI2ltcG9ydCA8bGltaXRzPgotI2ltcG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbXBv
cnQgPHd0Zi9QYWdlQmxvY2suaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkdQVSB7Ci0KLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9tZXRhbC9N
ZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmCi0KLS8vIEZJWE1FOiBodHRwczovL2dpdGh1Yi5j
b20vZ3B1d2ViL2dwdXdlYi9pc3N1ZXMvMjc0OSB3ZSBuZWVkIG1vcmUgbGltaXRzLgotCi1jb25z
dGV4cHIgc3RhdGljIFdHUFVMaW1pdHMgYXBwbGUzKCkKLXsKLSAgICB1aW50MzJfdCBtYXhCaW5k
R3JvdXBzID0gMzA7Ci0KLSAgICByZXR1cm4gV0dQVUxpbWl0cyB7Ci0gICAgICAgIC8qIG1heFRl
eHR1cmVEaW1lbnNpb24xRCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVu
c2lvbjJEICovICAgIDE2Mzg0LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uM0QgKi8g
ICAgMjA0OCwKLSAgICAgICAgLyogbWF4VGV4dHVyZUFycmF5TGF5ZXJzICovICAgIDIwNDgsCi0g
ICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKLSAgICAgICAgLyog
bWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhEeW5hbWljU3RvcmFn
ZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdl
ICovICAgIG1heEJpbmRHcm91cHMgKiAzMSwKLSAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFk
ZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogMTYsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VC
dWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDMxLAotICAgICAgICAv
KiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICog
MzEsCi0gICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4
QmluZEdyb3VwcyAqIDMxLAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUg
Ki8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1h
eFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkg
dGhlIGNhbGxlci4KLSAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAq
LyAgICA0LAotICAgICAgICAvKiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAg
IDQsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCi0gICAgICAgIC8qIG1h
eFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFy
cmF5U3RyaWRlICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAg
ICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgNjAsCi0gICAgICAg
IC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAxNiAqIEtCLAotICAgICAg
ICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgNTEyLAotICAgICAg
ICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgNTEyLAotICAgICAgICAvKiBtYXhD
b21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgNTEyLAotICAgICAgICAvKiBtYXhDb21wdXRlV29y
a2dyb3VwU2l6ZVogKi8gICAgNTEyLAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1Bl
ckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0g
ICAgfTsKLX0KLQotY29uc3RleHByIHN0YXRpYyBXR1BVTGltaXRzIGFwcGxlNCgpCi17Ci0gICAg
dWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOwotCi0gICAgcmV0dXJuIFdHUFVMaW1pdHMgewot
ICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMUQgKi8gICAgMTYzODQsCi0gICAgICAgIC8q
IG1heFRleHR1cmVEaW1lbnNpb24yRCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjNEICovICAgIDIwNDgsCi0gICAgICAgIC8qIG1heFRleHR1cmVBcnJheUxheWVy
cyAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIG1heEJpbmRHcm91
cHMsCi0gICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0
ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyog
bWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhTYW1wbGVkVGV4dHVy
ZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCi0gICAgICAgIC8qIG1h
eFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDE2LAotICAgICAg
ICAvKiBtYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMg
KiA5NiwKLSAgICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAg
bWF4QmluZEdyb3VwcyAqIDk2LAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRl
clN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1
ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVy
LgotICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8g
YmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJP
ZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKLSAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNl
dEFsaWdubWVudCAqLyAgICA0LAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJzICovICAgIDMw
LAotICAgICAgICAvKiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAotICAgICAgICAvKiBt
YXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzICov
ICAgIDEyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplICovICAg
IDMyICogS0IsCi0gICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCAq
LyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAy
NCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDEwMjQsCi0gICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICAxMDI0LAotICAgICAgICAvKiBt
YXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCksCi0gICAgfTsKLX0KLQotY29uc3RleHByIHN0YXRpYyBXR1BVTGlt
aXRzIGFwcGxlNSgpCi17Ci0gICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOwotCi0gICAg
cmV0dXJuIFdHUFVMaW1pdHMgewotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMUQgKi8g
ICAgMTYzODQsCi0gICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24yRCAqLyAgICAxNjM4NCwK
LSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgsCi0gICAgICAgIC8q
IG1heFRleHR1cmVBcnJheUxheWVycyAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhCaW5kR3Jv
dXBzICovICAgIG1heEJpbmRHcm91cHMsCi0gICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVm
ZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwKLSAgICAgICAgLyogbWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVM
YXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAg
ICAvKiBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBz
ICogOTYsCi0gICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4Qmlu
ZEdyb3VwcyAqIDE2LAotICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdl
ICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKLSAgICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVz
UGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDk2LAotICAgICAgICAvKiBtYXhV
bmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKLSAg
ICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZp
bGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGlu
Z1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAg
IC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKLSAgICAgICAgLyog
bWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAotICAgICAgICAvKiBtYXhW
ZXJ0ZXhCdWZmZXJzICovICAgIDMwLAotICAgICAgICAvKiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICov
ICAgIDMxLAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heEludGVyU3Rh
Z2VTaGFkZXJDb21wb25lbnRzICovICAgIDEyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtn
cm91cFN0b3JhZ2VTaXplICovICAgIDMyICogS0IsCi0gICAgICAgIC8qIG1heENvbXB1dGVJbnZv
Y2F0aW9uc1Blcldvcmtncm91cCAqLyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29y
a2dyb3VwU2l6ZVggKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNp
emVZICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAg
ICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAg
ICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAgfTsKLX0KLQotI2lm
ICFQTEFURk9STShXQVRDSE9TKQotY29uc3RleHByIHN0YXRpYyBXR1BVTGltaXRzIGFwcGxlNigp
Ci17Ci0gICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOwotCi0gICAgcmV0dXJuIFdHUFVM
aW1pdHMgewotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMUQgKi8gICAgMTYzODQsCi0g
ICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24yRCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyog
bWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgsCi0gICAgICAgIC8qIG1heFRleHR1cmVB
cnJheUxheWVycyAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIG1h
eEJpbmRHcm91cHMsCi0gICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVs
aW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAg
ICAgICAgLyogbWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAg
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhTYW1w
bGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogNTAwMDAwIC8g
MiwKLSAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3Jv
dXBzICogMTAyNCwKLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAq
LyAgICBtYXhCaW5kR3JvdXBzICogNTAwMDAwIC8gMiwKLSAgICAgICAgLyogbWF4U3RvcmFnZVRl
eHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCi0g
ICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdy
b3VwcyAqIDUwMDAwMCAvIDIsCi0gICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6
ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KLSAgICAgICAgLyog
bWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBi
eSB0aGUgY2FsbGVyLgotICAgICAgICAvKiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50
ICovICAgIDQsCi0gICAgICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8g
ICAgNCwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICAzMCwKLSAgICAgICAgLyog
bWF4VmVydGV4QXR0cmlidXRlcyAqLyAgICAzMSwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVy
QXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAot
ICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAxMjQsCi0gICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtCLAotICAg
ICAgICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAyNCwKLSAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAgIDEwMjQsCi0gICAgICAgIC8q
IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21w
dXRlV29ya2dyb3VwU2l6ZVogKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtn
cm91cHNQZXJEaW1lbnNpb24gKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpLAotICAgIH07Ci19Ci0KLWNvbnN0ZXhwciBzdGF0aWMgV0dQVUxpbWl0cyBhcHBsZTcoKQot
ewotICAgIHVpbnQzMl90IG1heEJpbmRHcm91cHMgPSAzMDsKLQotICAgIHJldHVybiBXR1BVTGlt
aXRzIHsKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAotICAg
ICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYzODQsCi0gICAgICAgIC8qIG1h
eFRleHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhUZXh0dXJlQXJy
YXlMYXllcnMgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4QmluZEdyb3VwcyAqLyAgICBtYXhC
aW5kR3JvdXBzLAotICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBlbGlu
ZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAg
ICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4U2FtcGxl
ZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIs
Ci0gICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3Vw
cyAqIDEwMjQsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8g
ICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0
dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAotICAg
ICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91
cHMgKiA1MDAwMDAgLyAyLAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUg
Ki8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1h
eFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkg
dGhlIGNhbGxlci4KLSAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAq
LyAgICA0LAotICAgICAgICAvKiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAg
IDQsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCi0gICAgICAgIC8qIG1h
eFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFy
cmF5U3RyaWRlICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAg
ICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0LAotICAgICAg
ICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIgKiBLQiwKLSAgICAg
ICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQsCi0gICAg
ICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAotICAgICAgICAvKiBt
YXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0
ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3Jv
dXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwKLSAgICB9OwotfQotI2VuZGlmCi0KLXN0YXRpYyBXR1BVTGltaXRzIG1hYzIoaWQ8TVRMRGV2
aWNlPiBkZXZpY2UpCi17Ci0gICAgdWludDMyX3QgYnVmZmVyc1BlckJpbmRHcm91cCA9IDA7Ci0g
ICAgdWludDMyX3QgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSAwOwotICAgIHVpbnQzMl90IHNhbXBs
ZXJzUGVyQmluZEdyb3VwID0gMDsKLSAgICBzd2l0Y2ggKFtkZXZpY2UgYXJndW1lbnRCdWZmZXJz
U3VwcG9ydF0pIHsKLSAgICBjYXNlIE1UTEFyZ3VtZW50QnVmZmVyc1RpZXIxOgotICAgICAgICBi
dWZmZXJzUGVyQmluZEdyb3VwID0gNjQ7Ci0gICAgICAgIHRleHR1cmVzUGVyQmluZEdyb3VwID0g
MTI4OwotICAgICAgICBzYW1wbGVyc1BlckJpbmRHcm91cCA9IDE2OwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE1UTEFyZ3VtZW50QnVmZmVyc1RpZXIyOgotICAgICAgICBidWZmZXJzUGVyQmlu
ZEdyb3VwID0gNTAwMDAwIC8gMjsKLSAgICAgICAgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSA1MDAw
MDAgLyAyOwotICAgICAgICBzYW1wbGVyc1BlckJpbmRHcm91cCA9IDEwMjQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHVpbnQzMl90IG1heEJpbmRHcm91cHMgPSAzMDsKLQotICAgIHJl
dHVybiBXR1BVTGltaXRzIHsKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAg
IDE2Mzg0LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYzODQsCi0g
ICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4LAotICAgICAgICAvKiBt
YXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4QmluZEdyb3Vw
cyAqLyAgICBtYXhCaW5kR3JvdXBzLAotICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZl
cnNQZXJQaXBlbGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksCi0gICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5
b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAg
LyogbWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAq
IHRleHR1cmVzUGVyQmluZEdyb3VwLAotICAgICAgICAvKiBtYXhTYW1wbGVyc1BlclNoYWRlclN0
YWdlICovICAgIG1heEJpbmRHcm91cHMgKiBzYW1wbGVyc1BlckJpbmRHcm91cCwKLSAgICAgICAg
LyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICog
YnVmZmVyc1BlckJpbmRHcm91cCwKLSAgICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hh
ZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIHRleHR1cmVzUGVyQmluZEdyb3VwLAotICAg
ICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91
cHMgKiBidWZmZXJzUGVyQmluZEdyb3VwLAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmlu
ZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAg
ICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxs
ZWQgaW4gYnkgdGhlIGNhbGxlci4KLSAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFs
aWdubWVudCAqLyAgICAyNTYsCi0gICAgICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGln
bm1lbnQgKi8gICAgMjU2LAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJzICovICAgIDMwLAot
ICAgICAgICAvKiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAotICAgICAgICAvKiBtYXhW
ZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzICovICAg
IDMyLAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIg
KiBLQiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAg
IDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAot
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMTAyNCwKLSAgICAgICAg
LyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENv
bXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSwKLSAgICB9OwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BVTGlt
aXRzPiByYXdMaW1pdHMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCi17Ci0gICAgc3RkOjpvcHRpb25h
bDxXR1BVTGltaXRzPiByZXN1bHQ7Ci0KLSAgICBhdXRvIG1lcmdlID0gWyZdKGNvbnN0IFdHUFVM
aW1pdHMmIGxpbWl0cykgewotICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgcmVz
dWx0ID0gbGltaXRzOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jbGltaXQtY2xhc3MtbWF4aW11bQot
ICAgICAgICBhdXRvIG1lcmdlTWF4aW11bSA9IFtdKGF1dG8gcHJldmlvdXMsIGF1dG8gbmV4dCkg
ewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHByZXZpb3VzLCBuZXh0KTsKLSAgICAgICAg
fTsKLQotICAgICAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNsaW1pdC1j
bGFzcy1hbGlnbm1lbnQKLSAgICAgICAgYXV0byBtZXJnZUFsaWdubWVudCA9IFtdKGF1dG8gcHJl
dmlvdXMsIGF1dG8gbmV4dCkgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKFdURjo6cm91
bmRVcFRvUG93ZXJPZlR3byhwcmV2aW91cyksIFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhuZXh0
KSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcmVzdWx0LT5tYXhUZXh0dXJlRGltZW5zaW9uMUQg
PSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhUZXh0dXJlRGltZW5zaW9uMUQsIGxpbWl0cy5tYXhU
ZXh0dXJlRGltZW5zaW9uMUQpOwotICAgICAgICByZXN1bHQtPm1heFRleHR1cmVEaW1lbnNpb24y
RCA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFRleHR1cmVEaW1lbnNpb24yRCwgbGltaXRzLm1h
eFRleHR1cmVEaW1lbnNpb24yRCk7Ci0gICAgICAgIHJlc3VsdC0+bWF4VGV4dHVyZURpbWVuc2lv
bjNEID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4VGV4dHVyZURpbWVuc2lvbjNELCBsaW1pdHMu
bWF4VGV4dHVyZURpbWVuc2lvbjNEKTsKLSAgICAgICAgcmVzdWx0LT5tYXhUZXh0dXJlQXJyYXlM
YXllcnMgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhUZXh0dXJlQXJyYXlMYXllcnMsIGxpbWl0
cy5tYXhUZXh0dXJlQXJyYXlMYXllcnMpOwotICAgICAgICByZXN1bHQtPm1heEJpbmRHcm91cHMg
PSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhCaW5kR3JvdXBzLCBsaW1pdHMubWF4QmluZEdyb3Vw
cyk7Ci0gICAgICAgIHJlc3VsdC0+bWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVM
YXlvdXQgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQ
aXBlbGluZUxheW91dCwgbGltaXRzLm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5l
TGF5b3V0KTsKLSAgICAgICAgcmVzdWx0LT5tYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBl
bGluZUxheW91dCA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heER5bmFtaWNTdG9yYWdlQnVmZmVy
c1BlclBpcGVsaW5lTGF5b3V0LCBsaW1pdHMubWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlw
ZWxpbmVMYXlvdXQpOwotICAgICAgICByZXN1bHQtPm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRl
clN0YWdlID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVy
U3RhZ2UsIGxpbWl0cy5tYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSk7Ci0gICAgICAg
IHJlc3VsdC0+bWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSA9IG1lcmdlTWF4aW11bShyZXN1bHQt
Pm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsIGxpbWl0cy5tYXhTYW1wbGVyc1BlclNoYWRlclN0
YWdlKTsKLSAgICAgICAgcmVzdWx0LT5tYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlID0g
bWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwgbGlt
aXRzLm1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UpOwotICAgICAgICByZXN1bHQtPm1h
eFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0YWdlID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4
U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UsIGxpbWl0cy5tYXhTdG9yYWdlVGV4dHVyZXNQ
ZXJTaGFkZXJTdGFnZSk7Ci0gICAgICAgIHJlc3VsdC0+bWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFk
ZXJTdGFnZSA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVy
U3RhZ2UsIGxpbWl0cy5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlKTsKLSAgICAgICAg
cmVzdWx0LT5tYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUgPSBtZXJnZU1heGltdW0ocmVzdWx0
LT5tYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUsIGxpbWl0cy5tYXhVbmlmb3JtQnVmZmVyQmlu
ZGluZ1NpemUpOwotICAgICAgICByZXN1bHQtPm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSA9
IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSwgbGltaXRz
Lm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSk7Ci0gICAgICAgIHJlc3VsdC0+bWluVW5pZm9y
bUJ1ZmZlck9mZnNldEFsaWdubWVudCA9IG1lcmdlQWxpZ25tZW50KHJlc3VsdC0+bWluVW5pZm9y
bUJ1ZmZlck9mZnNldEFsaWdubWVudCwgbGltaXRzLm1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGln
bm1lbnQpOwotICAgICAgICByZXN1bHQtPm1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQg
PSBtZXJnZUFsaWdubWVudChyZXN1bHQtPm1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQs
IGxpbWl0cy5taW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50KTsKLSAgICAgICAgcmVzdWx0
LT5tYXhWZXJ0ZXhCdWZmZXJzID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4VmVydGV4QnVmZmVy
cywgbGltaXRzLm1heFZlcnRleEJ1ZmZlcnMpOwotICAgICAgICByZXN1bHQtPm1heFZlcnRleEF0
dHJpYnV0ZXMgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhWZXJ0ZXhBdHRyaWJ1dGVzLCBsaW1p
dHMubWF4VmVydGV4QXR0cmlidXRlcyk7Ci0gICAgICAgIHJlc3VsdC0+bWF4VmVydGV4QnVmZmVy
QXJyYXlTdHJpZGUgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0
cmlkZSwgbGltaXRzLm1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlKTsKLSAgICAgICAgcmVzdWx0
LT5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1h
eEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzLCBsaW1pdHMubWF4SW50ZXJTdGFnZVNoYWRlckNv
bXBvbmVudHMpOwotICAgICAgICByZXN1bHQtPm1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6
ZSA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSwg
bGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSk7Ci0gICAgICAgIHJlc3VsdC0+
bWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+
bWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLCBsaW1pdHMubWF4Q29tcHV0ZUludm9j
YXRpb25zUGVyV29ya2dyb3VwKTsKLSAgICAgICAgcmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3Vw
U2l6ZVggPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgsIGxp
bWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgpOwotICAgICAgICByZXN1bHQtPm1heENvbXB1
dGVXb3JrZ3JvdXBTaXplWSA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heENvbXB1dGVXb3JrZ3Jv
dXBTaXplWSwgbGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSk7Ci0gICAgICAgIHJlc3Vs
dC0+bWF4Q29tcHV0ZVdvcmtncm91cFNpemVaID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4Q29t
cHV0ZVdvcmtncm91cFNpemVaLCBsaW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaKTsKLSAg
ICAgICAgcmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiA9IG1lcmdlTWF4
aW11bShyZXN1bHQtPm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uLCBsaW1pdHMubWF4
Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24pOwotICAgIH07Ci0KLSAgICAvLyBUaGUgZmVh
dHVyZSBzZXQgdGFibGVzIGRvIG5vdCBsaXN0IGxpbWl0cyBmb3IgTVRMR1BVRmFtaWx5Q29tbW9u
MSwgTVRMR1BVRmFtaWx5Q29tbW9uMiwgb3IgTVRMR1BVRmFtaWx5Q29tbW9uMy4KLSAgICAvLyBN
VExHUFVGYW1pbHlBcHBsZTEgYW5kIE1UTEdQVUZhbWlseUFwcGxlMiBhcmUgbm90IHN1cHBvcnRl
ZC4KLSAgICBpZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNdKQot
ICAgICAgICBtZXJnZShhcHBsZTMoKSk7Ci0gICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6
TVRMR1BVRmFtaWx5QXBwbGU0XSkKLSAgICAgICAgbWVyZ2UoYXBwbGU0KCkpOwotICAgIGlmIChb
ZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlNV0pCi0gICAgICAgIG1lcmdl
KGFwcGxlNSgpKTsKLSNpZiAhUExBVEZPUk0oV0FUQ0hPUykKLSAgICBpZiAoW2RldmljZSBzdXBw
b3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTZdKQotICAgICAgICBtZXJnZShhcHBsZTYoKSk7
Ci0gICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBwbGU3XSkKLSAg
ICAgICAgbWVyZ2UoYXBwbGU3KCkpOwotI2VuZGlmCi0gICAgLy8gTVRMR1BVRmFtaWx5TWFjMSBp
cyBub3Qgc3VwcG9ydGVkICh5ZXQ/KS4KLSAgICBpZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpN
VExHUFVGYW1pbHlNYWMyXSkKLSAgICAgICAgbWVyZ2UobWFjMihkZXZpY2UpKTsKLQotICAgIGlm
IChyZXN1bHQpIHsKLSAgICAgICAgYXV0byBtYXhCdWZmZXJMZW5ndGggPSBkZXZpY2UubWF4QnVm
ZmVyTGVuZ3RoOwotICAgICAgICByZXN1bHQtPm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSA9
IG1heEJ1ZmZlckxlbmd0aDsKLSAgICAgICAgcmVzdWx0LT5tYXhTdG9yYWdlQnVmZmVyQmluZGlu
Z1NpemUgPSBtYXhCdWZmZXJMZW5ndGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIGJvb2wgY2hlY2tMaW1pdHMoY29uc3QgV0dQVUxpbWl0cyYgbGltaXRzKQotewot
ICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2xpbWl0LWRlZmF1bHQKLSAg
ICBhdXRvIGRlZmF1bHRMaW1pdHMgPSBXR1BVTGltaXRzIHsKLSAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjFEICovICAgIDgxOTIsCi0gICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24y
RCAqLyAgICA4MTkyLAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uM0QgKi8gICAgMjA0
OCwKLSAgICAgICAgLyogbWF4VGV4dHVyZUFycmF5TGF5ZXJzICovICAgIDI1NiwKLSAgICAgICAg
LyogbWF4QmluZEdyb3VwcyAqLyAgICA0LAotICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1
ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAgICA4LAotICAgICAgICAvKiBtYXhEeW5hbWljU3Rv
cmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAgICA0LAotICAgICAgICAvKiBtYXhTYW1w
bGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICAxNiwKLSAgICAgICAgLyogbWF4U2FtcGxl
cnNQZXJTaGFkZXJTdGFnZSAqLyAgICAxNiwKLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQ
ZXJTaGFkZXJTdGFnZSAqLyAgICA4LAotICAgICAgICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJT
aGFkZXJTdGFnZSAqLyAgICA0LAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRl
clN0YWdlICovICAgIDEyLAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUg
Ki8gICAgNjU1MzYsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAg
ICAxMzQyMTc3MjgsCi0gICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQg
Ki8gICAgMjU2LAotICAgICAgICAvKiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICov
ICAgIDI1NiwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICA4LAotICAgICAgICAv
KiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDE2LAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZm
ZXJBcnJheVN0cmlkZSAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVy
Q29tcG9uZW50cyAqLyAgICAzMiwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3Jh
Z2VTaXplICovICAgIDE2MzUyLAotICAgICAgICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJX
b3JrZ3JvdXAgKi8gICAgMjU2LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgg
Ki8gICAgMjU2LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMjU2
LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogKi8gICAgNjQsCi0gICAgICAg
IC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIDY1NTM1LAotICAgIH07
Ci0KLSAgICByZXR1cm4gIWFueUxpbWl0SXNCZXR0ZXJUaGFuKGRlZmF1bHRMaW1pdHMsIGxpbWl0
cyk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V0dQVUxpbWl0cz4gbGltaXRzKGlkPE1UTERldmljZT4g
ZGV2aWNlKQotewotICAgIGF1dG8gcmVzdWx0ID0gcmF3TGltaXRzKGRldmljZSk7Ci0KLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGlmICghY2hl
Y2tMaW1pdHMoKnJlc3VsdCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIGlzVmFsaWQoY29uc3QgV0dQVUxpbWl0cyYgbGltaXRz
KQotewotICAgIHJldHVybiBpc1Bvd2VyT2ZUd28obGltaXRzLm1pblVuaWZvcm1CdWZmZXJPZmZz
ZXRBbGlnbm1lbnQpICYmIGlzUG93ZXJPZlR3byhsaW1pdHMubWluU3RvcmFnZUJ1ZmZlck9mZnNl
dEFsaWdubWVudCk7Ci19Ci0KLWJvb2wgYW55TGltaXRJc0JldHRlclRoYW4oY29uc3QgV0dQVUxp
bWl0cyYgdGFyZ2V0LCBjb25zdCBXR1BVTGltaXRzJiByZWZlcmVuY2UpCi17Ci0gICAgaWYgKHRh
cmdldC5tYXhUZXh0dXJlRGltZW5zaW9uMUQgPiByZWZlcmVuY2UubWF4VGV4dHVyZURpbWVuc2lv
bjFEKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFRleHR1cmVEaW1l
bnNpb24yRCA+IHJlZmVyZW5jZS5tYXhUZXh0dXJlRGltZW5zaW9uMkQpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4VGV4dHVyZURpbWVuc2lvbjNEID4gcmVmZXJlbmNl
Lm1heFRleHR1cmVEaW1lbnNpb24zRCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRh
cmdldC5tYXhUZXh0dXJlQXJyYXlMYXllcnMgPiByZWZlcmVuY2UubWF4VGV4dHVyZUFycmF5TGF5
ZXJzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heEJpbmRHcm91cHMg
PiByZWZlcmVuY2UubWF4QmluZEdyb3VwcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYg
KHRhcmdldC5tYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCA+IHJlZmVy
ZW5jZS5tYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQ
aXBlbGluZUxheW91dCA+IHJlZmVyZW5jZS5tYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBl
bGluZUxheW91dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhTYW1w
bGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTYW1wbGVkVGV4dHVyZXNQ
ZXJTaGFkZXJTdGFnZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhT
YW1wbGVyc1BlclNoYWRlclN0YWdlID4gcmVmZXJlbmNlLm1heFNhbXBsZXJzUGVyU2hhZGVyU3Rh
Z2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4U3RvcmFnZUJ1ZmZl
cnNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0
YWdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFN0b3JhZ2VUZXh0
dXJlc1BlclNoYWRlclN0YWdlID4gcmVmZXJlbmNlLm1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRl
clN0YWdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFVuaWZvcm1C
dWZmZXJzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFk
ZXJTdGFnZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhVbmlmb3Jt
QnVmZmVyQmluZGluZ1NpemUgPiByZWZlcmVuY2UubWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXpl
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFN0b3JhZ2VCdWZmZXJC
aW5kaW5nU2l6ZSA+IHJlZmVyZW5jZS5tYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFs
aWdubWVudCA8IHJlZmVyZW5jZS5taW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1pblN0b3JhZ2VCdWZmZXJPZmZzZXRB
bGlnbm1lbnQgPCByZWZlcmVuY2UubWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhWZXJ0ZXhCdWZmZXJzID4gcmVm
ZXJlbmNlLm1heFZlcnRleEJ1ZmZlcnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0
YXJnZXQubWF4VmVydGV4QXR0cmlidXRlcyA+IHJlZmVyZW5jZS5tYXhWZXJ0ZXhBdHRyaWJ1dGVz
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFZlcnRleEJ1ZmZlckFy
cmF5U3RyaWRlID4gcmVmZXJlbmNlLm1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heEludGVyU3RhZ2VTaGFkZXJDb21wb25l
bnRzID4gcmVmZXJlbmNlLm1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6
ZSA+IHJlZmVyZW5jZS5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dy
b3VwID4gcmVmZXJlbmNlLm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgg
PiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSA+IHJlZmVyZW5jZS5t
YXhDb21wdXRlV29ya2dyb3VwU2l6ZVkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0
YXJnZXQubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaID4gcmVmZXJlbmNlLm1heENvbXB1dGVXb3Jr
Z3JvdXBTaXplWikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhDb21w
dXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiA+IHJlZmVyZW5jZS5tYXhDb21wdXRlV29ya2dyb3Vw
c1BlckRpbWVuc2lvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9X
ZWJHUFUvSW5zdGFuY2UubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQppbmRl
eCBhNjVjOTI2NjFiZWE4NjdmMWUyMzAxYmM1ZGFhZDI5NTI4YTE3OWZjLi43ODVjYTA0YzBiZGE4
YzdiODA2ZWI3NDU5NzM2NjRlNWIyZGQ0YmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9JbnN0YW5jZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQpA
QCAtMjgsNyArMjgsNyBAQAogCiAjaW1wb3J0ICJBUElDb252ZXJzaW9ucy5oIgogI2ltcG9ydCAi
QWRhcHRlci5oIgotI2ltcG9ydCAiSGFyZHdhcmVMaW1pdHMuaCIKKyNpbXBvcnQgIkhhcmR3YXJl
Q2FwYWJpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdXJmYWNlLmgiCiAjaW1wb3J0IDxjc3RyaW5nPgog
I2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CkBAIC0xODYsMTcgKzE4NiwxNyBAQCB2b2lkIEluc3Rh
bmNlOjpyZXF1ZXN0QWRhcHRlcihjb25zdCBXR1BVUmVxdWVzdEFkYXB0ZXJPcHRpb25zJiBvcHRp
b25zLCBDb21wbGV0aQogCiAgICAgYXV0byBkZXZpY2UgPSBzb3J0ZWREZXZpY2VzWzBdOwogCi0g
ICAgYXV0byBkZXZpY2VMaW1pdHMgPSBsaW1pdHMoZGV2aWNlKTsKKyAgICBhdXRvIGRldmljZUNh
cGFiaWx0aWVzID0gaGFyZHdhcmVDYXBhYmlsaXRpZXMoZGV2aWNlKTsKIAotICAgIGlmICghZGV2
aWNlTGltaXRzKSB7CisgICAgaWYgKCFkZXZpY2VDYXBhYmlsdGllcykgewogICAgICAgICBzY2hl
ZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAqdGhpcyB9LCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXSgpIG11dGFibGUgewogICAgICAgICAgICAgY2FsbGJhY2soV0dQVVJlcXVlc3RB
ZGFwdGVyU3RhdHVzX0Vycm9yLCBBZGFwdGVyOjpjcmVhdGVJbnZhbGlkKHN0cm9uZ1RoaXMpLCAi
RGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgV2ViR1BVIl9zKTsKICAgICAgICAgfSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBzY2hlZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAq
dGhpcyB9LCBkZXZpY2UgPSBzb3J0ZWREZXZpY2VzWzBdLCBsaW1pdHMgPSBXVEZNb3ZlKCpkZXZp
Y2VMaW1pdHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgewotICAg
ICAgICBjYWxsYmFjayhXR1BVUmVxdWVzdEFkYXB0ZXJTdGF0dXNfU3VjY2VzcywgQWRhcHRlcjo6
Y3JlYXRlKGRldmljZSwgc3Ryb25nVGhpcywgV1RGTW92ZShsaW1pdHMpKSwgeyB9KTsKKyAgICBz
Y2hlZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAqdGhpcyB9LCBkZXZpY2UgPSBzb3J0ZWRE
ZXZpY2VzWzBdLCBkZXZpY2VDYXBhYmlsdGllcyA9IFdURk1vdmUoKmRldmljZUNhcGFiaWx0aWVz
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2Fs
bGJhY2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzX1N1Y2Nlc3MsIEFkYXB0ZXI6OmNyZWF0ZShk
ZXZpY2UsIHN0cm9uZ1RoaXMsIFdURk1vdmUoZGV2aWNlQ2FwYWJpbHRpZXMpKSwgeyB9KTsKICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbSBi
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KaW5kZXggNzU2MmJlZTg0MWQzMTg3YWQy
MTY2MWJkZjk4OTJjMGIzNjE0MWQzZC4uMDE5YWFjNDUyYjY5MTdjMDg3ZjkxNjBmODUxMjA4ZDQw
NTU3MjlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQorKysg
Yi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVz
cGFjZSBXZWJHUFUgewogc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQVUZlYXR1cmVOYW1lPiBmZWF0
dXJlUmVxdWlyZW1lbnRGb3JGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAg
IHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5v
cm1TdGVuY2lsODogLy8gRklYTUU6IFRoaXMgaGFzIHRvIGJlIGd1YXJkZWQgYnkgTVRMRGV2aWNl
LmRlcHRoMjRTdGVuY2lsOFBpeGVsRm9ybWF0U3VwcG9ydGVkCisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKICAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJl
TmFtZV9EZXB0aDI0VW5vcm1TdGVuY2lsODsKICAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0Rl
cHRoMzJGbG9hdFN0ZW5jaWw4OgogICAgICAgICByZXR1cm4gV0dQVUZlYXR1cmVOYW1lX0RlcHRo
MzJGbG9hdFN0ZW5jaWw4OwpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAgYm9vbCBEZXZpY2U6OnZhbGlk
YXRlQ3JlYXRlVGV4dHVyZShjb25zdCBXR1BVVGV4dHVyZURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGNvbnMKIAogICAgIHN3aXRjaCAoZGVzY3JpcHRvci5kaW1lbnNpb24pIHsKICAgICBjYXNlIFdH
UFVUZXh0dXJlRGltZW5zaW9uXzFEOgotICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXplLndpZHRo
ID4gbV9saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjFEKQorICAgICAgICBpZiAoZGVzY3JpcHRv
ci5zaXplLndpZHRoID4gbGltaXRzKCkubWF4VGV4dHVyZURpbWVuc2lvbjFEKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUuaGVpZ2h0ICE9
IDEpCkBAIC0xMjYyLDIzICsxMjYyLDIzIEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRl
eHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBjb25zCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fMkQ6Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUud2lkdGggPiBtX2xp
bWl0cy5tYXhUZXh0dXJlRGltZW5zaW9uMkQpCisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUu
d2lkdGggPiBsaW1pdHMoKS5tYXhUZXh0dXJlRGltZW5zaW9uMkQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgPiBtX2xpbWl0
cy5tYXhUZXh0dXJlRGltZW5zaW9uMkQpCisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUuaGVp
Z2h0ID4gbGltaXRzKCkubWF4VGV4dHVyZURpbWVuc2lvbjJEKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJz
ID4gbV9saW1pdHMubWF4VGV4dHVyZUFycmF5TGF5ZXJzKQorICAgICAgICBpZiAoZGVzY3JpcHRv
ci5zaXplLmRlcHRoT3JBcnJheUxheWVycyA+IGxpbWl0cygpLm1heFRleHR1cmVBcnJheUxheWVy
cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBX
R1BVVGV4dHVyZURpbWVuc2lvbl8zRDoKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS53aWR0
aCA+IG1fbGltaXRzLm1heFRleHR1cmVEaW1lbnNpb24zRCkKKyAgICAgICAgaWYgKGRlc2NyaXB0
b3Iuc2l6ZS53aWR0aCA+IGxpbWl0cygpLm1heFRleHR1cmVEaW1lbnNpb24zRCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXplLmhlaWdodCA+
IG1fbGltaXRzLm1heFRleHR1cmVEaW1lbnNpb24zRCkKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
c2l6ZS5oZWlnaHQgPiBsaW1pdHMoKS5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS5kZXB0aE9yQXJy
YXlMYXllcnMgPiBtX2xpbWl0cy5tYXhUZXh0dXJlRGltZW5zaW9uM0QpCisgICAgICAgIGlmIChk
ZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJzID4gbGltaXRzKCkubWF4VGV4dHVyZURp
bWVuc2lvbjNEKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChkZXNj
cmlwdG9yLnNhbXBsZUNvdW50ICE9IDEpCkBAIC0xOTYxLDggKzE5NjEsMTAgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8TVRMUGl4ZWxGb3JtYXQ+IHN0ZW5jaWxPbmx5QXNwZWN0TWV0YWxGb3JtYXQo
V0dQVVRleHR1cmVGb3IKICAgICB9CiB9CiAKLXN0YXRpYyBNVExTdG9yYWdlTW9kZSBzdG9yYWdl
TW9kZShib29sIGRldmljZUhhc1VuaWZpZWRNZW1vcnkpCitzdGF0aWMgTVRMU3RvcmFnZU1vZGUg
c3RvcmFnZU1vZGUoYm9vbCBkZXZpY2VIYXNVbmlmaWVkTWVtb3J5LCBib29sIHN1cHBvcnRzTm9u
UHJpdmF0ZURlcHRoU3RlbmNpbFRleHR1cmVzKQogeworICAgIGlmICghc3VwcG9ydHNOb25Qcml2
YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMpCisgICAgICAgIHJldHVybiBNVExTdG9yYWdlTW9kZVBy
aXZhdGU7CiAgICAgaWYgKGRldmljZUhhc1VuaWZpZWRNZW1vcnkpCiAgICAgICAgIHJldHVybiBN
VExTdG9yYWdlTW9kZVNoYXJlZDsKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NB
VEFMWVNUKQpAQCAtMTk4Nyw5ICsxOTg5LDExIEBAIFJlZjxUZXh0dXJlPiBEZXZpY2U6OmNyZWF0
ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogCiAgICAg
Ly8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWRldmljZS1jcmVhdGV0
ZXh0dXJlCiAKLSAgICBpZiAoZmVhdHVyZVJlcXVpcmVtZW50Rm9yRm9ybWF0KGRlc2NyaXB0b3Iu
Zm9ybWF0KSkgewotICAgICAgICAvLyBGSVhNRTogImJ1dCB0aGlzLltbZGV2aWNlXV0uW1tmZWF0
dXJlc11dIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZlYXR1cmUsIHRocm93IGEgVHlwZUVycm9yLiIK
LSAgICAgICAgcmV0dXJuIFRleHR1cmU6OmNyZWF0ZUludmFsaWQoKnRoaXMpOworICAgIGlmIChh
dXRvIHJlcXVpcmVtZW50ID0gZmVhdHVyZVJlcXVpcmVtZW50Rm9yRm9ybWF0KGRlc2NyaXB0b3Iu
Zm9ybWF0KSkgeworICAgICAgICBpZiAoIWhhc0ZlYXR1cmUoKnJlcXVpcmVtZW50KSkgeworICAg
ICAgICAgICAgLy8gRklYTUU6ICJ0aHJvdyBhIFR5cGVFcnJvci4iCisgICAgICAgICAgICByZXR1
cm4gVGV4dHVyZTo6Y3JlYXRlSW52YWxpZCgqdGhpcyk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAoIXZhbGlkYXRlQ3JlYXRlVGV4dHVyZShkZXNjcmlwdG9yLCB2aWV3Rm9ybWF0cykpIHsK
QEAgLTIwNDcsNyArMjA1MSw3IEBAIFJlZjxUZXh0dXJlPiBEZXZpY2U6OmNyZWF0ZVRleHR1cmUo
Y29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogCiAgICAgdGV4dHVyZURl
c2NyaXB0b3Iuc2FtcGxlQ291bnQgPSBkZXNjcmlwdG9yLnNhbXBsZUNvdW50OwogCi0gICAgdGV4
dHVyZURlc2NyaXB0b3Iuc3RvcmFnZU1vZGUgPSBzdG9yYWdlTW9kZShoYXNVbmlmaWVkTWVtb3J5
KCkpOworICAgIHRleHR1cmVEZXNjcmlwdG9yLnN0b3JhZ2VNb2RlID0gc3RvcmFnZU1vZGUoaGFz
VW5pZmllZE1lbW9yeSgpLCBiYXNlQ2FwYWJpbGl0aWVzKCkuc3VwcG9ydHNOb25Qcml2YXRlRGVw
dGhTdGVuY2lsVGV4dHVyZXMpOwogCiAgICAgLy8gRklYTUUoUEVSRk9STUFOQ0UpOiBDb25zaWRl
ciB3cml0ZS1jb21iaW5pbmcgQ1BVIGNhY2hlIG1vZGUuCiAgICAgLy8gRklYTUUoUEVSRk9STUFO
Q0UpOiBDb25zaWRlciBpbXBsZW1lbnRpbmcgaGF6YXJkIHRyYWNraW5nIG91cnNlbGYuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457784</attachid>
            <date>2022-04-17 16:56:55 -0700</date>
            <delta_ts>2022-04-20 09:11:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>78683</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGZkNTIyNDAzYTRjMTA3MGY2YmExOWU1ZDFiYzM2NjM0YThlNTliODgKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBTdW4gQXByIDE3
IDE1OjQyOjM4IDIwMjIgLTA3MDAKCiAgICBGZWF0dXJlcwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFuZ2VMb2cKaW5kZXggOTI3ZjczOTEz
OTljLi5hODhlNjAyNjkyMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMjItMDQtMTcg
IE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2Vi
R1BVXSBFeHBhbmQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRvIGluY2x1ZGUgZmVhdHVyZXMgKGJl
eW9uZCBqdXN0IGxpbWl0cykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzOTQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE9ubHkgTVRMR1BVRmFtaWx5QXBwbGUgZGV2aWNlcyBzdXBwb3J0IGRlcHRoL3N0
ZW5jaWwgdGV4dHVyZXMgaW4gdGhlIG1hbmFnZWQvc2hhcmVkIGFkZHJlc3Mgc3BhY2UuCisgICAg
ICAgIFNvLCB3ZSBoYXZlIHRvIGV4cGFuZCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGluZnJh
c3RydWN0dXJlIHRvIGJlIGFibGUgdG8gaG9sZCB0aGlzIGtpbmQKKyAgICAgICAgb2YgaW5mb3Jt
YXRpb24gKHNvIHRoZSB0ZXh0dXJlIGNyZWF0aW9uIGZ1bmN0aW9uIGNhbiBjb25zdWx0IHdpdGgg
dGhpcyBzdGF0ZSB0byBrbm93IHdoYXQgc3RvcmFnZQorICAgICAgICBtb2RlIHRvIHVzZSBmb3Ig
dGhlIGNyZWF0ZWQgdGV4dHVyZSkuIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIHN0b3JlZCBXR1BV
TGltaXRzIHN0cnVjdCB3aXRoIGEgbmV3CisgICAgICAgIHN0cnVjdCwgSGFyZHdhcmVDYXBhYmls
aXRpZXMsIHdoaWNoIGhvbGRzIGEgV0dQVUxpbWl0cyBpbmlzaWRlIGl0LgorCisgICAgICAgIFdo
aWxlIEkgd2FzIGhlcmUsIEkgYWxzbyBpbmNsdWRlZCBhIFZlY3RvcjxXR1BVRmVhdHVyZT4gaW5z
aWRlIHRoZSBIYXJkd2FyZUNhcGFiaWxpdGllcyBzdHJ1Y3QsCisgICAgICAgIGFuZCBob29rZWQg
aXQgdXAgdG8gdGhlIHZhcmlvdXMgcGxhY2VzIHdoaWNoIG5lZWQgdG8gYmUgZ3VhcmRlZCBieSB0
aGUgcHJlc2VuY2Ugb2YgZmVhdHVyZXMuCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciBjb21w
cmVzc2VkIHRleHR1cmVzIHRvIHdvcmsgKGFtb25nIG90aGVyIHRoaW5ncykuIEJlY2F1c2UgdGhl
cmUgYXJlIG9ubHkKKyAgICAgICAgYSBoYW5kZnVsIG9mIHBvc3NpYmxlIGZlYXR1cmVzLCBJIGVs
ZWN0ZWQgdG8gdXNlIGEgc29ydGVkIFZlY3RvciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBiaWcgSGFz
aFNldAorICAgICAgICBoYW1tZXIuCisKKyAgICAgICAgKiBXZWJHUFUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJHUFUvQWRhcHRlci5oOgorICAgICAgICAoV2ViR1BV
OjpBZGFwdGVyOjpjcmVhdGUpOgorICAgICAgICAqIFdlYkdQVS9BZGFwdGVyLm1tOgorICAgICAg
ICAoV2ViR1BVOjpBZGFwdGVyOjpBZGFwdGVyKToKKyAgICAgICAgKFdlYkdQVTo6QWRhcHRlcjo6
ZW51bWVyYXRlRmVhdHVyZXMpOgorICAgICAgICAoV2ViR1BVOjpBZGFwdGVyOjpnZXRMaW1pdHMp
OgorICAgICAgICAoV2ViR1BVOjpBZGFwdGVyOjpoYXNGZWF0dXJlKToKKyAgICAgICAgKFdlYkdQ
VTo6QWRhcHRlcjo6cmVxdWVzdERldmljZSk6CisgICAgICAgICogV2ViR1BVL0RldmljZS5oOgor
ICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OmxpbWl0cyBjb25zdCk6CisgICAgICAgIChXZWJHUFU6
OkRldmljZTo6ZmVhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OmJhc2VD
YXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9EZXZpY2UubW06CisgICAgICAg
IChXZWJHUFU6OkRldmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpEZXZp
Y2UpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OmVudW1lcmF0ZUZlYXR1cmVzKToKKyAgICAg
ICAgKFdlYkdQVTo6RGV2aWNlOjpnZXRMaW1pdHMpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6
Omhhc0ZlYXR1cmUpOgorICAgICAgICAqIFdlYkdQVS9IYXJkd2FyZUNhcGFiaWxpdGllcy5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVMaW1pdHMuaC4KKyAgICAg
ICAgKiBXZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMubW06IEFkZGVkLgorICAgICAgICAoV2Vi
R1BVOjpiYXNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkdQVTo6YmFzZUZlYXR1cmVzKToK
KyAgICAgICAgKFdlYkdQVTo6YXBwbGUzKToKKyAgICAgICAgKFdlYkdQVTo6YXBwbGU0KToKKyAg
ICAgICAgKFdlYkdQVTo6YXBwbGU1KToKKyAgICAgICAgKFdlYkdQVTo6YXBwbGU2KToKKyAgICAg
ICAgKFdlYkdQVTo6YXBwbGU3KToKKyAgICAgICAgKFdlYkdQVTo6bWFjMik6CisgICAgICAgIChX
ZWJHUFU6Om1lcmdlTWF4aW11bSk6CisgICAgICAgIChXZWJHUFU6Om1lcmdlQWxpZ25tZW50KToK
KyAgICAgICAgKFdlYkdQVTo6bWVyZ2VMaW1pdHMpOgorICAgICAgICAoV2ViR1BVOjptZXJnZUZl
YXR1cmVzKToKKyAgICAgICAgKFdlYkdQVTo6bWVyZ2VCYXNlQ2FwYWJpbGl0aWVzKToKKyAgICAg
ICAgKFdlYkdQVTo6cmF3SGFyZHdhcmVDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViR1BVOjph
bnlMaW1pdElzQmV0dGVyVGhhbik6CisgICAgICAgIChXZWJHUFU6OmluY2x1ZGVzVW5zdXBwb3J0
ZWRGZWF0dXJlcyk6CisgICAgICAgIChXZWJHUFU6OmNoZWNrTGltaXRzKToKKyAgICAgICAgKFdl
YkdQVTo6aGFyZHdhcmVDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViR1BVOjppc1ZhbGlkKToK
KyAgICAgICAgKiBXZWJHUFUvSGFyZHdhcmVMaW1pdHMubW06IFJlbW92ZWQuCisgICAgICAgICog
V2ViR1BVL0luc3RhbmNlLm1tOgorICAgICAgICAoV2ViR1BVOjpJbnN0YW5jZTo6cmVxdWVzdEFk
YXB0ZXIpOgorICAgICAgICAqIFdlYkdQVS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpm
ZWF0dXJlUmVxdWlyZW1lbnRGb3JGb3JtYXQpOgorICAgICAgICAoV2ViR1BVOjpEZXZpY2U6OnZh
bGlkYXRlQ3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OnN0b3JhZ2VNb2RlKToKKyAg
ICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVUZXh0dXJlKToKKwogMjAyMi0wNC0xNiAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVd
IEZpeCB0aGUgQmlnIFN1ciBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmVlMTA0MDU1ODk0Li5mMzRiY2Q2Yzk4MjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAs
OCArMTAsOCBAQAogCQkxQzAyM0QzRjI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAyM0Qz
RTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gKi87IH07CiAJCTFDMDIzRDQw
Mjc0NDkwNzAwMDFEQjczNCAvKiBsaWJ3Z3NsLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdGMjI3MTZCMkNDMDBBNTI1NEQgLyogbGlid2dz
bC5hICovOyB9OwogCQkxQzAyM0Q0QjI3NDQ5NUI5MDAxREI3MzQgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMwMjNENEEyNzQ0OTVCOTAwMURCNzM0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAq
LzsgfTsKLQkJMUMwRjQxRUUyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlTGltaXRzLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwRjQxRUMyODA5
NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlTGltaXRzLm1tICovOyB9OwotCQkxQzBGNDFFRjI4MDk0
MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVMaW1pdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMEY0MUVEMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2Fy
ZUxpbWl0cy5oICovOyB9OworCQkxQzBGNDFFRTI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVD
YXBhYmlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzBGNDFFQzI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRpZXMubW0g
Ki87IH07CisJCTFDMEY0MUVGMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwRjQx
RUQyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2FwYWJpbGl0aWVzLmggKi87IH07CiAJCTFD
MkNFREVFMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRhbC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzJDRURFRDI3MUU4QTczMDBFREMx
NkYgLyogTWV0YWwuZnJhbWV3b3JrICovOyB9OwogCQkxQzMzNzU1RjI3RkEyM0I4MDAyRjE2NDQg
LyogSXNWYWxpZFRvVXNlV2l0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUMzMzc1NUQyN0ZBMjNCODAwMkYxNjQ0IC8qIElzVmFsaWRUb1VzZVdpdGgu
aCAqLzsgfTsKIAkJMUM1MzE5QzAyN0JEQzZDQzAwQ0QxMjdFIC8qIG1haW4uc3dpZnQgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzUzMTlCRjI3QkRDNkND
MDBDRDEyN0UgLyogbWFpbi5zd2lmdCAqLzsgfTsKQEAgLTEzMyw4ICsxMzMsOCBAQAogCQkxQzAy
M0QzRTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXR1NMTGV4ZXJUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUMwMjNENDcyNzQ0OTE2RDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gV0dTTFVuaXRUZXN0cy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUMwMjNENEEyNzQ0OTVCOTAwMURCNzM0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQzBGNDFFQzI4MDk0MDY1MDAwNTg4NkQgLyog
SGFyZHdhcmVMaW1pdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBIYXJkd2FyZUxpbWl0cy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUMwRjQxRUQyODA5NDA2NTAwMDU4ODZE
IC8qIEhhcmR3YXJlTGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhcmR3YXJlTGltaXRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMEY0MUVDMjgwOTQwNjUwMDA1ODg2RCAvKiBI
YXJkd2FyZUNhcGFiaWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhhcmR3YXJlQ2Fw
YWJpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzBGNDFFRDI4MDk0
MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFy
ZHdhcmVDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyQ0VE
RUQyNzFFOEE3MzAwRURDMTZGIC8qIE1ldGFsLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0g
TWV0YWwuZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9NZXRhbC5m
cmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQkxQzMzNzU1RDI3RkEyM0I4MDAy
RjE2NDQgLyogSXNWYWxpZFRvVXNlV2l0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc1ZhbGlkVG9Vc2VX
aXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNTMxOUJEMjdCREM2Q0IwMENE
MTI3RSAvKiBDb21tYW5kTGluZVBsYXlncm91bmQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IENvbW1hbmRMaW5lUGxheWdyb3VuZDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTM0OCw4ICszNDgsOCBAQAogCQkJCTFDNUFDQTlC
MjczQTQyNkQwMDk1RjhENSAvKiBEZXZpY2UuaCAqLywKIAkJCQkxQzVBQ0FBMzI3M0E0MjZEMDA5
NUY4RDUgLyogRGV2aWNlLm1tICovLAogCQkJCTFDRUJEODBCMjcxNkMzNzkwMEE1MjU0RCAvKiBF
eHBvcnRNYWNyb3MuaCAqLywKLQkJCQkxQzBGNDFFRDI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdh
cmVMaW1pdHMuaCAqLywKLQkJCQkxQzBGNDFFQzI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVM
aW1pdHMubW0gKi8sCisJCQkJMUMwRjQxRUQyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlQ2Fw
YWJpbGl0aWVzLmggKi8sCisJCQkJMUMwRjQxRUMyODA5NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJl
Q2FwYWJpbGl0aWVzLm1tICovLAogCQkJCTFDNUFDQUEwMjczQTQyNkQwMDk1RjhENSAvKiBJbnN0
YW5jZS5oICovLAogCQkJCTFDNUFDQTkyMjczQTQxQzIwMDk1RjhENSAvKiBJbnN0YW5jZS5tbSAq
LywKIAkJCQkxQzMzNzU1RDI3RkEyM0I4MDAyRjE2NDQgLyogSXNWYWxpZFRvVXNlV2l0aC5oICov
LApAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJCQkJMUM1ODMwMTgyN0UxNjgyMzAwOUI0MEYwIC8qIEFQ
SUNvbnZlcnNpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzVBQ0FENzI3M0E0RDcwMDA5NUY4
RDUgLyogQmluZEdyb3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzU4MkZGQTI3RTA0MTMxMDA5
QjQwRjAgLyogQ29tbWFuZHNNaXhpbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUMwRjQxRUYyODA5
NDA2NTAwMDU4ODZEIC8qIEhhcmR3YXJlTGltaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQzBG
NDFFRjI4MDk0MDY1MDAwNTg4NkQgLyogSGFyZHdhcmVDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDMzM3NTVGMjdGQTIzQjgwMDJGMTY0NCAvKiBJc1ZhbGlkVG9Vc2VXaXRoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQ0VCRDdFNzI3MTZBRkJBMDBBNTI1NEQgLyogV2ViR1BVLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQzVBQ0FEMzI3M0E0Qzg2MDA5NUY4RDUgLyogV2ViR1BVRXh0
LmggaW4gSGVhZGVycyAqLywKQEAgLTczOCw3ICs3MzgsNyBAQAogCQkJCTFDNUFDQUM2MjczQTQy
NkQwMDk1RjhENSAvKiBDb21wdXRlUGFzc0VuY29kZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QzVBQ0FDMDI3M0E0MjZEMDA5NUY4RDUgLyogQ29tcHV0ZVBpcGVsaW5lLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUM1QUNBQzEyNzNBNDI2RDAwOTVGOEQ1IC8qIERldmljZS5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTFDMEY0MUVFMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUxpbWl0cy5tbSBp
biBTb3VyY2VzICovLAorCQkJCTFDMEY0MUVFMjgwOTQwNjUwMDA1ODg2RCAvKiBIYXJkd2FyZUNh
cGFiaWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDNUFDQTk0MjczQTQxQzIwMDk1RjhE
NSAvKiBJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDNUFDQUU1MjczQTU1REQwMDk1
RjhENSAvKiBQaXBlbGluZUxheW91dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDNUFDQUJEMjcz
QTQyNkQwMDk1RjhENSAvKiBRdWVyeVNldC5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvQWRhcHRlci5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQWRh
cHRlci5oCmluZGV4IDIzNDIxZGJlZTA2NC4uODZiMTgzNzRhYzMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9BZGFwdGVyLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQWRh
cHRlci5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW1wb3J0ICJIYXJk
d2FyZUNhcGFiaWxpdGllcy5oIgogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAj
aW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgogI2ltcG9ydCA8d3RmL1JlZi5oPgpAQCAtNDIsOSAr
NDMsOSBAQCBjbGFzcyBJbnN0YW5jZTsKIGNsYXNzIEFkYXB0ZXIgOiBwdWJsaWMgV0dQVUFkYXB0
ZXJJbXBsLCBwdWJsaWMgUmVmQ291bnRlZDxBZGFwdGVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBZGFwdGVyPiBjcmVhdGUoaWQ8TVRM
RGV2aWNlPiBkZXZpY2UsIEluc3RhbmNlJiBpbnN0YW5jZSwgY29uc3QgV0dQVUxpbWl0cyYgbGlt
aXRzKQorICAgIHN0YXRpYyBSZWY8QWRhcHRlcj4gY3JlYXRlKGlkPE1UTERldmljZT4gZGV2aWNl
LCBJbnN0YW5jZSYgaW5zdGFuY2UsIEhhcmR3YXJlQ2FwYWJpbGl0aWVzJiYgY2FwYWJpbGl0aWVz
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWRhcHRlcihkZXZpY2UsIGlu
c3RhbmNlLCBsaW1pdHMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWRhcHRlcihk
ZXZpY2UsIGluc3RhbmNlLCBXVEZNb3ZlKGNhcGFiaWxpdGllcykpKTsKICAgICB9CiAgICAgc3Rh
dGljIFJlZjxBZGFwdGVyPiBjcmVhdGVJbnZhbGlkKEluc3RhbmNlJiBpbnN0YW5jZSkKICAgICB7
CkBAIC02NywxMyArNjgsMTMgQEAgcHVibGljOgogCiAKIHByaXZhdGU6Ci0gICAgQWRhcHRlcihp
ZDxNVExEZXZpY2U+LCBJbnN0YW5jZSYsIGNvbnN0IFdHUFVMaW1pdHMmKTsKKyAgICBBZGFwdGVy
KGlkPE1UTERldmljZT4sIEluc3RhbmNlJiwgSGFyZHdhcmVDYXBhYmlsaXRpZXMmJik7CiAgICAg
QWRhcHRlcihJbnN0YW5jZSYpOwogCiAgICAgaWQ8TVRMRGV2aWNlPiBtX2RldmljZSB7IG5pbCB9
OwogICAgIGNvbnN0IFJlZjxJbnN0YW5jZT4gbV9pbnN0YW5jZTsKIAotICAgIFdHUFVMaW1pdHMg
bV9saW1pdHMgeyB9OworICAgIEhhcmR3YXJlQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzIHsg
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQWRhcHRlci5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0FkYXB0ZXIubW0KaW5k
ZXggMWY5NTcwY2E2N2QzLi5lN2JkMGI3Y2ZiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL0FkYXB0ZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQWRhcHRlci5tbQpA
QCAtMjgsMTYgKzI4LDE2IEBACiAKICNpbXBvcnQgIkFQSUNvbnZlcnNpb25zLmgiCiAjaW1wb3J0
ICJEZXZpY2UuaCIKLSNpbXBvcnQgIkhhcmR3YXJlTGltaXRzLmgiCiAjaW1wb3J0ICJJbnN0YW5j
ZS5oIgorI2ltcG9ydCA8YWxnb3JpdGhtPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV2ViR1BVIHsKIAotQWRhcHRlcjo6QWRhcHRlcihpZDxNVExEZXZpY2U+IGRl
dmljZSwgSW5zdGFuY2UmIGluc3RhbmNlLCBjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMpCitBZGFw
dGVyOjpBZGFwdGVyKGlkPE1UTERldmljZT4gZGV2aWNlLCBJbnN0YW5jZSYgaW5zdGFuY2UsIEhh
cmR3YXJlQ2FwYWJpbGl0aWVzJiYgY2FwYWJpbGl0aWVzKQogICAgIDogbV9kZXZpY2UoZGV2aWNl
KQogICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKLSAgICAsIG1fbGltaXRzKGxpbWl0cykKKyAg
ICAsIG1fY2FwYWJpbGl0aWVzKFdURk1vdmUoY2FwYWJpbGl0aWVzKSkKIHsKIH0KIApAQCAtNDgs
MTAgKzQ4LDEzIEBAIEFkYXB0ZXI6OkFkYXB0ZXIoSW5zdGFuY2UmIGluc3RhbmNlKQogCiBBZGFw
dGVyOjp+QWRhcHRlcigpID0gZGVmYXVsdDsKIAotc2l6ZV90IEFkYXB0ZXI6OmVudW1lcmF0ZUZl
YXR1cmVzKFdHUFVGZWF0dXJlTmFtZSopCitzaXplX3QgQWRhcHRlcjo6ZW51bWVyYXRlRmVhdHVy
ZXMoV0dQVUZlYXR1cmVOYW1lKiBmZWF0dXJlcykKIHsKLSAgICAvLyBXZSBzdXBwb3J0IG5vIG9w
dGlvbmFsIGZlYXR1cmVzIHJpZ2h0IG5vdy4KLSAgICByZXR1cm4gMDsKKyAgICAvLyBUaGUgQVBJ
IGNvbnRyYWN0IGZvciB0aGlzIHJlcXVpcmVzIHRoYXQgc3VmZmljaWVudCBzcGFjZSBoYXMgYWxy
ZWFkeSBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIG91dHB1dC4KKyAgICAvLyBUaGlzIHJlcXVpcmVz
IHRoZSBjYWxsZXIgY2FsbGluZyB1cyB0d2ljZTogb25jZSB0byBnZXQgdGhlIGFtb3VudCBvZiBz
cGFjZSB0byBhbGxvY2F0ZSwgYW5kIG9uY2UgdG8gZmlsbCB0aGUgc3BhY2UuCisgICAgaWYgKGZl
YXR1cmVzKQorICAgICAgICBzdGQ6OmNvcHkobV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuYmVnaW4o
KSwgbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuZW5kKCksIGZlYXR1cmVzKTsKKyAgICByZXR1cm4g
bV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMuc2l6ZSgpOwogfQogCiBib29sIEFkYXB0ZXI6OmdldExp
bWl0cyhXR1BVU3VwcG9ydGVkTGltaXRzJiBsaW1pdHMpCkBAIC01OSw4ICs2Miw3IEBAIGJvb2wg
QWRhcHRlcjo6Z2V0TGltaXRzKFdHUFVTdXBwb3J0ZWRMaW1pdHMmIGxpbWl0cykKICAgICBpZiAo
bGltaXRzLm5leHRJbkNoYWluICE9IG51bGxwdHIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBsaW1pdHMubGltaXRzID0geyB9Owor
ICAgIGxpbWl0cy5saW1pdHMgPSBtX2NhcGFiaWxpdGllcy5saW1pdHM7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTc1LDEwICs3Nyw5IEBAIHZvaWQgQWRhcHRlcjo6Z2V0UHJvcGVydGllcyhX
R1BVQWRhcHRlclByb3BlcnRpZXMmIHByb3BlcnRpZXMpCiAgICAgcHJvcGVydGllcy5iYWNrZW5k
VHlwZSA9IFdHUFVCYWNrZW5kVHlwZV9NZXRhbDsKIH0KIAotYm9vbCBBZGFwdGVyOjpoYXNGZWF0
dXJlKFdHUFVGZWF0dXJlTmFtZSkKK2Jvb2wgQWRhcHRlcjo6aGFzRmVhdHVyZShXR1BVRmVhdHVy
ZU5hbWUgZmVhdHVyZSkKIHsKLSAgICAvLyBXZSBzdXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1cmVz
IHJpZ2h0IG5vdy4KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0ZDo6ZmluZChtX2Nh
cGFiaWxpdGllcy5mZWF0dXJlcy5iZWdpbigpLCBtX2NhcGFiaWxpdGllcy5mZWF0dXJlcy5lbmQo
KSwgZmVhdHVyZSk7CiB9CiAKIHZvaWQgQWRhcHRlcjo6cmVxdWVzdERldmljZShjb25zdCBXR1BV
RGV2aWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXR1BV
UmVxdWVzdERldmljZVN0YXR1cywgUmVmPERldmljZT4mJiwgU3RyaW5nJiYpPiYmIGNhbGxiYWNr
KQpAQCAtOTcsNyArOTgsNyBAQCB2b2lkIEFkYXB0ZXI6OnJlcXVlc3REZXZpY2UoY29uc3QgV0dQ
VURldmljZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIENvbXBsZXRpb25IYQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBsaW1pdHMgPSBtX2xpbWl0czsKKyAgICBXR1BVTGltaXRz
IGxpbWl0cyB7IH07CiAKICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZExpbWl0cykgewogICAg
ICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZExpbWl0cy0+bmV4dEluQ2hhaW4pIHsKQEAgLTEx
NCw3ICsxMTUsNyBAQCB2b2lkIEFkYXB0ZXI6OnJlcXVlc3REZXZpY2UoY29uc3QgV0dQVURldmlj
ZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIENvbXBsZXRpb25IYQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGFueUxpbWl0SXNCZXR0ZXJUaGFuKGRlc2NyaXB0
b3IucmVxdWlyZWRMaW1pdHMtPmxpbWl0cywgbV9saW1pdHMpKSB7CisgICAgICAgIGlmIChhbnlM
aW1pdElzQmV0dGVyVGhhbihkZXNjcmlwdG9yLnJlcXVpcmVkTGltaXRzLT5saW1pdHMsIG1fY2Fw
YWJpbGl0aWVzLmxpbWl0cykpIHsKICAgICAgICAgICAgIGluc3RhbmNlKCkuc2NoZWR1bGVXb3Jr
KFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhXR1BVUmVxdWVzdERldmlj
ZVN0YXR1c19FcnJvciwgRGV2aWNlOjpjcmVhdGVJbnZhbGlkKHN0cm9uZ1RoaXMpLCAiRGV2aWNl
IGRvZXMgbm90IHN1cHBvcnQgcmVxdWVzdGVkIGxpbWl0cyJfcyk7CiAgICAgICAgICAgICB9KTsK
QEAgLTEyMiwxMSArMTIzLDI2IEBAIHZvaWQgQWRhcHRlcjo6cmVxdWVzdERldmljZShjb25zdCBX
R1BVRGV2aWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgQ29tcGxldGlvbkhhCiAgICAgICAgIH0K
IAogICAgICAgICBsaW1pdHMgPSBkZXNjcmlwdG9yLnJlcXVpcmVkTGltaXRzLT5saW1pdHM7Cisg
ICAgfSBlbHNlCisgICAgICAgIGxpbWl0cyA9IGRlZmF1bHRMaW1pdHMoKTsKKworICAgIGF1dG8g
ZmVhdHVyZXMgPSBWZWN0b3IgeyBkZXNjcmlwdG9yLnJlcXVpcmVkRmVhdHVyZXMsIGRlc2NyaXB0
b3IucmVxdWlyZWRGZWF0dXJlc0NvdW50IH07CisgICAgaWYgKGluY2x1ZGVzVW5zdXBwb3J0ZWRG
ZWF0dXJlcyhmZWF0dXJlcywgbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXMpKSB7CisgICAgICAgIGlu
c3RhbmNlKCkuc2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
KFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzX0Vycm9yLCBEZXZpY2U6OmNyZWF0ZUludmFsaWQoc3Ry
b25nVGhpcyksICJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0ZWQgZmVhdHVyZXMiX3Mp
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEhhcmR3YXJlQ2Fw
YWJpbGl0aWVzIGNhcGFiaWxpdGllcyB7CisgICAgICAgIGxpbWl0cywKKyAgICAgICAgV1RGTW92
ZShmZWF0dXJlcyksCisgICAgICAgIG1fY2FwYWJpbGl0aWVzLmJhc2VDYXBhYmlsaXRpZXMsCisg
ICAgfTsKKwogICAgIGF1dG8gbGFiZWwgPSBmcm9tQVBJKGRlc2NyaXB0b3IubGFiZWwpOwotICAg
IGluc3RhbmNlKCkuc2NoZWR1bGVXb3JrKFtzdHJvbmdUaGlzID0gUmVmIHsgKnRoaXMgfSwgbGFi
ZWwgPSBXVEZNb3ZlKGxhYmVsKSwgbGltaXRzID0gV1RGTW92ZShsaW1pdHMpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBjYWxsYmFjayhXR1BVUmVx
dWVzdERldmljZVN0YXR1c19TdWNjZXNzLCBEZXZpY2U6OmNyZWF0ZShzdHJvbmdUaGlzLT5tX2Rl
dmljZSwgV1RGTW92ZShsYWJlbCksIFdURk1vdmUobGltaXRzKSwgc3Ryb25nVGhpcyksIHsgfSk7
CisgICAgaW5zdGFuY2UoKS5zY2hlZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAqdGhpcyB9
LCBsYWJlbCA9IFdURk1vdmUobGFiZWwpLCBjYXBhYmlsaXRpZXMgPSBXVEZNb3ZlKGNhcGFiaWxp
dGllcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAg
IGNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzX1N1Y2Nlc3MsIERldmljZTo6Y3JlYXRl
KHN0cm9uZ1RoaXMtPm1fZGV2aWNlLCBXVEZNb3ZlKGxhYmVsKSwgV1RGTW92ZShjYXBhYmlsaXRp
ZXMpLCBzdHJvbmdUaGlzKSwgeyB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvRGV2aWNlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UuaApp
bmRleCAwMDIwZTZlYmQ5MjYuLjBhMTYyNjg3OGExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvRGV2aWNlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvRGV2aWNlLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW1wb3J0ICJBZGFwdGVyLmgiCisjaW1w
b3J0ICJIYXJkd2FyZUNhcGFiaWxpdGllcy5oIgogI2ltcG9ydCAiUXVldWUuaCIKICNpbXBvcnQg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3RmL0Zhc3RNYWxsb2MuaD4KQEAg
LTYxLDcgKzYyLDcgQEAgY2xhc3MgVGV4dHVyZTsKIGNsYXNzIERldmljZSA6IHB1YmxpYyBXR1BV
RGV2aWNlSW1wbCwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERldmljZT4sIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxEZXZpY2U+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERldmljZT4gY3JlYXRlKGlkPE1UTERldmljZT4sIFN0cmlu
ZyYmIGRldmljZUxhYmVsLCBjb25zdCBXR1BVTGltaXRzJiwgQWRhcHRlciYpOworICAgIHN0YXRp
YyBSZWY8RGV2aWNlPiBjcmVhdGUoaWQ8TVRMRGV2aWNlPiwgU3RyaW5nJiYgZGV2aWNlTGFiZWws
IEhhcmR3YXJlQ2FwYWJpbGl0aWVzJiYsIEFkYXB0ZXImKTsKICAgICBzdGF0aWMgUmVmPERldmlj
ZT4gY3JlYXRlSW52YWxpZChBZGFwdGVyJiBhZGFwdGVyKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRGV2aWNlKGFkYXB0ZXIpKTsKQEAgLTk3LDYgKzk4LDkgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2U7IH0KICAgICBi
b29sIGlzTG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMb3N0OyB9CisgICAgY29uc3QgV0dQVUxp
bWl0cyYgbGltaXRzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXMubGltaXRzOyB9Cisg
ICAgY29uc3QgVmVjdG9yPFdHUFVGZWF0dXJlTmFtZT4mIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gbV9jYXBhYmlsaXRpZXMuZmVhdHVyZXM7IH0KKyAgICBjb25zdCBIYXJkd2FyZUNhcGFiaWxp
dGllczo6QmFzZUNhcGFiaWxpdGllcyYgYmFzZUNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwYWJpbGl0aWVzLmJhc2VDYXBhYmlsaXRpZXM7IH0KIAogICAgIGlkPE1UTERldmljZT4g
ZGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2U7IH0KIApAQCAtMTA2LDcgKzExMCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGhhc1VuaWZpZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX2Rl
dmljZS5oYXNVbmlmaWVkTWVtb3J5OyB9CiAKIHByaXZhdGU6Ci0gICAgRGV2aWNlKGlkPE1UTERl
dmljZT4sIGlkPE1UTENvbW1hbmRRdWV1ZT4gZGVmYXVsdFF1ZXVlLCBjb25zdCBXR1BVTGltaXRz
JiwgQWRhcHRlciYpOworICAgIERldmljZShpZDxNVExEZXZpY2U+LCBpZDxNVExDb21tYW5kUXVl
dWU+IGRlZmF1bHRRdWV1ZSwgSGFyZHdhcmVDYXBhYmlsaXRpZXMmJiwgQWRhcHRlciYpOwogICAg
IERldmljZShBZGFwdGVyJik7CiAKICAgICBzdHJ1Y3QgRXJyb3JTY29wZTsKQEAgLTEzOCw3ICsx
NDIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0xvc3QgeyBmYWxzZSB9OwogICAgIGlkPE5T
T2JqZWN0PiBtX2RldmljZU9ic2VydmVyIHsgbmlsIH07CiAKLSAgICBXR1BVTGltaXRzIG1fbGlt
aXRzIHsgfTsKKyAgICBIYXJkd2FyZUNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllcyB7IH07CiAK
ICAgICBjb25zdCBSZWY8QWRhcHRlcj4gbV9hZGFwdGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0RldmljZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5t
bQppbmRleCA4ODVhYTczZjI5YmQuLmU2Y2Q2MTEwZjQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkdQVS9XZWJHUFUvRGV2aWNlLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5t
bQpAQCAtNDIsMTIgKzQyLDEzIEBACiAjaW1wb3J0ICJTdXJmYWNlLmgiCiAjaW1wb3J0ICJTd2Fw
Q2hhaW4uaCIKICNpbXBvcnQgIlRleHR1cmUuaCIKKyNpbXBvcnQgPGFsZ29yaXRobT4KICNpbXBv
cnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJHUFUgewogCi1SZWY8RGV2aWNlPiBEZXZpY2U6OmNyZWF0ZShpZDxNVExEZXZpY2U+
IGRldmljZSwgU3RyaW5nJiYgZGV2aWNlTGFiZWwsIGNvbnN0IFdHUFVMaW1pdHMmIGxpbWl0cywg
QWRhcHRlciYgYWRhcHRlcikKK1JlZjxEZXZpY2U+IERldmljZTo6Y3JlYXRlKGlkPE1UTERldmlj
ZT4gZGV2aWNlLCBTdHJpbmcmJiBkZXZpY2VMYWJlbCwgSGFyZHdhcmVDYXBhYmlsaXRpZXMmJiBj
YXBhYmlsaXRpZXMsIEFkYXB0ZXImIGFkYXB0ZXIpCiB7CiAgICAgaWQ8TVRMQ29tbWFuZFF1ZXVl
PiBjb21tYW5kUXVldWUgPSBbZGV2aWNlIG5ld0NvbW1hbmRRdWV1ZV07CiAgICAgaWYgKCFjb21t
YW5kUXVldWUpCkBAIC01OSwxMyArNjAsMTMgQEAgUmVmPERldmljZT4gRGV2aWNlOjpjcmVhdGUo
aWQ8TVRMRGV2aWNlPiBkZXZpY2UsIFN0cmluZyYmIGRldmljZUxhYmVsLCBjb25zdCBXR1AKICAg
ICBpZiAoIWRldmljZUxhYmVsLmlzRW1wdHkoKSkKICAgICAgICAgY29tbWFuZFF1ZXVlLmxhYmVs
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJEZWZhdWx0IHF1ZXVlIGZvciBkZXZpY2Ug
JXMiLCBkZXZpY2VMYWJlbC51dGY4KCkuZGF0YSgpXTsKIAotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERldmljZShkZXZpY2UsIGNvbW1hbmRRdWV1ZSwgbGltaXRzLCBhZGFwdGVyKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRGV2aWNlKGRldmljZSwgY29tbWFuZFF1ZXVlLCBXVEZNb3Zl
KGNhcGFiaWxpdGllcyksIGFkYXB0ZXIpKTsKIH0KIAotRGV2aWNlOjpEZXZpY2UoaWQ8TVRMRGV2
aWNlPiBkZXZpY2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gZGVmYXVsdFF1ZXVlLCBjb25zdCBXR1BV
TGltaXRzJiBsaW1pdHMsIEFkYXB0ZXImIGFkYXB0ZXIpCitEZXZpY2U6OkRldmljZShpZDxNVExE
ZXZpY2U+IGRldmljZSwgaWQ8TVRMQ29tbWFuZFF1ZXVlPiBkZWZhdWx0UXVldWUsIEhhcmR3YXJl
Q2FwYWJpbGl0aWVzJiYgY2FwYWJpbGl0aWVzLCBBZGFwdGVyJiBhZGFwdGVyKQogICAgIDogbV9k
ZXZpY2UoZGV2aWNlKQogICAgICwgbV9kZWZhdWx0UXVldWUoUXVldWU6OmNyZWF0ZShkZWZhdWx0
UXVldWUsICp0aGlzKSkKLSAgICAsIG1fbGltaXRzKGxpbWl0cykKKyAgICAsIG1fY2FwYWJpbGl0
aWVzKFdURk1vdmUoY2FwYWJpbGl0aWVzKSkKICAgICAsIG1fYWRhcHRlcihhZGFwdGVyKQogewog
I2lmIFBMQVRGT1JNKE1BQykKQEAgLTEzNywxMCArMTM4LDEzIEBAIHZvaWQgRGV2aWNlOjpkZXN0
cm95KCkKICAgICBsb3NlVGhlRGV2aWNlKFdHUFVEZXZpY2VMb3N0UmVhc29uX0Rlc3Ryb3llZCk7
CiB9CiAKLXNpemVfdCBEZXZpY2U6OmVudW1lcmF0ZUZlYXR1cmVzKFdHUFVGZWF0dXJlTmFtZSop
CitzaXplX3QgRGV2aWNlOjplbnVtZXJhdGVGZWF0dXJlcyhXR1BVRmVhdHVyZU5hbWUqIGZlYXR1
cmVzKQogewotICAgIC8vIFdlIHN1cHBvcnQgbm8gb3B0aW9uYWwgZmVhdHVyZXMgcmlnaHQgbm93
LgotICAgIHJldHVybiAwOworICAgIC8vIFRoZSBBUEkgY29udHJhY3QgZm9yIHRoaXMgcmVxdWly
ZXMgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGZvciB0
aGUgb3V0cHV0LgorICAgIC8vIFRoaXMgcmVxdWlyZXMgdGhlIGNhbGxlciBjYWxsaW5nIHVzIHR3
aWNlOiBvbmNlIHRvIGdldCB0aGUgYW1vdW50IG9mIHNwYWNlIHRvIGFsbG9jYXRlLCBhbmQgb25j
ZSB0byBmaWxsIHRoZSBzcGFjZS4KKyAgICBpZiAoZmVhdHVyZXMpCisgICAgICAgIHN0ZDo6Y29w
eShtX2NhcGFiaWxpdGllcy5mZWF0dXJlcy5iZWdpbigpLCBtX2NhcGFiaWxpdGllcy5mZWF0dXJl
cy5lbmQoKSwgZmVhdHVyZXMpOworICAgIHJldHVybiBtX2NhcGFiaWxpdGllcy5mZWF0dXJlcy5z
aXplKCk7CiB9CiAKIGJvb2wgRGV2aWNlOjpnZXRMaW1pdHMoV0dQVVN1cHBvcnRlZExpbWl0cyYg
bGltaXRzKQpAQCAtMTQ4LDggKzE1Miw3IEBAIGJvb2wgRGV2aWNlOjpnZXRMaW1pdHMoV0dQVVN1
cHBvcnRlZExpbWl0cyYgbGltaXRzKQogICAgIGlmIChsaW1pdHMubmV4dEluQ2hhaW4gIT0gbnVs
bHB0cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgotICAgIGxpbWl0cy5saW1pdHMgPSB7IH07CisgICAgbGltaXRzLmxpbWl0cyA9IG1fY2Fw
YWJpbGl0aWVzLmxpbWl0czsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU4LDEwICsxNjEs
OSBAQCBRdWV1ZSYgRGV2aWNlOjpnZXRRdWV1ZSgpCiAgICAgcmV0dXJuIG1fZGVmYXVsdFF1ZXVl
OwogfQogCi1ib29sIERldmljZTo6aGFzRmVhdHVyZShXR1BVRmVhdHVyZU5hbWUpCitib29sIERl
dmljZTo6aGFzRmVhdHVyZShXR1BVRmVhdHVyZU5hbWUgZmVhdHVyZSkKIHsKLSAgICAvLyBXZSBz
dXBwb3J0IG5vIG9wdGlvbmFsIGZlYXR1cmVzIHJpZ2h0IG5vdy4KLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHN0ZDo6ZmluZChtX2NhcGFiaWxpdGllcy5mZWF0dXJlcy5iZWdpbigpLCBt
X2NhcGFiaWxpdGllcy5mZWF0dXJlcy5lbmQoKSwgZmVhdHVyZSk7CiB9CiAKIGF1dG8gRGV2aWNl
OjpjdXJyZW50RXJyb3JTY29wZShXR1BVRXJyb3JGaWx0ZXIgdHlwZSkgLT4gRXJyb3JTY29wZSoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlTGltaXRzLmggYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9IYXJkd2FyZUNhcGFiaWxpdGllcy5oCnNpbWlsYXJpdHkgaW5kZXgg
NzAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlTGltaXRzLmgKcmVu
YW1lIHRvIFNvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlQ2FwYWJpbGl0aWVzLmgKaW5kZXgg
MGQyNTNlNzhmNjQ3Li41OGUzMjg2MzRlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL0hhcmR3YXJlTGltaXRzLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVD
YXBhYmlsaXRpZXMuaApAQCAtMjYsMTEgKzI2LDI2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkdQ
VSB7CiAKLXN0ZDo6b3B0aW9uYWw8V0dQVUxpbWl0cz4gbGltaXRzKGlkPE1UTERldmljZT4pOwor
c3RydWN0IEhhcmR3YXJlQ2FwYWJpbGl0aWVzIHsKKyAgICBXR1BVTGltaXRzIGxpbWl0cyB7IH07
CisgICAgVmVjdG9yPFdHUFVGZWF0dXJlTmFtZT4gZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgQmFz
ZUNhcGFiaWxpdGllcyB7CisgICAgICAgIE1UTEFyZ3VtZW50QnVmZmVyc1RpZXIgYXJndW1lbnRC
dWZmZXJzVGllciB7IE1UTEFyZ3VtZW50QnVmZmVyc1RpZXIxIH07CisgICAgICAgIGJvb2wgc3Vw
cG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgeyBmYWxzZSB9OworICAgICAgICBp
ZDxNVExDb3VudGVyU2V0PiB0aW1lc3RhbXBDb3VudGVyU2V0IHsgbmlsIH07CisgICAgICAgIGlk
PE1UTENvdW50ZXJTZXQ+IHN0YXRpc3RpY0NvdW50ZXJTZXQgeyBuaWwgfTsKKyAgICB9IGJhc2VD
YXBhYmlsaXRpZXM7Cit9OworCitzdGQ6Om9wdGlvbmFsPEhhcmR3YXJlQ2FwYWJpbGl0aWVzPiBo
YXJkd2FyZUNhcGFiaWxpdGllcyhpZDxNVExEZXZpY2U+KTsKIGJvb2wgaXNWYWxpZChjb25zdCBX
R1BVTGltaXRzJik7CitXR1BVTGltaXRzIGRlZmF1bHRMaW1pdHMoKTsKIGJvb2wgYW55TGltaXRJ
c0JldHRlclRoYW4oY29uc3QgV0dQVUxpbWl0cyYgdGFyZ2V0LCBjb25zdCBXR1BVTGltaXRzJiBy
ZWZlcmVuY2UpOworYm9vbCBpbmNsdWRlc1Vuc3VwcG9ydGVkRmVhdHVyZXMoY29uc3QgVmVjdG9y
PFdHUFVGZWF0dXJlTmFtZT4mIHRhcmdldCwgY29uc3QgVmVjdG9yPFdHUFVGZWF0dXJlTmFtZT4m
IHJlZmVyZW5jZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvSGFyZHdhcmVDYXBhYmlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9IYXJkd2FyZUNhcGFiaWxpdGllcy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjU0YjNmNWYyMWNjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0hhcmR3YXJlQ2FwYWJpbGl0aWVzLm1tCkBAIC0wLDAgKzEsNjM2IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJIYXJkd2FyZUNhcGFiaWxpdGllcy5oIgorCisjaW1wb3J0IDxhbGdvcml0
aG0+CisjaW1wb3J0IDxsaW1pdHM+CisjaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgorI2ltcG9y
dCA8d3RmL1BhZ2VCbG9jay5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViR1BVIHsKKworLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL21ldGFsL01l
dGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5wZGYKKworLy8gRklYTUU6IGh0dHBzOi8vZ2l0aHViLmNv
bS9ncHV3ZWIvZ3B1d2ViL2lzc3Vlcy8yNzQ5IHdlIG5lZWQgbW9yZSBsaW1pdHMuCisKK3N0YXRp
YyBIYXJkd2FyZUNhcGFiaWxpdGllczo6QmFzZUNhcGFiaWxpdGllcyBiYXNlQ2FwYWJpbGl0aWVz
KGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIGlkPE1UTENvdW50ZXJTZXQ+IHRpbWVzdGFt
cENvdW50ZXJTZXQgPSBuaWw7CisgICAgaWQ8TVRMQ291bnRlclNldD4gc3RhdGlzdGljQ291bnRl
clNldCA9IG5pbDsKKworICAgIGZvciAoaWQ8TVRMQ291bnRlclNldD4gY291bnRlclNldCBpbiBk
ZXZpY2UuY291bnRlclNldHMpIHsKKyAgICAgICAgaWYgKFtjb3VudGVyU2V0Lm5hbWUgaXNFcXVh
bFRvU3RyaW5nOk1UTENvbW1vbkNvdW50ZXJTZXRUaW1lc3RhbXBdKQorICAgICAgICAgICAgdGlt
ZXN0YW1wQ291bnRlclNldCA9IGNvdW50ZXJTZXQ7CisgICAgICAgIGVsc2UgaWYgKFtjb3VudGVy
U2V0Lm5hbWUgaXNFcXVhbFRvU3RyaW5nOk1UTENvbW1vbkNvdW50ZXJTZXRTdGF0aXN0aWNdKQor
ICAgICAgICAgICAgc3RhdGlzdGljQ291bnRlclNldCA9IGNvdW50ZXJTZXQ7CisgICAgfQorCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgW2RldmljZSBhcmd1bWVudEJ1ZmZlcnNTdXBwb3J0XSwKKyAg
ICAgICAgZmFsc2UsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAgICB0
aW1lc3RhbXBDb3VudGVyU2V0LAorICAgICAgICBzdGF0aXN0aWNDb3VudGVyU2V0LAorICAgIH07
Cit9CisKK3N0YXRpYyBWZWN0b3I8V0dQVUZlYXR1cmVOYW1lPiBiYXNlRmVhdHVyZXMoaWQ8TVRM
RGV2aWNlPiBkZXZpY2UsIGNvbnN0IEhhcmR3YXJlQ2FwYWJpbGl0aWVzOjpCYXNlQ2FwYWJpbGl0
aWVzJiBiYXNlQ2FwYWJpbGl0aWVzKQoreworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+IGZl
YXR1cmVzOworCisgICAgLy8gRklYTUU6IERldGVybWluZSBpZiBXR1BVRmVhdHVyZU5hbWVfRGVw
dGhDbGlwQ29udHJvbCBpcyBzdXBwb3J0ZWQuCisKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQorICAgIGlmIChkZXZpY2UuZGVwdGgyNFN0ZW5jaWw4UGl4ZWxGb3Jt
YXRTdXBwb3J0ZWQpCisgICAgICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfRGVw
dGgyNFVub3JtU3RlbmNpbDgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGV2aWNlKTsKKyNl
bmRpZgorCisgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVGZWF0dXJlTmFtZV9EZXB0aDMyRmxvYXRT
dGVuY2lsOCk7CisKKyAgICBpZiAoYmFzZUNhcGFiaWxpdGllcy50aW1lc3RhbXBDb3VudGVyU2V0
KQorICAgICAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVOYW1lX1RpbWVzdGFtcFF1ZXJ5
KTsKKworICAgIGlmIChiYXNlQ2FwYWJpbGl0aWVzLnN0YXRpc3RpY0NvdW50ZXJTZXQpCisgICAg
ICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfUGlwZWxpbmVTdGF0aXN0aWNzUXVl
cnkpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChkZXZpY2Uuc3VwcG9ydHNCQ1RleHR1
cmVDb21wcmVzc2lvbikKKyAgICAgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVGZWF0dXJlTmFtZV9U
ZXh0dXJlQ29tcHJlc3Npb25CQyk7CisjZW5kaWYKKworICAgIC8vIFdHUFVGZWF0dXJlTmFtZV9U
ZXh0dXJlQ29tcHJlc3Npb25FVEMyIGFuZCBXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNz
aW9uQVNUQyBhcmUgdG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisKKyAgICAvLyBGSVhN
RTogRGV0ZXJtaW5lIGlmIFdHUFVGZWF0dXJlTmFtZV9JbmRpcmVjdEZpcnN0SW5zdGFuY2UgaXMg
c3VwcG9ydGVkLgorCisgICAgcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgSGFyZHdhcmVD
YXBhYmlsaXRpZXMgYXBwbGUzKGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIGF1dG8gYmFz
ZUNhcGFiaWxpdGllcyA9IFdlYkdQVTo6YmFzZUNhcGFiaWxpdGllcyhkZXZpY2UpOworCisgICAg
YmFzZUNhcGFiaWxpdGllcy5zdXBwb3J0c05vblByaXZhdGVEZXB0aFN0ZW5jaWxUZXh0dXJlcyA9
IHRydWU7CisKKyAgICBhdXRvIGZlYXR1cmVzID0gV2ViR1BVOjpiYXNlRmVhdHVyZXMoZGV2aWNl
LCBiYXNlQ2FwYWJpbGl0aWVzKTsKKworICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5h
bWVfVGV4dHVyZUNvbXByZXNzaW9uRVRDMik7CisgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVGZWF0
dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25BU1RDKTsKKworICAgIHN0ZDo6c29ydChmZWF0dXJl
cy5iZWdpbigpLCBmZWF0dXJlcy5lbmQoKSk7CisKKyAgICB1aW50MzJfdCBtYXhCaW5kR3JvdXBz
ID0gMzA7CisKKyAgICByZXR1cm4geworICAgICAgICB7CisgICAgICAgICAgICAvKiBtYXhUZXh0
dXJlRGltZW5zaW9uMUQgKi8gICAgMTYzODQsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlRGlt
ZW5zaW9uMkQgKi8gICAgMTYzODQsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9u
M0QgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heFRleHR1cmVBcnJheUxheWVycyAqLyAg
ICAyMDQ4LAorICAgICAgICAgICAgLyogbWF4QmluZEdyb3VwcyAqLyAgICBtYXhCaW5kR3JvdXBz
LAorICAgICAgICAgICAgLyogbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlv
dXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAgICAg
ICAgLyogbWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAgICAgICAgLyogbWF4U2Ft
cGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDMxLAorICAg
ICAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBz
ICogMTYsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlICov
ICAgIG1heEJpbmRHcm91cHMgKiAzMSwKKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0dXJl
c1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAzMSwKKyAgICAgICAgICAgIC8q
IG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDMx
LAorICAgICAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8v
IFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLyogbWF4U3RvcmFn
ZUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2Fs
bGVyLgorICAgICAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAg
ICA0LAorICAgICAgICAgICAgLyogbWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAg
ICA0LAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVmZmVycyAqLyAgICAzMCwKKyAgICAgICAg
ICAgIC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCisgICAgICAgICAgICAvKiBtYXhW
ZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksCisgICAgICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAq
LyAgICA2MCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAq
LyAgICAxNiAqIEtCLAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29y
a2dyb3VwICovICAgIDUxMiwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXpl
WCAqLyAgICA1MTIsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8g
ICAgNTEyLAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDUx
MiwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgfSwKKyAgICAg
ICAgV1RGTW92ZShmZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBhYmlsaXRpZXMsCisgICAgfTsK
K30KKworc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGFwcGxlNChpZDxNVExEZXZpY2U+IGRl
dmljZSkKK3sKKyAgICBhdXRvIGJhc2VDYXBhYmlsaXRpZXMgPSBXZWJHUFU6OmJhc2VDYXBhYmls
aXRpZXMoZGV2aWNlKTsKKworICAgIGJhc2VDYXBhYmlsaXRpZXMuc3VwcG9ydHNOb25Qcml2YXRl
RGVwdGhTdGVuY2lsVGV4dHVyZXMgPSB0cnVlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQ
VTo6YmFzZUZlYXR1cmVzKGRldmljZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBmZWF0dXJl
cy5hcHBlbmQoV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzIpOworICAgIGZl
YXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyk7CisK
KyAgICBzdGQ6OnNvcnQoZmVhdHVyZXMuYmVnaW4oKSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAg
dWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgewor
ICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAorICAgICAg
ICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAorICAgICAgICAgICAg
LyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisgICAgICAgICAgICAvKiBtYXhU
ZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwKKyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91
cHMgKi8gICAgbWF4QmluZEdyb3VwcywKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3Jt
QnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBp
cGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
KyAgICAgICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1h
eEJpbmRHcm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3Rh
Z2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDE2LAorICAgICAgICAgICAgLyogbWF4U3RvcmFnZUJ1
ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAgICAgICAg
ICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBz
ICogOTYsCisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICov
ICAgIG1heEJpbmRHcm91cHMgKiA5NiwKKyAgICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJC
aW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAg
ICAgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBi
ZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8qIG1pblVuaWZvcm1CdWZm
ZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAgIC8qIG1pblN0b3JhZ2VCdWZm
ZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZl
cnMgKi8gICAgMzAsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMx
LAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAgICAgICAgLyogbWF4SW50ZXJT
dGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0
ZVdvcmtncm91cFN0b3JhZ2VTaXplICovICAgIDMyICogS0IsCisgICAgICAgICAgICAvKiBtYXhD
b21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8q
IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAorICAgICAgICAgICAgLyogbWF4
Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDEwMjQsCisgICAgICAgICAgICAvKiBtYXhDb21w
dXRlV29ya2dyb3VwU2l6ZVogKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVX
b3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwKKyAgICAgICAgfSwKKyAgICAgICAgV1RGTW92ZShmZWF0dXJlcyksCisgICAgICAg
IGJhc2VDYXBhYmlsaXRpZXMsCisgICAgfTsKK30KKworc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0
aWVzIGFwcGxlNShpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBhdXRvIGJhc2VDYXBhYmls
aXRpZXMgPSBXZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNlKTsKKworICAgIGJhc2VDYXBh
YmlsaXRpZXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgPSB0cnVlOwor
CisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1cmVzKGRldmljZSwgYmFzZUNh
cGFiaWxpdGllcyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVOYW1lX1RleHR1
cmVDb21wcmVzc2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVf
VGV4dHVyZUNvbXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNvcnQoZmVhdHVyZXMuYmVnaW4o
KSwgZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOwor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVu
c2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJE
ICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAg
IDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwK
KyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKKyAgICAg
ICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1h
eER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZWRUZXh0
dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKKyAgICAgICAgICAg
IC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDE2LAor
ICAgICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhC
aW5kR3JvdXBzICogOTYsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFk
ZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCisgICAgICAgICAgICAvKiBtYXhVbmlm
b3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKKyAgICAg
ICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBm
aWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJC
aW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KKyAg
ICAgICAgICAgIC8qIG1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAg
ICAgICAgICAgIC8qIG1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKKyAg
ICAgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCisgICAgICAgICAgICAvKiBt
YXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVm
ZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
LAorICAgICAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0
LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplICovICAgIDMy
ICogS0IsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAg
Ki8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAg
ICAxMDI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDEw
MjQsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogKi8gICAgMTAyNCwK
KyAgICAgICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgfSwKKyAgICAgICAg
V1RGTW92ZShmZWF0dXJlcyksCisgICAgICAgIGJhc2VDYXBhYmlsaXRpZXMsCisgICAgfTsKK30K
KworI2lmICFQTEFURk9STShXQVRDSE9TKQorc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0aWVzIGFw
cGxlNihpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBhdXRvIGJhc2VDYXBhYmlsaXRpZXMg
PSBXZWJHUFU6OmJhc2VDYXBhYmlsaXRpZXMoZGV2aWNlKTsKKworICAgIGJhc2VDYXBhYmlsaXRp
ZXMuc3VwcG9ydHNOb25Qcml2YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgPSB0cnVlOworCisgICAg
YXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1cmVzKGRldmljZSwgYmFzZUNhcGFiaWxp
dGllcyk7CisKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21w
cmVzc2lvbkVUQzIpOworICAgIGZlYXR1cmVzLmFwcGVuZChXR1BVRmVhdHVyZU5hbWVfVGV4dHVy
ZUNvbXByZXNzaW9uQVNUQyk7CisKKyAgICBzdGQ6OnNvcnQoZmVhdHVyZXMuYmVnaW4oKSwgZmVh
dHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOworCisgICAg
cmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFE
ICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAg
IDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgs
CisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwKKyAgICAg
ICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKKyAgICAgICAgICAg
IC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heER5bmFt
aWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1Bl
clNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAorICAgICAgICAg
ICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogMTAy
NCwKKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAg
bWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlVGV4
dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogNTAwMDAwIC8gMiwKKyAg
ICAgICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4Qmlu
ZEdyb3VwcyAqIDUwMDAwMCAvIDIsCisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmlu
ZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisgICAg
ICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUg
ZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvKiBtaW5Vbmlmb3JtQnVmZmVy
T2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCisgICAgICAgICAgICAvKiBtaW5TdG9yYWdlQnVmZmVy
T2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJz
ICovICAgIDMwLAorICAgICAgICAgICAgLyogbWF4VmVydGV4QXR0cmlidXRlcyAqLyAgICAzMSwK
KyAgICAgICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlICovICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heEludGVyU3Rh
Z2VTaGFkZXJDb21wb25lbnRzICovICAgIDEyNCwKKyAgICAgICAgICAgIC8qIG1heENvbXB1dGVX
b3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtCLAorICAgICAgICAgICAgLyogbWF4Q29t
cHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQsCisgICAgICAgICAgICAvKiBt
YXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENv
bXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0
ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCisgICAgICAgICAgICAvKiBtYXhDb21wdXRlV29y
a2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksCisgICAgICAgIH0sCisgICAgICAgIFdURk1vdmUoZmVhdHVyZXMpLAorICAgICAgICBi
YXNlQ2FwYWJpbGl0aWVzLAorICAgIH07Cit9CisKK3N0YXRpYyBIYXJkd2FyZUNhcGFiaWxpdGll
cyBhcHBsZTcoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgYXV0byBiYXNlQ2FwYWJpbGl0
aWVzID0gV2ViR1BVOjpiYXNlQ2FwYWJpbGl0aWVzKGRldmljZSk7CisKKyAgICBiYXNlQ2FwYWJp
bGl0aWVzLnN1cHBvcnRzTm9uUHJpdmF0ZURlcHRoU3RlbmNpbFRleHR1cmVzID0gdHJ1ZTsKKwor
ICAgIGF1dG8gZmVhdHVyZXMgPSBXZWJHUFU6OmJhc2VGZWF0dXJlcyhkZXZpY2UsIGJhc2VDYXBh
YmlsaXRpZXMpOworCisgICAgZmVhdHVyZXMuYXBwZW5kKFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJl
Q29tcHJlc3Npb25FVEMyKTsKKyAgICBmZWF0dXJlcy5hcHBlbmQoV0dQVUZlYXR1cmVOYW1lX1Rl
eHR1cmVDb21wcmVzc2lvbkFTVEMpOworCisgICAgc3RkOjpzb3J0KGZlYXR1cmVzLmJlZ2luKCks
IGZlYXR1cmVzLmVuZCgpKTsKKworICAgIHVpbnQzMl90IG1heEJpbmRHcm91cHMgPSAzMDsKKwor
ICAgIHJldHVybiB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNp
b24xRCAqLyAgICAxNjM4NCwKKyAgICAgICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24yRCAq
LyAgICAxNjM4NCwKKyAgICAgICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24zRCAqLyAgICAy
MDQ4LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZUFycmF5TGF5ZXJzICovICAgIDIwNDgsCisg
ICAgICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIG1heEJpbmRHcm91cHMsCisgICAgICAg
ICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAgICBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAvKiBtYXhE
eW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAvKiBtYXhTYW1wbGVkVGV4dHVy
ZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogNTAwMDAwIC8gMiwKKyAgICAg
ICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAq
IDEwMjQsCisgICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlICov
ICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAorICAgICAgICAgICAgLyogbWF4U3RvcmFn
ZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIs
CisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1h
eEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAorICAgICAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZl
ckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgor
ICAgICAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRv
IGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLyogbWluVW5pZm9ybUJ1
ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAgICAgLyogbWluU3RvcmFnZUJ1
ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAorICAgICAgICAgICAgLyogbWF4VmVydGV4QnVm
ZmVycyAqLyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAg
MzEsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAvKiBtYXhJbnRl
clN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAxMjQsCisgICAgICAgICAgICAvKiBtYXhDb21w
dXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIgKiBLQiwKKyAgICAgICAgICAgIC8qIG1h
eENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCAqLyAgICAxMDI0LAorICAgICAgICAgICAg
LyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAgIDEwMjQsCisgICAgICAgICAgICAvKiBt
YXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8qIG1heENv
bXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICAxMDI0LAorICAgICAgICAgICAgLyogbWF4Q29tcHV0
ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpLAorICAgICAgICB9LAorICAgICAgICBXVEZNb3ZlKGZlYXR1cmVzKSwKKyAgICAg
ICAgYmFzZUNhcGFiaWxpdGllcywKKyAgICB9OworfQorI2VuZGlmCisKK3N0YXRpYyBIYXJkd2Fy
ZUNhcGFiaWxpdGllcyBtYWMyKGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIGF1dG8gYmFz
ZUNhcGFiaWxpdGllcyA9IFdlYkdQVTo6YmFzZUNhcGFiaWxpdGllcyhkZXZpY2UpOworCisgICAg
YmFzZUNhcGFiaWxpdGllcy5zdXBwb3J0c05vblByaXZhdGVEZXB0aFN0ZW5jaWxUZXh0dXJlcyA9
IGZhbHNlOworCisgICAgYXV0byBmZWF0dXJlcyA9IFdlYkdQVTo6YmFzZUZlYXR1cmVzKGRldmlj
ZSwgYmFzZUNhcGFiaWxpdGllcyk7CisKKyAgICBzdGQ6OnNvcnQoZmVhdHVyZXMuYmVnaW4oKSwg
ZmVhdHVyZXMuZW5kKCkpOworCisgICAgdWludDMyX3QgYnVmZmVyc1BlckJpbmRHcm91cCA9IDA7
CisgICAgdWludDMyX3QgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSAwOworICAgIHVpbnQzMl90IHNh
bXBsZXJzUGVyQmluZEdyb3VwID0gMDsKKyAgICBzd2l0Y2ggKGJhc2VDYXBhYmlsaXRpZXMuYXJn
dW1lbnRCdWZmZXJzVGllcikgeworICAgIGNhc2UgTVRMQXJndW1lbnRCdWZmZXJzVGllcjE6Cisg
ICAgICAgIGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSA2NDsKKyAgICAgICAgdGV4dHVyZXNQZXJCaW5k
R3JvdXAgPSAxMjg7CisgICAgICAgIHNhbXBsZXJzUGVyQmluZEdyb3VwID0gMTY7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTVRMQXJndW1lbnRCdWZmZXJzVGllcjI6CisgICAgICAgIGJ1ZmZl
cnNQZXJCaW5kR3JvdXAgPSA1MDAwMDAgLyAyOworICAgICAgICB0ZXh0dXJlc1BlckJpbmRHcm91
cCA9IDUwMDAwMCAvIDI7CisgICAgICAgIHNhbXBsZXJzUGVyQmluZEdyb3VwID0gMTAyNDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9IDMwOwor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVu
c2lvbjFEICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJE
ICovICAgIDE2Mzg0LAorICAgICAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAg
IDIwNDgsCisgICAgICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlMYXllcnMgKi8gICAgMjA0OCwK
KyAgICAgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKKyAgICAg
ICAgICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1h
eER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZWRUZXh0
dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiB0ZXh0dXJlc1BlckJpbmRH
cm91cCwKKyAgICAgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4
QmluZEdyb3VwcyAqIHNhbXBsZXJzUGVyQmluZEdyb3VwLAorICAgICAgICAgICAgLyogbWF4U3Rv
cmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogYnVmZmVyc1Bl
ckJpbmRHcm91cCwKKyAgICAgICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0
YWdlICovICAgIG1heEJpbmRHcm91cHMgKiB0ZXh0dXJlc1BlckJpbmRHcm91cCwKKyAgICAgICAg
ICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3Vw
cyAqIGJ1ZmZlcnNQZXJCaW5kR3JvdXAsCisgICAgICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVy
QmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisg
ICAgICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8g
YmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvKiBtaW5Vbmlmb3JtQnVm
ZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDI1NiwKKyAgICAgICAgICAgIC8qIG1pblN0b3JhZ2VC
dWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgMjU2LAorICAgICAgICAgICAgLyogbWF4VmVydGV4
QnVmZmVycyAqLyAgICAzMCwKKyAgICAgICAgICAgIC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8g
ICAgMzEsCisgICAgICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCisgICAgICAgICAgICAvKiBtYXhJ
bnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyAqLyAgICAzMiwKKyAgICAgICAgICAgIC8qIG1heENv
bXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtCLAorICAgICAgICAgICAgLyog
bWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQsCisgICAgICAgICAg
ICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggKi8gICAgMTAyNCwKKyAgICAgICAgICAgIC8q
IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAxMDI0LAorICAgICAgICAgICAgLyogbWF4
Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCisgICAgICAgICAgICAvKiBtYXhDb21w
dXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksCisgICAgICAgIH0sCisgICAgICAgIFdURk1vdmUoZmVhdHVyZXMpLAorICAg
ICAgICBiYXNlQ2FwYWJpbGl0aWVzLAorICAgIH07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
Pgorc3RhdGljIFQgbWVyZ2VNYXhpbXVtKFQgcHJldmlvdXMsIFQgbmV4dCkKK3sKKyAgICAvLyBo
dHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNsaW1pdC1jbGFzcy1tYXhpbXVtCisgICAg
cmV0dXJuIHN0ZDo6bWF4KHByZXZpb3VzLCBuZXh0KTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorc3RhdGljIFQgbWVyZ2VBbGlnbm1lbnQoVCBwcmV2aW91cywgVCBuZXh0KQoreworICAg
IC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2xpbWl0LWNsYXNzLWFsaWdubWVu
dAorICAgIHJldHVybiBzdGQ6Om1pbihXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28ocHJldmlvdXMp
LCBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28obmV4dCkpOworfTsKKworc3RhdGljIFdHUFVMaW1p
dHMgbWVyZ2VMaW1pdHMoY29uc3QgV0dQVUxpbWl0cyYgcHJldmlvdXMsIGNvbnN0IFdHUFVMaW1p
dHMmIG5leHQpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3Vz
Lm1heFRleHR1cmVEaW1lbnNpb24xRCwgbmV4dC5tYXhUZXh0dXJlRGltZW5zaW9uMUQpLAorICAg
ICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VGV4dHVyZURpbWVuc2lvbjJELCBuZXh0Lm1h
eFRleHR1cmVEaW1lbnNpb24yRCksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhU
ZXh0dXJlRGltZW5zaW9uM0QsIG5leHQubWF4VGV4dHVyZURpbWVuc2lvbjNEKSwKKyAgICAgICAg
bWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFRleHR1cmVBcnJheUxheWVycywgbmV4dC5tYXhUZXh0
dXJlQXJyYXlMYXllcnMpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4QmluZEdy
b3VwcywgbmV4dC5tYXhCaW5kR3JvdXBzKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3Vz
Lm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LCBuZXh0Lm1heER5bmFt
aWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0KSwKKyAgICAgICAgbWVyZ2VNYXhpbXVt
KHByZXZpb3VzLm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LCBuZXh0
Lm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0KSwKKyAgICAgICAgbWVy
Z2VNYXhpbXVtKHByZXZpb3VzLm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlLCBuZXh0
Lm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVt
KHByZXZpb3VzLm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsIG5leHQubWF4U2FtcGxlcnNQZXJT
aGFkZXJTdGFnZSksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhTdG9yYWdlQnVm
ZmVyc1BlclNoYWRlclN0YWdlLCBuZXh0Lm1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2Up
LAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4U3RvcmFnZVRleHR1cmVzUGVyU2hh
ZGVyU3RhZ2UsIG5leHQubWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UpLAorICAgICAg
ICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwg
bmV4dC5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlKSwKKyAgICAgICAgbWVyZ2VNYXhp
bXVtKHByZXZpb3VzLm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSwgbmV4dC5tYXhVbmlmb3Jt
QnVmZmVyQmluZGluZ1NpemUpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4U3Rv
cmFnZUJ1ZmZlckJpbmRpbmdTaXplLCBuZXh0Lm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSks
CisgICAgICAgIG1lcmdlQWxpZ25tZW50KHByZXZpb3VzLm1pblVuaWZvcm1CdWZmZXJPZmZzZXRB
bGlnbm1lbnQsIG5leHQubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCksCisgICAgICAg
IG1lcmdlQWxpZ25tZW50KHByZXZpb3VzLm1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQs
IG5leHQubWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCksCisgICAgICAgIG1lcmdlTWF4
aW11bShwcmV2aW91cy5tYXhWZXJ0ZXhCdWZmZXJzLCBuZXh0Lm1heFZlcnRleEJ1ZmZlcnMpLAor
ICAgICAgICBtZXJnZU1heGltdW0ocHJldmlvdXMubWF4VmVydGV4QXR0cmlidXRlcywgbmV4dC5t
YXhWZXJ0ZXhBdHRyaWJ1dGVzKSwKKyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heFZl
cnRleEJ1ZmZlckFycmF5U3RyaWRlLCBuZXh0Lm1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlKSwK
KyAgICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heEludGVyU3RhZ2VTaGFkZXJDb21wb25l
bnRzLCBuZXh0Lm1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzKSwKKyAgICAgICAgbWVyZ2VN
YXhpbXVtKHByZXZpb3VzLm1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSwgbmV4dC5tYXhD
b21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlv
dXMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLCBuZXh0Lm1heENvbXB1dGVJbnZv
Y2F0aW9uc1Blcldvcmtncm91cCksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhD
b21wdXRlV29ya2dyb3VwU2l6ZVgsIG5leHQubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYKSwKKyAg
ICAgICAgbWVyZ2VNYXhpbXVtKHByZXZpb3VzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSwgbmV4
dC5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkpLAorICAgICAgICBtZXJnZU1heGltdW0ocHJldmlv
dXMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaLCBuZXh0Lm1heENvbXB1dGVXb3JrZ3JvdXBTaXpl
WiksCisgICAgICAgIG1lcmdlTWF4aW11bShwcmV2aW91cy5tYXhDb21wdXRlV29ya2dyb3Vwc1Bl
ckRpbWVuc2lvbiwgbmV4dC5tYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiksCisgICAg
fTsKK307CisKK3N0YXRpYyBWZWN0b3I8V0dQVUZlYXR1cmVOYW1lPiBtZXJnZUZlYXR1cmVzKGNv
bnN0IFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+JiBwcmV2aW91cywgY29uc3QgVmVjdG9yPFdHUFVG
ZWF0dXJlTmFtZT4mIG5leHQpCit7CisgICAgQVNTRVJUKFdURjo6aXNTb3J0ZWRDb25zdEV4cHIo
cHJldmlvdXMuYmVnaW4oKSwgcHJldmlvdXMuZW5kKCkpKTsKKyAgICBBU1NFUlQoV1RGOjppc1Nv
cnRlZENvbnN0RXhwcihuZXh0LmJlZ2luKCksIG5leHQuZW5kKCkpKTsKKworICAgIFZlY3RvcjxX
R1BVRmVhdHVyZU5hbWU+IHJlc3VsdChwcmV2aW91cy5zaXplKCkgKyBuZXh0LnNpemUoKSk7Cisg
ICAgYXV0byBlbmQgPSBtZXJnZURlZHVwbGljYXRlZFNvcnRlZChwcmV2aW91cy5iZWdpbigpLCBw
cmV2aW91cy5lbmQoKSwgbmV4dC5iZWdpbigpLCBuZXh0LmVuZCgpLCByZXN1bHQuYmVnaW4oKSk7
CisgICAgcmVzdWx0LnJlc2l6ZShlbmQgLSByZXN1bHQuYmVnaW4oKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIEhhcmR3YXJlQ2FwYWJpbGl0aWVzOjpCYXNlQ2FwYWJpbGl0aWVz
IG1lcmdlQmFzZUNhcGFiaWxpdGllcyhjb25zdCBIYXJkd2FyZUNhcGFiaWxpdGllczo6QmFzZUNh
cGFiaWxpdGllcyYgcHJldmlvdXMsIGNvbnN0IEhhcmR3YXJlQ2FwYWJpbGl0aWVzOjpCYXNlQ2Fw
YWJpbGl0aWVzJiBuZXh0KQoreworICAgIEFTU0VSVChwcmV2aW91cy5hcmd1bWVudEJ1ZmZlcnNU
aWVyID09IG5leHQuYXJndW1lbnRCdWZmZXJzVGllcik7CisgICAgQVNTRVJUKCFwcmV2aW91cy50
aW1lc3RhbXBDb3VudGVyU2V0IHx8IFtwcmV2aW91cy50aW1lc3RhbXBDb3VudGVyU2V0IGlzRXF1
YWw6bmV4dC50aW1lc3RhbXBDb3VudGVyU2V0XSk7CisgICAgQVNTRVJUKCFwcmV2aW91cy5zdGF0
aXN0aWNDb3VudGVyU2V0IHx8IFtwcmV2aW91cy5zdGF0aXN0aWNDb3VudGVyU2V0IGlzRXF1YWw6
bmV4dC5zdGF0aXN0aWNDb3VudGVyU2V0XSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgcHJldmlv
dXMuYXJndW1lbnRCdWZmZXJzVGllciwKKyAgICAgICAgcHJldmlvdXMuc3VwcG9ydHNOb25Qcml2
YXRlRGVwdGhTdGVuY2lsVGV4dHVyZXMgfHwgbmV4dC5zdXBwb3J0c05vblByaXZhdGVEZXB0aFN0
ZW5jaWxUZXh0dXJlcywKKyAgICAgICAgcHJldmlvdXMudGltZXN0YW1wQ291bnRlclNldCwKKyAg
ICAgICAgcHJldmlvdXMuc3RhdGlzdGljQ291bnRlclNldCwKKyAgICB9OworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxIYXJkd2FyZUNhcGFiaWxpdGllcz4gcmF3SGFyZHdhcmVDYXBhYmlsaXRp
ZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgc3RkOjpvcHRpb25hbDxIYXJkd2FyZUNh
cGFiaWxpdGllcz4gcmVzdWx0OworCisgICAgYXV0byBtZXJnZSA9IFsmXShjb25zdCBIYXJkd2Fy
ZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIGlmICghcmVzdWx0KSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBjYXBhYmlsaXRpZXM7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICByZXN1bHQtPmxpbWl0cyA9IG1lcmdlTGltaXRzKHJlc3VsdC0+
bGltaXRzLCBjYXBhYmlsaXRpZXMubGltaXRzKTsKKyAgICAgICAgcmVzdWx0LT5mZWF0dXJlcyA9
IG1lcmdlRmVhdHVyZXMocmVzdWx0LT5mZWF0dXJlcywgY2FwYWJpbGl0aWVzLmZlYXR1cmVzKTsK
KyAgICAgICAgcmVzdWx0LT5iYXNlQ2FwYWJpbGl0aWVzID0gbWVyZ2VCYXNlQ2FwYWJpbGl0aWVz
KHJlc3VsdC0+YmFzZUNhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVzLmJhc2VDYXBhYmlsaXRpZXMp
OworICAgIH07CisKKyAgICAvLyBUaGUgZmVhdHVyZSBzZXQgdGFibGVzIGRvIG5vdCBsaXN0IGxp
bWl0cyBmb3IgTVRMR1BVRmFtaWx5Q29tbW9uMSwgTVRMR1BVRmFtaWx5Q29tbW9uMiwgb3IgTVRM
R1BVRmFtaWx5Q29tbW9uMy4KKyAgICAvLyBNVExHUFVGYW1pbHlBcHBsZTEgYW5kIE1UTEdQVUZh
bWlseUFwcGxlMiBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICBpZiAoW2RldmljZSBzdXBwb3J0c0Zh
bWlseTpNVExHUFVGYW1pbHlBcHBsZTNdKQorICAgICAgICBtZXJnZShhcHBsZTMoZGV2aWNlKSk7
CisgICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBwbGU0XSkKKyAg
ICAgICAgbWVyZ2UoYXBwbGU0KGRldmljZSkpOworICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFt
aWx5Ok1UTEdQVUZhbWlseUFwcGxlNV0pCisgICAgICAgIG1lcmdlKGFwcGxlNShkZXZpY2UpKTsK
KyNpZiAhUExBVEZPUk0oV0FUQ0hPUykKKyAgICBpZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpN
VExHUFVGYW1pbHlBcHBsZTZdKQorICAgICAgICBtZXJnZShhcHBsZTYoZGV2aWNlKSk7CisgICAg
aWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBwbGU3XSkKKyAgICAgICAg
bWVyZ2UoYXBwbGU3KGRldmljZSkpOworI2VuZGlmCisgICAgLy8gTVRMR1BVRmFtaWx5TWFjMSBp
cyBub3Qgc3VwcG9ydGVkICh5ZXQ/KS4KKyAgICBpZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpN
VExHUFVGYW1pbHlNYWMyXSkKKyAgICAgICAgbWVyZ2UobWFjMihkZXZpY2UpKTsKKworICAgIGlm
IChyZXN1bHQpIHsKKyAgICAgICAgYXV0byBtYXhCdWZmZXJMZW5ndGggPSBkZXZpY2UubWF4QnVm
ZmVyTGVuZ3RoOworICAgICAgICByZXN1bHQtPmxpbWl0cy5tYXhVbmlmb3JtQnVmZmVyQmluZGlu
Z1NpemUgPSBtYXhCdWZmZXJMZW5ndGg7CisgICAgICAgIHJlc3VsdC0+bGltaXRzLm1heFN0b3Jh
Z2VCdWZmZXJCaW5kaW5nU2l6ZSA9IG1heEJ1ZmZlckxlbmd0aDsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitib29sIGFueUxpbWl0SXNCZXR0ZXJUaGFuKGNvbnN0IFdHUFVMaW1p
dHMmIHRhcmdldCwgY29uc3QgV0dQVUxpbWl0cyYgcmVmZXJlbmNlKQoreworICAgIGlmICh0YXJn
ZXQubWF4VGV4dHVyZURpbWVuc2lvbjFEID4gcmVmZXJlbmNlLm1heFRleHR1cmVEaW1lbnNpb24x
RCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhUZXh0dXJlRGltZW5z
aW9uMkQgPiByZWZlcmVuY2UubWF4VGV4dHVyZURpbWVuc2lvbjJEKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heFRleHR1cmVEaW1lbnNpb24zRCA+IHJlZmVyZW5jZS5t
YXhUZXh0dXJlRGltZW5zaW9uM0QpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJn
ZXQubWF4VGV4dHVyZUFycmF5TGF5ZXJzID4gcmVmZXJlbmNlLm1heFRleHR1cmVBcnJheUxheWVy
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhCaW5kR3JvdXBzID4g
cmVmZXJlbmNlLm1heEJpbmRHcm91cHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0
YXJnZXQubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgPiByZWZlcmVu
Y2UubWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlw
ZWxpbmVMYXlvdXQgPiByZWZlcmVuY2UubWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxp
bmVMYXlvdXQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4U2FtcGxl
ZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4U2FtcGxlZFRleHR1cmVzUGVy
U2hhZGVyU3RhZ2UpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4U2Ft
cGxlcnNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTYW1wbGVyc1BlclNoYWRlclN0YWdl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heFN0b3JhZ2VCdWZmZXJz
UGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFn
ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhTdG9yYWdlVGV4dHVy
ZXNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5jZS5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJT
dGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhVbmlmb3JtQnVm
ZmVyc1BlclNoYWRlclN0YWdlID4gcmVmZXJlbmNlLm1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVy
U3RhZ2UpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4VW5pZm9ybUJ1
ZmZlckJpbmRpbmdTaXplID4gcmVmZXJlbmNlLm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhTdG9yYWdlQnVmZmVyQmlu
ZGluZ1NpemUgPiByZWZlcmVuY2UubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGln
bm1lbnQgPCByZWZlcmVuY2UubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5taW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxp
Z25tZW50IDwgcmVmZXJlbmNlLm1pblN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4VmVydGV4QnVmZmVycyA+IHJlZmVy
ZW5jZS5tYXhWZXJ0ZXhCdWZmZXJzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFy
Z2V0Lm1heFZlcnRleEF0dHJpYnV0ZXMgPiByZWZlcmVuY2UubWF4VmVydGV4QXR0cmlidXRlcykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhWZXJ0ZXhCdWZmZXJBcnJh
eVN0cmlkZSA+IHJlZmVyZW5jZS5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50
cyA+IHJlZmVyZW5jZS5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cykKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUg
PiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91
cCA+IHJlZmVyZW5jZS5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXApCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYID4g
cmVmZXJlbmNlLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgPiByZWZlcmVuY2UubWF4
Q29tcHV0ZVdvcmtncm91cFNpemVZKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFy
Z2V0Lm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiA+IHJlZmVyZW5jZS5tYXhDb21wdXRlV29ya2dy
b3VwU2l6ZVopCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0YXJnZXQubWF4Q29tcHV0
ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gPiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cHNQ
ZXJEaW1lbnNpb24pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIGluY2x1ZGVzVW5zdXBwb3J0ZWRGZWF0dXJlcyhjb25zdCBWZWN0b3I8V0dQVUZl
YXR1cmVOYW1lPiYgdGFyZ2V0LCBjb25zdCBWZWN0b3I8V0dQVUZlYXR1cmVOYW1lPiYgcmVmZXJl
bmNlKQoreworICAgIEFTU0VSVChXVEY6OmlzU29ydGVkQ29uc3RFeHByKHRhcmdldC5iZWdpbigp
LCB0YXJnZXQuZW5kKCkpKTsKKyAgICBBU1NFUlQoV1RGOjppc1NvcnRlZENvbnN0RXhwcihyZWZl
cmVuY2UuYmVnaW4oKSwgcmVmZXJlbmNlLmVuZCgpKSk7CisgICAgZm9yIChhdXRvIGZlYXR1cmUg
OiB0YXJnZXQpIHsKKyAgICAgICAgaWYgKCFzdGQ6OmZpbmQocmVmZXJlbmNlLmJlZ2luKCksIHJl
ZmVyZW5jZS5lbmQoKSwgZmVhdHVyZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXR1BVTGltaXRzIGRlZmF1bHRMaW1pdHMoKQorewor
ICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2xpbWl0LWRlZmF1bHQKKwor
ICAgIHJldHVybiB7CisgICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24xRCAqLyAgICA4MTky
LAorICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgODE5MiwKKyAgICAgICAg
LyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgsCisgICAgICAgIC8qIG1heFRleHR1
cmVBcnJheUxheWVycyAqLyAgICAyNTYsCisgICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAg
NCwKKyAgICAgICAgLyogbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQg
Ki8gICAgOCwKKyAgICAgICAgLyogbWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVM
YXlvdXQgKi8gICAgNCwKKyAgICAgICAgLyogbWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3Rh
Z2UgKi8gICAgMTYsCisgICAgICAgIC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAg
MTYsCisgICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgOCwK
KyAgICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgNCwKKyAg
ICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICAxMiwKKyAgICAg
ICAgLyogbWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDY1NTM2LAorICAgICAgICAv
KiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMTM0MjE3NzI4LAorICAgICAgICAv
KiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDI1NiwKKyAgICAgICAgLyog
bWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICAyNTYsCisgICAgICAgIC8qIG1h
eFZlcnRleEJ1ZmZlcnMgKi8gICAgOCwKKyAgICAgICAgLyogbWF4VmVydGV4QXR0cmlidXRlcyAq
LyAgICAxNiwKKyAgICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgMjA0
OCwKKyAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMzIsCisg
ICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAxNjM1MiwKKyAg
ICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDI1NiwKKyAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYICovICAgIDI1NiwKKyAgICAgICAgLyog
bWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAgIDI1NiwKKyAgICAgICAgLyogbWF4Q29tcHV0
ZVdvcmtncm91cFNpemVaICovICAgIDY0LAorICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vw
c1BlckRpbWVuc2lvbiAqLyAgICA2NTUzNSwKKyAgICB9OworfQorCitzdGQ6Om9wdGlvbmFsPEhh
cmR3YXJlQ2FwYWJpbGl0aWVzPiBoYXJkd2FyZUNhcGFiaWxpdGllcyhpZDxNVExEZXZpY2U+IGRl
dmljZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHJhd0hhcmR3YXJlQ2FwYWJpbGl0aWVzKGRldmlj
ZSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGlmIChhbnlMaW1pdElzQmV0dGVyVGhhbihkZWZhdWx0TGltaXRzKCksIHJlc3VsdC0+bGlt
aXRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Jvb2wgaXNWYWxpZChjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMpCit7CisgICAgcmV0
dXJuIGlzUG93ZXJPZlR3byhsaW1pdHMubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCkg
JiYgaXNQb3dlck9mVHdvKGxpbWl0cy5taW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9IYXJkd2FyZUxpbWl0cy5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0hhcmR3YXJlTGlt
aXRzLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTIxYjI1YjJjN2EuLjAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9IYXJkd2FyZUxpbWl0cy5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDQ0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJIYXJkd2FyZUxp
bWl0cy5oIgotCi0jaW1wb3J0IDxhbGdvcml0aG0+Ci0jaW1wb3J0IDxsaW1pdHM+Ci0jaW1wb3J0
IDx3dGYvTWF0aEV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL1BhZ2VCbG9jay5oPgotI2ltcG9ydCA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViR1BVIHsKLQotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXIuYXBwbGUuY29tL21ldGFsL01ldGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5wZGYKLQot
Ly8gRklYTUU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2lzc3Vlcy8yNzQ5IHdl
IG5lZWQgbW9yZSBsaW1pdHMuCi0KLWNvbnN0ZXhwciBzdGF0aWMgV0dQVUxpbWl0cyBhcHBsZTMo
KQotewotICAgIHVpbnQzMl90IG1heEJpbmRHcm91cHMgPSAzMDsKLQotICAgIHJldHVybiBXR1BV
TGltaXRzIHsKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjFEICovICAgIDE2Mzg0LAot
ICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMkQgKi8gICAgMTYzODQsCi0gICAgICAgIC8q
IG1heFRleHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhUZXh0dXJl
QXJyYXlMYXllcnMgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4QmluZEdyb3VwcyAqLyAgICBt
YXhCaW5kR3JvdXBzLAotICAgICAgICAvKiBtYXhEeW5hbWljVW5pZm9ybUJ1ZmZlcnNQZXJQaXBl
bGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0g
ICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4U2Ft
cGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDMxLAotICAg
ICAgICAvKiBtYXhTYW1wbGVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAx
NiwKLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhC
aW5kR3JvdXBzICogMzEsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0
YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAzMSwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZl
cnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogMzEsCi0gICAgICAgIC8qIG1h
eFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkg
dGhlIGNhbGxlci4KLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAg
IDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAgICAgICAvKiBtaW5Vbmlm
b3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCi0gICAgICAgIC8qIG1pblN0b3JhZ2VC
dWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVy
cyAqLyAgICAzMCwKLSAgICAgICAgLyogbWF4VmVydGV4QXR0cmlidXRlcyAqLyAgICAzMSwKLSAg
ICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29t
cG9uZW50cyAqLyAgICA2MCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VT
aXplICovICAgIDE2ICogS0IsCi0gICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldv
cmtncm91cCAqLyAgICA1MTIsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAq
LyAgICA1MTIsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICA1MTIs
Ci0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICA1MTIsCi0gICAgICAg
IC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICB9OwotfQotCi1jb25zdGV4cHIgc3RhdGljIFdH
UFVMaW1pdHMgYXBwbGU0KCkKLXsKLSAgICB1aW50MzJfdCBtYXhCaW5kR3JvdXBzID0gMzA7Ci0K
LSAgICByZXR1cm4gV0dQVUxpbWl0cyB7Ci0gICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24x
RCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDE2
Mzg0LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uM0QgKi8gICAgMjA0OCwKLSAgICAg
ICAgLyogbWF4VGV4dHVyZUFycmF5TGF5ZXJzICovICAgIDIwNDgsCi0gICAgICAgIC8qIG1heEJp
bmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKLSAgICAgICAgLyogbWF4RHluYW1pY1VuaWZv
cm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhEeW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBl
bGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0g
ICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRH
cm91cHMgKiA5NiwKLSAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBt
YXhCaW5kR3JvdXBzICogMTYsCi0gICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVy
U3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDk2LAotICAgICAgICAvKiBtYXhTdG9yYWdlVGV4
dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogOTYsCi0gICAgICAgIC8q
IG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDk2
LAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUgKi8gICAgMCwgLy8gVG8g
YmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1heFN0b3JhZ2VCdWZmZXJC
aW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4KLSAg
ICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAotICAgICAg
ICAvKiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCi0gICAgICAgIC8q
IG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCi0gICAgICAgIC8qIG1heFZlcnRleEF0dHJpYnV0
ZXMgKi8gICAgMzEsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlICovICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4SW50
ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0LAotICAgICAgICAvKiBtYXhDb21wdXRl
V29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIgKiBLQiwKLSAgICAgICAgLyogbWF4Q29tcHV0
ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1
dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dy
b3VwU2l6ZVkgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVa
ICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9u
ICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICB9OwotfQot
Ci1jb25zdGV4cHIgc3RhdGljIFdHUFVMaW1pdHMgYXBwbGU1KCkKLXsKLSAgICB1aW50MzJfdCBt
YXhCaW5kR3JvdXBzID0gMzA7Ci0KLSAgICByZXR1cm4gV0dQVUxpbWl0cyB7Ci0gICAgICAgIC8q
IG1heFRleHR1cmVEaW1lbnNpb24xRCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVy
ZURpbWVuc2lvbjJEICovICAgIDE2Mzg0LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9u
M0QgKi8gICAgMjA0OCwKLSAgICAgICAgLyogbWF4VGV4dHVyZUFycmF5TGF5ZXJzICovICAgIDIw
NDgsCi0gICAgICAgIC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKLSAgICAg
ICAgLyogbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhEeW5hbWlj
U3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRl
clN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA5NiwKLSAgICAgICAgLyogbWF4U2FtcGxlcnNQ
ZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogMTYsCi0gICAgICAgIC8qIG1heFN0
b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDk2LAotICAg
ICAgICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3Jv
dXBzICogOTYsCi0gICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8g
ICAgbWF4QmluZEdyb3VwcyAqIDk2LAotICAgICAgICAvKiBtYXhVbmlmb3JtQnVmZmVyQmluZGlu
Z1NpemUgKi8gICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAg
IC8qIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQg
aW4gYnkgdGhlIGNhbGxlci4KLSAgICAgICAgLyogbWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdu
bWVudCAqLyAgICA0LAotICAgICAgICAvKiBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50
ICovICAgIDQsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCi0gICAgICAg
IC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMzEsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1
ZmZlckFycmF5U3RyaWRlICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwKLSAgICAgICAgLyogbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMTI0LAot
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMzIgKiBLQiwK
LSAgICAgICAgLyogbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwICovICAgIDEwMjQs
Ci0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAxMDI0LAotICAgICAg
ICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4
Q29tcHV0ZVdvcmtncm91cFNpemVaICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVX
b3JrZ3JvdXBzUGVyRGltZW5zaW9uICovICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwKLSAgICB9OwotfQotCi0jaWYgIVBMQVRGT1JNKFdBVENIT1MpCi1jb25zdGV4cHIg
c3RhdGljIFdHUFVMaW1pdHMgYXBwbGU2KCkKLXsKLSAgICB1aW50MzJfdCBtYXhCaW5kR3JvdXBz
ID0gMzA7Ci0KLSAgICByZXR1cm4gV0dQVUxpbWl0cyB7Ci0gICAgICAgIC8qIG1heFRleHR1cmVE
aW1lbnNpb24xRCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJE
ICovICAgIDE2Mzg0LAotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uM0QgKi8gICAgMjA0
OCwKLSAgICAgICAgLyogbWF4VGV4dHVyZUFycmF5TGF5ZXJzICovICAgIDIwNDgsCi0gICAgICAg
IC8qIG1heEJpbmRHcm91cHMgKi8gICAgbWF4QmluZEdyb3VwcywKLSAgICAgICAgLyogbWF4RHlu
YW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhEeW5hbWljU3RvcmFnZUJ1ZmZl
cnNQZXJQaXBlbGluZUxheW91dCAqLyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksCi0gICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAg
IG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAyLAotICAgICAgICAvKiBtYXhTYW1wbGVyc1BlclNo
YWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiAxMDI0LAotICAgICAgICAvKiBtYXhTdG9y
YWdlQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIG1heEJpbmRHcm91cHMgKiA1MDAwMDAgLyAy
LAotICAgICAgICAvKiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhC
aW5kR3JvdXBzICogNTAwMDAwIC8gMiwKLSAgICAgICAgLyogbWF4VW5pZm9ybUJ1ZmZlcnNQZXJT
aGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogNTAwMDAwIC8gMiwKLSAgICAgICAgLyog
bWF4VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBi
eSB0aGUgY2FsbGVyLgotICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemUgKi8g
ICAgMCwgLy8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIC8qIG1pblVu
aWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKLSAgICAgICAgLyogbWluU3RvcmFn
ZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICA0LAotICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZm
ZXJzICovICAgIDMwLAotICAgICAgICAvKiBtYXhWZXJ0ZXhBdHRyaWJ1dGVzICovICAgIDMxLAot
ICAgICAgICAvKiBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSAqLyAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAgICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJD
b21wb25lbnRzICovICAgIDEyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFN0b3Jh
Z2VTaXplICovICAgIDMyICogS0IsCi0gICAgICAgIC8qIG1heENvbXB1dGVJbnZvY2F0aW9uc1Bl
cldvcmtncm91cCAqLyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6
ZVggKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVZICovICAg
IDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWiAqLyAgICAxMDI0LAot
ICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbiAqLyAgICBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAgfTsKLX0KLQotY29uc3RleHByIHN0
YXRpYyBXR1BVTGltaXRzIGFwcGxlNygpCi17Ci0gICAgdWludDMyX3QgbWF4QmluZEdyb3VwcyA9
IDMwOwotCi0gICAgcmV0dXJuIFdHUFVMaW1pdHMgewotICAgICAgICAvKiBtYXhUZXh0dXJlRGlt
ZW5zaW9uMUQgKi8gICAgMTYzODQsCi0gICAgICAgIC8qIG1heFRleHR1cmVEaW1lbnNpb24yRCAq
LyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNEICovICAgIDIwNDgs
Ci0gICAgICAgIC8qIG1heFRleHR1cmVBcnJheUxheWVycyAqLyAgICAyMDQ4LAotICAgICAgICAv
KiBtYXhCaW5kR3JvdXBzICovICAgIG1heEJpbmRHcm91cHMsCi0gICAgICAgIC8qIG1heER5bmFt
aWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJz
UGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpLAotICAgICAgICAvKiBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBt
YXhCaW5kR3JvdXBzICogNTAwMDAwIC8gMiwKLSAgICAgICAgLyogbWF4U2FtcGxlcnNQZXJTaGFk
ZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogMTAyNCwKLSAgICAgICAgLyogbWF4U3RvcmFn
ZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogNTAwMDAwIC8gMiwK
LSAgICAgICAgLyogbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4Qmlu
ZEdyb3VwcyAqIDUwMDAwMCAvIDIsCi0gICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hh
ZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIDUwMDAwMCAvIDIsCi0gICAgICAgIC8qIG1h
eFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxsZWQgaW4gYnkg
dGhlIGNhbGxlci4KLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAg
IDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAgICAgICAvKiBtaW5Vbmlm
b3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDQsCi0gICAgICAgIC8qIG1pblN0b3JhZ2VC
dWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgNCwKLSAgICAgICAgLyogbWF4VmVydGV4QnVmZmVy
cyAqLyAgICAzMCwKLSAgICAgICAgLyogbWF4VmVydGV4QXR0cmlidXRlcyAqLyAgICAzMSwKLSAg
ICAgICAgLyogbWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgKi8gICAgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhJbnRlclN0YWdlU2hhZGVyQ29t
cG9uZW50cyAqLyAgICAxMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdl
U2l6ZSAqLyAgICAzMiAqIEtCLAotICAgICAgICAvKiBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJX
b3JrZ3JvdXAgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cFNpemVY
ICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAx
MDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogKi8gICAgMTAyNCwKLSAg
ICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gKi8gICAgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgIH07Ci19Ci0jZW5kaWYKLQotc3RhdGlj
IFdHUFVMaW1pdHMgbWFjMihpZDxNVExEZXZpY2U+IGRldmljZSkKLXsKLSAgICB1aW50MzJfdCBi
dWZmZXJzUGVyQmluZEdyb3VwID0gMDsKLSAgICB1aW50MzJfdCB0ZXh0dXJlc1BlckJpbmRHcm91
cCA9IDA7Ci0gICAgdWludDMyX3Qgc2FtcGxlcnNQZXJCaW5kR3JvdXAgPSAwOwotICAgIHN3aXRj
aCAoW2RldmljZSBhcmd1bWVudEJ1ZmZlcnNTdXBwb3J0XSkgewotICAgIGNhc2UgTVRMQXJndW1l
bnRCdWZmZXJzVGllcjE6Ci0gICAgICAgIGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSA2NDsKLSAgICAg
ICAgdGV4dHVyZXNQZXJCaW5kR3JvdXAgPSAxMjg7Ci0gICAgICAgIHNhbXBsZXJzUGVyQmluZEdy
b3VwID0gMTY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTVRMQXJndW1lbnRCdWZmZXJzVGll
cjI6Ci0gICAgICAgIGJ1ZmZlcnNQZXJCaW5kR3JvdXAgPSA1MDAwMDAgLyAyOwotICAgICAgICB0
ZXh0dXJlc1BlckJpbmRHcm91cCA9IDUwMDAwMCAvIDI7Ci0gICAgICAgIHNhbXBsZXJzUGVyQmlu
ZEdyb3VwID0gMTAyNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgdWludDMyX3QgbWF4
QmluZEdyb3VwcyA9IDMwOwotCi0gICAgcmV0dXJuIFdHUFVMaW1pdHMgewotICAgICAgICAvKiBt
YXhUZXh0dXJlRGltZW5zaW9uMUQgKi8gICAgMTYzODQsCi0gICAgICAgIC8qIG1heFRleHR1cmVE
aW1lbnNpb24yRCAqLyAgICAxNjM4NCwKLSAgICAgICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjNE
ICovICAgIDIwNDgsCi0gICAgICAgIC8qIG1heFRleHR1cmVBcnJheUxheWVycyAqLyAgICAyMDQ4
LAotICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIG1heEJpbmRHcm91cHMsCi0gICAgICAg
IC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4RHluYW1pY1N0
b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQgKi8gICAgc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLAotICAgICAgICAvKiBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJT
dGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICogdGV4dHVyZXNQZXJCaW5kR3JvdXAsCi0gICAgICAg
IC8qIG1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIHNhbXBs
ZXJzUGVyQmluZEdyb3VwLAotICAgICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0
YWdlICovICAgIG1heEJpbmRHcm91cHMgKiBidWZmZXJzUGVyQmluZEdyb3VwLAotICAgICAgICAv
KiBtYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSAqLyAgICBtYXhCaW5kR3JvdXBzICog
dGV4dHVyZXNQZXJCaW5kR3JvdXAsCi0gICAgICAgIC8qIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hh
ZGVyU3RhZ2UgKi8gICAgbWF4QmluZEdyb3VwcyAqIGJ1ZmZlcnNQZXJCaW5kR3JvdXAsCi0gICAg
ICAgIC8qIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICAwLCAvLyBUbyBiZSBmaWxs
ZWQgaW4gYnkgdGhlIGNhbGxlci4KLSAgICAgICAgLyogbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdT
aXplICovICAgIDAsIC8vIFRvIGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLgotICAgICAgICAv
KiBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ICovICAgIDI1NiwKLSAgICAgICAgLyog
bWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICAyNTYsCi0gICAgICAgIC8qIG1h
eFZlcnRleEJ1ZmZlcnMgKi8gICAgMzAsCi0gICAgICAgIC8qIG1heFZlcnRleEF0dHJpYnV0ZXMg
Ki8gICAgMzEsCi0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlICovICAgIHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKLSAgICAgICAgLyogbWF4SW50ZXJT
dGFnZVNoYWRlckNvbXBvbmVudHMgKi8gICAgMzIsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3Jr
Z3JvdXBTdG9yYWdlU2l6ZSAqLyAgICAzMiAqIEtCLAotICAgICAgICAvKiBtYXhDb21wdXRlSW52
b2NhdGlvbnNQZXJXb3JrZ3JvdXAgKi8gICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdv
cmtncm91cFNpemVYICovICAgIDEwMjQsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3JvdXBT
aXplWSAqLyAgICAxMDI0LAotICAgICAgICAvKiBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogKi8g
ICAgMTAyNCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24gKi8g
ICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAotICAgIH07Ci19Ci0KLXN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFdHUFVMaW1pdHM+IHJhd0xpbWl0cyhpZDxNVExEZXZpY2U+IGRl
dmljZSkKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPFdHUFVMaW1pdHM+IHJlc3VsdDsKLQotICAgIGF1
dG8gbWVyZ2UgPSBbJl0oY29uc3QgV0dQVUxpbWl0cyYgbGltaXRzKSB7Ci0gICAgICAgIGlmICgh
cmVzdWx0KSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBsaW1pdHM7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1
d2ViLyNsaW1pdC1jbGFzcy1tYXhpbXVtCi0gICAgICAgIGF1dG8gbWVyZ2VNYXhpbXVtID0gW10o
YXV0byBwcmV2aW91cywgYXV0byBuZXh0KSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgo
cHJldmlvdXMsIG5leHQpOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIGh0dHBzOi8vZ3B1d2Vi
LmdpdGh1Yi5pby9ncHV3ZWIvI2xpbWl0LWNsYXNzLWFsaWdubWVudAotICAgICAgICBhdXRvIG1l
cmdlQWxpZ25tZW50ID0gW10oYXV0byBwcmV2aW91cywgYXV0byBuZXh0KSB7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptaW4oV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHByZXZpb3VzKSwgV1RG
Ojpyb3VuZFVwVG9Qb3dlck9mVHdvKG5leHQpKTsKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1
bHQtPm1heFRleHR1cmVEaW1lbnNpb24xRCA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFRleHR1
cmVEaW1lbnNpb24xRCwgbGltaXRzLm1heFRleHR1cmVEaW1lbnNpb24xRCk7Ci0gICAgICAgIHJl
c3VsdC0+bWF4VGV4dHVyZURpbWVuc2lvbjJEID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4VGV4
dHVyZURpbWVuc2lvbjJELCBsaW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjJEKTsKLSAgICAgICAg
cmVzdWx0LT5tYXhUZXh0dXJlRGltZW5zaW9uM0QgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhU
ZXh0dXJlRGltZW5zaW9uM0QsIGxpbWl0cy5tYXhUZXh0dXJlRGltZW5zaW9uM0QpOwotICAgICAg
ICByZXN1bHQtPm1heFRleHR1cmVBcnJheUxheWVycyA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1h
eFRleHR1cmVBcnJheUxheWVycywgbGltaXRzLm1heFRleHR1cmVBcnJheUxheWVycyk7Ci0gICAg
ICAgIHJlc3VsdC0+bWF4QmluZEdyb3VwcyA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heEJpbmRH
cm91cHMsIGxpbWl0cy5tYXhCaW5kR3JvdXBzKTsKLSAgICAgICAgcmVzdWx0LT5tYXhEeW5hbWlj
VW5pZm9ybUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1h
eER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LCBsaW1pdHMubWF4RHluYW1p
Y1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQpOwotICAgICAgICByZXN1bHQtPm1heER5
bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ID0gbWVyZ2VNYXhpbXVtKHJlc3Vs
dC0+bWF4RHluYW1pY1N0b3JhZ2VCdWZmZXJzUGVyUGlwZWxpbmVMYXlvdXQsIGxpbWl0cy5tYXhE
eW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCk7Ci0gICAgICAgIHJlc3VsdC0+
bWF4U2FtcGxlZFRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5t
YXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwgbGltaXRzLm1heFNhbXBsZWRUZXh0dXJl
c1BlclNoYWRlclN0YWdlKTsKLSAgICAgICAgcmVzdWx0LT5tYXhTYW1wbGVyc1BlclNoYWRlclN0
YWdlID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSwgbGlt
aXRzLm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UpOwotICAgICAgICByZXN1bHQtPm1heFN0b3Jh
Z2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhTdG9yYWdl
QnVmZmVyc1BlclNoYWRlclN0YWdlLCBsaW1pdHMubWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJT
dGFnZSk7Ci0gICAgICAgIHJlc3VsdC0+bWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2Ug
PSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwg
bGltaXRzLm1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0YWdlKTsKLSAgICAgICAgcmVzdWx0
LT5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+
bWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwgbGltaXRzLm1heFVuaWZvcm1CdWZmZXJz
UGVyU2hhZGVyU3RhZ2UpOwotICAgICAgICByZXN1bHQtPm1heFVuaWZvcm1CdWZmZXJCaW5kaW5n
U2l6ZSA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSwg
bGltaXRzLm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSk7Ci0gICAgICAgIHJlc3VsdC0+bWF4
U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4U3RvcmFn
ZUJ1ZmZlckJpbmRpbmdTaXplLCBsaW1pdHMubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplKTsK
LSAgICAgICAgcmVzdWx0LT5taW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50ID0gbWVyZ2VB
bGlnbm1lbnQocmVzdWx0LT5taW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50LCBsaW1pdHMu
bWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCk7Ci0gICAgICAgIHJlc3VsdC0+bWluU3Rv
cmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCA9IG1lcmdlQWxpZ25tZW50KHJlc3VsdC0+bWluU3Rv
cmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCwgbGltaXRzLm1pblN0b3JhZ2VCdWZmZXJPZmZzZXRB
bGlnbm1lbnQpOwotICAgICAgICByZXN1bHQtPm1heFZlcnRleEJ1ZmZlcnMgPSBtZXJnZU1heGlt
dW0ocmVzdWx0LT5tYXhWZXJ0ZXhCdWZmZXJzLCBsaW1pdHMubWF4VmVydGV4QnVmZmVycyk7Ci0g
ICAgICAgIHJlc3VsdC0+bWF4VmVydGV4QXR0cmlidXRlcyA9IG1lcmdlTWF4aW11bShyZXN1bHQt
Pm1heFZlcnRleEF0dHJpYnV0ZXMsIGxpbWl0cy5tYXhWZXJ0ZXhBdHRyaWJ1dGVzKTsKLSAgICAg
ICAgcmVzdWx0LT5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSA9IG1lcmdlTWF4aW11bShyZXN1
bHQtPm1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlLCBsaW1pdHMubWF4VmVydGV4QnVmZmVyQXJy
YXlTdHJpZGUpOwotICAgICAgICByZXN1bHQtPm1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRz
ID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMsIGxp
bWl0cy5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cyk7Ci0gICAgICAgIHJlc3VsdC0+bWF4
Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4Q29t
cHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplLCBsaW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFN0b3Jh
Z2VTaXplKTsKLSAgICAgICAgcmVzdWx0LT5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3Jv
dXAgPSBtZXJnZU1heGltdW0ocmVzdWx0LT5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3Jv
dXAsIGxpbWl0cy5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXApOwotICAgICAgICBy
ZXN1bHQtPm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCA9IG1lcmdlTWF4aW11bShyZXN1bHQtPm1h
eENvbXB1dGVXb3JrZ3JvdXBTaXplWCwgbGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCk7
Ci0gICAgICAgIHJlc3VsdC0+bWF4Q29tcHV0ZVdvcmtncm91cFNpemVZID0gbWVyZ2VNYXhpbXVt
KHJlc3VsdC0+bWF4Q29tcHV0ZVdvcmtncm91cFNpemVZLCBsaW1pdHMubWF4Q29tcHV0ZVdvcmtn
cm91cFNpemVZKTsKLSAgICAgICAgcmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVogPSBt
ZXJnZU1heGltdW0ocmVzdWx0LT5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVosIGxpbWl0cy5tYXhD
b21wdXRlV29ya2dyb3VwU2l6ZVopOwotICAgICAgICByZXN1bHQtPm1heENvbXB1dGVXb3JrZ3Jv
dXBzUGVyRGltZW5zaW9uID0gbWVyZ2VNYXhpbXVtKHJlc3VsdC0+bWF4Q29tcHV0ZVdvcmtncm91
cHNQZXJEaW1lbnNpb24sIGxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbik7
Ci0gICAgfTsKLQotICAgIC8vIFRoZSBmZWF0dXJlIHNldCB0YWJsZXMgZG8gbm90IGxpc3QgbGlt
aXRzIGZvciBNVExHUFVGYW1pbHlDb21tb24xLCBNVExHUFVGYW1pbHlDb21tb24yLCBvciBNVExH
UFVGYW1pbHlDb21tb24zLgotICAgIC8vIE1UTEdQVUZhbWlseUFwcGxlMSBhbmQgTVRMR1BVRmFt
aWx5QXBwbGUyIGFyZSBub3Qgc3VwcG9ydGVkLgotICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFt
aWx5Ok1UTEdQVUZhbWlseUFwcGxlM10pCi0gICAgICAgIG1lcmdlKGFwcGxlMygpKTsKLSAgICBp
ZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTRdKQotICAgICAgICBt
ZXJnZShhcHBsZTQoKSk7Ci0gICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFt
aWx5QXBwbGU1XSkKLSAgICAgICAgbWVyZ2UoYXBwbGU1KCkpOwotI2lmICFQTEFURk9STShXQVRD
SE9TKQotICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlNl0p
Ci0gICAgICAgIG1lcmdlKGFwcGxlNigpKTsKLSAgICBpZiAoW2RldmljZSBzdXBwb3J0c0ZhbWls
eTpNVExHUFVGYW1pbHlBcHBsZTddKQotICAgICAgICBtZXJnZShhcHBsZTcoKSk7Ci0jZW5kaWYK
LSAgICAvLyBNVExHUFVGYW1pbHlNYWMxIGlzIG5vdCBzdXBwb3J0ZWQgKHlldD8pLgotICAgIGlm
IChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseU1hYzJdKQotICAgICAgICBtZXJn
ZShtYWMyKGRldmljZSkpOwotCi0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICBhdXRvIG1heEJ1
ZmZlckxlbmd0aCA9IGRldmljZS5tYXhCdWZmZXJMZW5ndGg7Ci0gICAgICAgIHJlc3VsdC0+bWF4
VW5pZm9ybUJ1ZmZlckJpbmRpbmdTaXplID0gbWF4QnVmZmVyTGVuZ3RoOwotICAgICAgICByZXN1
bHQtPm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSA9IG1heEJ1ZmZlckxlbmd0aDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCBjaGVja0xpbWl0cyhjb25z
dCBXR1BVTGltaXRzJiBsaW1pdHMpCi17Ci0gICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlv
L2dwdXdlYi8jbGltaXQtZGVmYXVsdAotICAgIGF1dG8gZGVmYXVsdExpbWl0cyA9IFdHUFVMaW1p
dHMgewotICAgICAgICAvKiBtYXhUZXh0dXJlRGltZW5zaW9uMUQgKi8gICAgODE5MiwKLSAgICAg
ICAgLyogbWF4VGV4dHVyZURpbWVuc2lvbjJEICovICAgIDgxOTIsCi0gICAgICAgIC8qIG1heFRl
eHR1cmVEaW1lbnNpb24zRCAqLyAgICAyMDQ4LAotICAgICAgICAvKiBtYXhUZXh0dXJlQXJyYXlM
YXllcnMgKi8gICAgMjU2LAotICAgICAgICAvKiBtYXhCaW5kR3JvdXBzICovICAgIDQsCi0gICAg
ICAgIC8qIG1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICovICAgIDgs
Ci0gICAgICAgIC8qIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ICov
ICAgIDQsCi0gICAgICAgIC8qIG1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAg
IDE2LAotICAgICAgICAvKiBtYXhTYW1wbGVyc1BlclNoYWRlclN0YWdlICovICAgIDE2LAotICAg
ICAgICAvKiBtYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlICovICAgIDgsCi0gICAgICAg
IC8qIG1heFN0b3JhZ2VUZXh0dXJlc1BlclNoYWRlclN0YWdlICovICAgIDQsCi0gICAgICAgIC8q
IG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UgKi8gICAgMTIsCi0gICAgICAgIC8qIG1h
eFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSAqLyAgICA2NTUzNiwKLSAgICAgICAgLyogbWF4U3Rv
cmFnZUJ1ZmZlckJpbmRpbmdTaXplICovICAgIDEzNDIxNzcyOCwKLSAgICAgICAgLyogbWluVW5p
Zm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCAqLyAgICAyNTYsCi0gICAgICAgIC8qIG1pblN0b3Jh
Z2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQgKi8gICAgMjU2LAotICAgICAgICAvKiBtYXhWZXJ0ZXhC
dWZmZXJzICovICAgIDgsCi0gICAgICAgIC8qIG1heFZlcnRleEF0dHJpYnV0ZXMgKi8gICAgMTYs
Ci0gICAgICAgIC8qIG1heFZlcnRleEJ1ZmZlckFycmF5U3RyaWRlICovICAgIDIwNDgsCi0gICAg
ICAgIC8qIG1heEludGVyU3RhZ2VTaGFkZXJDb21wb25lbnRzICovICAgIDMyLAotICAgICAgICAv
KiBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgKi8gICAgMTYzNTIsCi0gICAgICAgIC8q
IG1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCAqLyAgICAyNTYsCi0gICAgICAgIC8q
IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCAqLyAgICAyNTYsCi0gICAgICAgIC8qIG1heENvbXB1
dGVXb3JrZ3JvdXBTaXplWSAqLyAgICAyNTYsCi0gICAgICAgIC8qIG1heENvbXB1dGVXb3JrZ3Jv
dXBTaXplWiAqLyAgICA2NCwKLSAgICAgICAgLyogbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1l
bnNpb24gKi8gICAgNjU1MzUsCi0gICAgfTsKLQotICAgIHJldHVybiAhYW55TGltaXRJc0JldHRl
clRoYW4oZGVmYXVsdExpbWl0cywgbGltaXRzKTsKLX0KLQotc3RkOjpvcHRpb25hbDxXR1BVTGlt
aXRzPiBsaW1pdHMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCi17Ci0gICAgYXV0byByZXN1bHQgPSBy
YXdMaW1pdHMoZGV2aWNlKTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgaWYgKCFjaGVja0xpbWl0cygqcmVzdWx0KSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgaXNWYWxp
ZChjb25zdCBXR1BVTGltaXRzJiBsaW1pdHMpCi17Ci0gICAgcmV0dXJuIGlzUG93ZXJPZlR3byhs
aW1pdHMubWluVW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCkgJiYgaXNQb3dlck9mVHdvKGxp
bWl0cy5taW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50KTsKLX0KLQotYm9vbCBhbnlMaW1p
dElzQmV0dGVyVGhhbihjb25zdCBXR1BVTGltaXRzJiB0YXJnZXQsIGNvbnN0IFdHUFVMaW1pdHMm
IHJlZmVyZW5jZSkKLXsKLSAgICBpZiAodGFyZ2V0Lm1heFRleHR1cmVEaW1lbnNpb24xRCA+IHJl
ZmVyZW5jZS5tYXhUZXh0dXJlRGltZW5zaW9uMUQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmICh0YXJnZXQubWF4VGV4dHVyZURpbWVuc2lvbjJEID4gcmVmZXJlbmNlLm1heFRleHR1cmVE
aW1lbnNpb24yRCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhUZXh0
dXJlRGltZW5zaW9uM0QgPiByZWZlcmVuY2UubWF4VGV4dHVyZURpbWVuc2lvbjNEKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFRleHR1cmVBcnJheUxheWVycyA+IHJl
ZmVyZW5jZS5tYXhUZXh0dXJlQXJyYXlMYXllcnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmICh0YXJnZXQubWF4QmluZEdyb3VwcyA+IHJlZmVyZW5jZS5tYXhCaW5kR3JvdXBzKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heER5bmFtaWNVbmlmb3JtQnVmZmVy
c1BlclBpcGVsaW5lTGF5b3V0ID4gcmVmZXJlbmNlLm1heER5bmFtaWNVbmlmb3JtQnVmZmVyc1Bl
clBpcGVsaW5lTGF5b3V0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1h
eER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0ID4gcmVmZXJlbmNlLm1heER5
bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlID4gcmVm
ZXJlbmNlLm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAodGFyZ2V0Lm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVu
Y2UubWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKHRhcmdldC5tYXhTdG9yYWdlQnVmZmVyc1BlclNoYWRlclN0YWdlID4gcmVmZXJlbmNlLm1h
eFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmICh0YXJnZXQubWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UgPiByZWZlcmVuY2Uu
bWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmICh0YXJnZXQubWF4VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSA+IHJlZmVyZW5j
ZS5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAodGFyZ2V0Lm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSA+IHJlZmVyZW5jZS5t
YXhVbmlmb3JtQnVmZmVyQmluZGluZ1NpemUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
ICh0YXJnZXQubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplID4gcmVmZXJlbmNlLm1heFN0b3Jh
Z2VCdWZmZXJCaW5kaW5nU2l6ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdl
dC5taW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50IDwgcmVmZXJlbmNlLm1pblVuaWZvcm1C
dWZmZXJPZmZzZXRBbGlnbm1lbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJn
ZXQubWluU3RvcmFnZUJ1ZmZlck9mZnNldEFsaWdubWVudCA8IHJlZmVyZW5jZS5taW5TdG9yYWdl
QnVmZmVyT2Zmc2V0QWxpZ25tZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFy
Z2V0Lm1heFZlcnRleEJ1ZmZlcnMgPiByZWZlcmVuY2UubWF4VmVydGV4QnVmZmVycykKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhWZXJ0ZXhBdHRyaWJ1dGVzID4gcmVm
ZXJlbmNlLm1heFZlcnRleEF0dHJpYnV0ZXMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
ICh0YXJnZXQubWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUgPiByZWZlcmVuY2UubWF4VmVydGV4
QnVmZmVyQXJyYXlTdHJpZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQu
bWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMgPiByZWZlcmVuY2UubWF4SW50ZXJTdGFnZVNo
YWRlckNvbXBvbmVudHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4
Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplID4gcmVmZXJlbmNlLm1heENvbXB1dGVXb3JrZ3Jv
dXBTdG9yYWdlU2l6ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhD
b21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAgPiByZWZlcmVuY2UubWF4Q29tcHV0ZUludm9j
YXRpb25zUGVyV29ya2dyb3VwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGFyZ2V0
Lm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCA+IHJlZmVyZW5jZS5tYXhDb21wdXRlV29ya2dyb3Vw
U2l6ZVgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0YXJnZXQubWF4Q29tcHV0ZVdv
cmtncm91cFNpemVZID4gcmVmZXJlbmNlLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRhcmdldC5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVog
PiByZWZlcmVuY2UubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAodGFyZ2V0Lm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uID4gcmVm
ZXJlbmNlLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbSBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0luc3RhbmNlLm1tCmluZGV4IGE2NWM5MjY2MWJlYS4uNzg1Y2EwNGMwYmRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW1wb3J0ICJB
UElDb252ZXJzaW9ucy5oIgogI2ltcG9ydCAiQWRhcHRlci5oIgotI2ltcG9ydCAiSGFyZHdhcmVM
aW1pdHMuaCIKKyNpbXBvcnQgIkhhcmR3YXJlQ2FwYWJpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdXJm
YWNlLmgiCiAjaW1wb3J0IDxjc3RyaW5nPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CkBAIC0x
ODYsMTcgKzE4NiwxNyBAQCB2b2lkIEluc3RhbmNlOjpyZXF1ZXN0QWRhcHRlcihjb25zdCBXR1BV
UmVxdWVzdEFkYXB0ZXJPcHRpb25zJiBvcHRpb25zLCBDb21wbGV0aQogCiAgICAgYXV0byBkZXZp
Y2UgPSBzb3J0ZWREZXZpY2VzWzBdOwogCi0gICAgYXV0byBkZXZpY2VMaW1pdHMgPSBsaW1pdHMo
ZGV2aWNlKTsKKyAgICBhdXRvIGRldmljZUNhcGFiaWx0aWVzID0gaGFyZHdhcmVDYXBhYmlsaXRp
ZXMoZGV2aWNlKTsKIAotICAgIGlmICghZGV2aWNlTGltaXRzKSB7CisgICAgaWYgKCFkZXZpY2VD
YXBhYmlsdGllcykgewogICAgICAgICBzY2hlZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAq
dGhpcyB9LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgY2FsbGJhY2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzX0Vycm9yLCBBZGFwdGVyOjpj
cmVhdGVJbnZhbGlkKHN0cm9uZ1RoaXMpLCAiRGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgV2ViR1BV
Il9zKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzY2hlZHVs
ZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYgeyAqdGhpcyB9LCBkZXZpY2UgPSBzb3J0ZWREZXZpY2Vz
WzBdLCBsaW1pdHMgPSBXVEZNb3ZlKCpkZXZpY2VMaW1pdHMpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBjYWxsYmFjayhXR1BVUmVxdWVzdEFkYXB0
ZXJTdGF0dXNfU3VjY2VzcywgQWRhcHRlcjo6Y3JlYXRlKGRldmljZSwgc3Ryb25nVGhpcywgV1RG
TW92ZShsaW1pdHMpKSwgeyB9KTsKKyAgICBzY2hlZHVsZVdvcmsoW3N0cm9uZ1RoaXMgPSBSZWYg
eyAqdGhpcyB9LCBkZXZpY2UgPSBzb3J0ZWREZXZpY2VzWzBdLCBkZXZpY2VDYXBhYmlsdGllcyA9
IFdURk1vdmUoKmRldmljZUNhcGFiaWx0aWVzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbGJhY2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVz
X1N1Y2Nlc3MsIEFkYXB0ZXI6OmNyZWF0ZShkZXZpY2UsIHN0cm9uZ1RoaXMsIFdURk1vdmUoZGV2
aWNlQ2FwYWJpbHRpZXMpKSwgeyB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUu
bW0KaW5kZXggNzU2MmJlZTg0MWQzLi4wMTlhYWM0NTJiNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVy
ZS5tbQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViR1BVIHsKIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFdHUFVGZWF0dXJlTmFtZT4gZmVhdHVyZVJlcXVpcmVtZW50Rm9yRm9ybWF0KFdHUFVU
ZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFVub3JtU3RlbmNpbDg6IC8vIEZJWE1FOiBUaGlzIGhh
cyB0byBiZSBndWFyZGVkIGJ5IE1UTERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZvcm1hdFN1
cHBvcnRlZAorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFVub3JtU3RlbmNpbDg6
CiAgICAgICAgIHJldHVybiBXR1BVRmVhdHVyZU5hbWVfRGVwdGgyNFVub3JtU3RlbmNpbDg7CiAg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKICAgICAgICAg
cmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDMyRmxvYXRTdGVuY2lsODsKQEAgLTEyNDYsNyAr
MTI0Niw3IEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRl
eHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBjb25zCiAKICAgICBzd2l0Y2ggKGRlc2NyaXB0
b3IuZGltZW5zaW9uKSB7CiAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+IG1fbGltaXRzLm1heFRleHR1cmVEaW1lbnNp
b24xRCkKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+IGxpbWl0cygpLm1heFRl
eHR1cmVEaW1lbnNpb24xRCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBp
ZiAoZGVzY3JpcHRvci5zaXplLmhlaWdodCAhPSAxKQpAQCAtMTI2MiwyMyArMTI2MiwyMyBAQCBi
b29sIERldmljZTo6dmFsaWRhdGVDcmVhdGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgY29ucwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOgotICAgICAgICBpZiAo
ZGVzY3JpcHRvci5zaXplLndpZHRoID4gbV9saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjJEKQor
ICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXplLndpZHRoID4gbGltaXRzKCkubWF4VGV4dHVyZURp
bWVuc2lvbjJEKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChkZXNj
cmlwdG9yLnNpemUuaGVpZ2h0ID4gbV9saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjJEKQorICAg
ICAgICBpZiAoZGVzY3JpcHRvci5zaXplLmhlaWdodCA+IGxpbWl0cygpLm1heFRleHR1cmVEaW1l
bnNpb24yRCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZGVzY3Jp
cHRvci5zaXplLmRlcHRoT3JBcnJheUxheWVycyA+IG1fbGltaXRzLm1heFRleHR1cmVBcnJheUxh
eWVycykKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgPiBs
aW1pdHMoKS5tYXhUZXh0dXJlQXJyYXlMYXllcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6Ci0gICAg
ICAgIGlmIChkZXNjcmlwdG9yLnNpemUud2lkdGggPiBtX2xpbWl0cy5tYXhUZXh0dXJlRGltZW5z
aW9uM0QpCisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUud2lkdGggPiBsaW1pdHMoKS5tYXhU
ZXh0dXJlRGltZW5zaW9uM0QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
aWYgKGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgPiBtX2xpbWl0cy5tYXhUZXh0dXJlRGltZW5zaW9u
M0QpCisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNpemUuaGVpZ2h0ID4gbGltaXRzKCkubWF4VGV4
dHVyZURpbWVuc2lvbjNEKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlm
IChkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJzID4gbV9saW1pdHMubWF4VGV4dHVy
ZURpbWVuc2lvbjNEKQorICAgICAgICBpZiAoZGVzY3JpcHRvci5zaXplLmRlcHRoT3JBcnJheUxh
eWVycyA+IGxpbWl0cygpLm1heFRleHR1cmVEaW1lbnNpb24zRCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBpZiAoZGVzY3JpcHRvci5zYW1wbGVDb3VudCAhPSAxKQpAQCAt
MTk2MSw4ICsxOTYxLDEwIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE1UTFBpeGVsRm9ybWF0PiBz
dGVuY2lsT25seUFzcGVjdE1ldGFsRm9ybWF0KFdHUFVUZXh0dXJlRm9yCiAgICAgfQogfQogCi1z
dGF0aWMgTVRMU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUoYm9vbCBkZXZpY2VIYXNVbmlmaWVkTWVt
b3J5KQorc3RhdGljIE1UTFN0b3JhZ2VNb2RlIHN0b3JhZ2VNb2RlKGJvb2wgZGV2aWNlSGFzVW5p
ZmllZE1lbW9yeSwgYm9vbCBzdXBwb3J0c05vblByaXZhdGVEZXB0aFN0ZW5jaWxUZXh0dXJlcykK
IHsKKyAgICBpZiAoIXN1cHBvcnRzTm9uUHJpdmF0ZURlcHRoU3RlbmNpbFRleHR1cmVzKQorICAg
ICAgICByZXR1cm4gTVRMU3RvcmFnZU1vZGVQcml2YXRlOwogICAgIGlmIChkZXZpY2VIYXNVbmlm
aWVkTWVtb3J5KQogICAgICAgICByZXR1cm4gTVRMU3RvcmFnZU1vZGVTaGFyZWQ7CiAjaWYgUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKQEAgLTE5ODcsOSArMTk4OSwxMSBA
QCBSZWY8VGV4dHVyZT4gRGV2aWNlOjpjcmVhdGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKIAogICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9n
cHV3ZWIvI2RvbS1ncHVkZXZpY2UtY3JlYXRldGV4dHVyZQogCi0gICAgaWYgKGZlYXR1cmVSZXF1
aXJlbWVudEZvckZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkpIHsKLSAgICAgICAgLy8gRklYTUU6
ICJidXQgdGhpcy5bW2RldmljZV1dLltbZmVhdHVyZXNdXSBkb2VzIG5vdCBjb250YWluIHRoZSBm
ZWF0dXJlLCB0aHJvdyBhIFR5cGVFcnJvci4iCi0gICAgICAgIHJldHVybiBUZXh0dXJlOjpjcmVh
dGVJbnZhbGlkKCp0aGlzKTsKKyAgICBpZiAoYXV0byByZXF1aXJlbWVudCA9IGZlYXR1cmVSZXF1
aXJlbWVudEZvckZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkpIHsKKyAgICAgICAgaWYgKCFoYXNG
ZWF0dXJlKCpyZXF1aXJlbWVudCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiAidGhyb3cgYSBU
eXBlRXJyb3IuIgorICAgICAgICAgICAgcmV0dXJuIFRleHR1cmU6OmNyZWF0ZUludmFsaWQoKnRo
aXMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCF2YWxpZGF0ZUNyZWF0ZVRleHR1cmUo
ZGVzY3JpcHRvciwgdmlld0Zvcm1hdHMpKSB7CkBAIC0yMDQ3LDcgKzIwNTEsNyBAQCBSZWY8VGV4
dHVyZT4gRGV2aWNlOjpjcmVhdGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKIAogICAgIHRleHR1cmVEZXNjcmlwdG9yLnNhbXBsZUNvdW50ID0gZGVzY3Jp
cHRvci5zYW1wbGVDb3VudDsKIAotICAgIHRleHR1cmVEZXNjcmlwdG9yLnN0b3JhZ2VNb2RlID0g
c3RvcmFnZU1vZGUoaGFzVW5pZmllZE1lbW9yeSgpKTsKKyAgICB0ZXh0dXJlRGVzY3JpcHRvci5z
dG9yYWdlTW9kZSA9IHN0b3JhZ2VNb2RlKGhhc1VuaWZpZWRNZW1vcnkoKSwgYmFzZUNhcGFiaWxp
dGllcygpLnN1cHBvcnRzTm9uUHJpdmF0ZURlcHRoU3RlbmNpbFRleHR1cmVzKTsKIAogICAgIC8v
IEZJWE1FKFBFUkZPUk1BTkNFKTogQ29uc2lkZXIgd3JpdGUtY29tYmluaW5nIENQVSBjYWNoZSBt
b2RlLgogICAgIC8vIEZJWE1FKFBFUkZPUk1BTkNFKTogQ29uc2lkZXIgaW1wbGVtZW50aW5nIGhh
emFyZCB0cmFja2luZyBvdXJzZWxmLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>