<?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>165811</bug_id>
          
          <creation_ts>2016-12-13 11:35:08 -0800</creation_ts>
          <short_desc>REGRESSION(r209725): &quot;Broke ARMv7 builds&quot; (Requested by msaboff on #webkit).</short_desc>
          <delta_ts>2016-12-19 10:00:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>160355</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1259465</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 11:35:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/209725 broke the build:
&quot;Broke ARMv7 builds&quot; (Requested by msaboff on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259468</commentid>
    <comment_count>1</comment_count>
      <attachid>297029</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 11:35:58 -0800</bug_when>
    <thetext>Created attachment 297029
ROLLOUT of r209725

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259470</commentid>
    <comment_count>2</comment_count>
      <attachid>297029</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 11:38:50 -0800</bug_when>
    <thetext>Comment on attachment 297029
ROLLOUT of r209725

Clearing flags on attachment: 297029

Committed r209764: &lt;http://trac.webkit.org/changeset/209764&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259471</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 11:38:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297029</attachid>
            <date>2016-12-13 11:35:58 -0800</date>
            <delta_ts>2016-12-13 11:38:50 -0800</delta_ts>
            <desc>ROLLOUT of r209725</desc>
            <filename>bug-165811-20161213143508.patch</filename>
            <type>text/plain</type>
            <size>350095</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5NzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
OTkyOWEyYTBjODUzODBmYWI1NmZhMTA4M2Y2ZDI5ZmI3YjA5YjQwLi5lNDMxZGFiYzg2MGEyM2Jl
MWI2Nzg0NmZhYjI3MGU0YzA0M2Q4ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0xMi0xMyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwOTcyNS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTgxMQorCisgICAg
ICAgICJCcm9rZSBBUk12NyBidWlsZHMiIChSZXF1ZXN0ZWQgYnkgbXNhYm9mZiBvbiAjd2Via2l0
KS4KKworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIlJFR1JFU1NJT04o
cjIwOTY1Myk6IHNwZWVkb21ldGVyIGNyYXNoZXMgbWFraW5nIHZpcnR1YWwgc2xvdworICAgICAg
ICBwYXRoIHRhaWxjYWxscyIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTc0OAorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8yMDk3MjUKKwogMjAxNi0xMi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydCB0aGUgY29sbGVjdG9yUGVybWl0dGVkSWRsZVJh
dGlvIGJhY2sgdG8gMCBiZWNhdXNlIG9mIDEwME1CCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDljMmVlNTU2Y2JhNWNlZDdhNTE3
MTdmZWY0YmJmZDY1YjU1ODY0ZjQuLjVhMzRmYTExZWEwMTIyNDU0ZmIxMGFlMGVhM2EzYjg1Y2Yw
ZDY1YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMTItMTMgIENvbW1pdCBRdWV1ZSAgPGNv
bW1pdC1xdWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIyMDk3MjUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU4MTEKKworICAgICAgICAiQnJva2UgQVJNdjcgYnVpbGRzIiAoUmVxdWVzdGVkIGJ5IG1z
YWJvZmYgb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0OgorCisgICAg
ICAgICJSRUdSRVNTSU9OKHIyMDk2NTMpOiBzcGVlZG9tZXRlciBjcmFzaGVzIG1ha2luZyB2aXJ0
dWFsIHNsb3cKKyAgICAgICAgcGF0aCB0YWlsY2FsbHMiCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3NDgKKyAgICAgICAgaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvMjA5NzI1CisKIDIwMTYtMTItMTMgIEpGIEJhc3RpZW4gIDxqZmJh
c3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXVEZdIFR1cm4gdHJ5TWFrZVN0cmluZygpLCBt
YWtlU3RyaW5nKCkgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYzQ2MTY5M2NiZTQxZmNhMDAwNDNjZTlhZTYxMmE0NGYwNThmMzY3Ni4uNDQx
NDZiMTkzMzZmODdmMDUwMTllMzkwNTA4NjE0NzE3MjJiYTA5YiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTEzNTMsNyArMTM1Myw2IEBACiAJCTY1QzAyODUwMTcxNzk1RTIwMDM1
MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NUMwMjg0RjE3MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNh
c3NlbWJsZXIuY3BwICovOyB9OwogCQk2NUMwMjg1QzE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdE
T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1QzAyODVBMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwICovOyB9OwogCQk2
NUMwMjg1RDE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUMwMjg1QjE3MTc5NjY4MDAzNTFFMzUg
LyogQVJNdjdET3Bjb2RlLmggKi87IH07Ci0JCTY1REJGMzAyMUQ5MzM5MkIwMDNBRjRCMCAvKiBK
SVRFbnRyeVBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUwMzAwRjIxQzUwMjc0NjAwRDc4NkQ3IC8qIEpJVEVudHJ5UG9pbnRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjVGQjUxMTcxODRF
RUU3MDAwQzEyQjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkI1MTE2MTg0RUU5QkMwMEMxMkI3MCAvKiBQcm90
b0NhbGxGcmFtZS5jcHAgKi87IH07CiAJCTY1RkI2M0E0MUM4RUEwOUMwMDIwNzE5QiAvKiBZYXJy
Q2Fub25pY2FsaXplVW5pY29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUE5NDYxNDFDOEU5RjZGMDBBNzIwOUEgLyogWWFyckNhbm9uaWNhbGl6
ZVVuaWNvZGUuY3BwICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdn
ZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzcyNyw3
ICszNzI2LDYgQEAKIAkJNjJFM0Q1RUYxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YUZvcm1hdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyRUM5QkI0MUI3RUIwN0MwMDMwM0FEMSAvKiBD
YWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTYyRUM5QkI1MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NTAzMDBGMjFDNTAyNzQ2MDBENzg2RDcgLyog
SklURW50cnlQb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURW50
cnlQb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwN0QyOTcwRTg3MUU0
QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNUeXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTExMjJFNTE0
MDQ2OUJBMDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSB0ZXN0UmVnRXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0
YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RSZWdFeHA7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC01NTY2LDcgKzU1NjQsNiBAQAogCQkJCTBGQUY3
RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLywKIAkJCQlGRTE4N0Ew
QTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNwcCAqLywKIAkJCQlGRTE4N0Ew
QjFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmggKi8sCi0JCQkJNjUwMzAwRjIx
QzUwMjc0NjAwRDc4NkQ3IC8qIEpJVEVudHJ5UG9pbnRzLmggKi8sCiAJCQkJMEY0NjgwN0YxNEJB
NTcyNzAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuY3BwICovLAogCQkJCTBGNDY4MDgwMTRCQTU3
MjcwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmggKi8sCiAJCQkJMEZCMTRFMUMxODEyNEFDRTAw
OUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCAqLywKQEAgLTc3MjYsNyArNzcy
Myw2IEBACiAJCQkJNzlCMDBDQkQxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUzRDQ0NERDMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21B
ZGRyZXNzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5MERBNjdGMUM4RTMxNkEwMDI5NTE1
OSAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRp
b24ucHkgaW4gSGVhZGVycyAqLywKLQkJCQk2NURCRjMwMjFEOTMzOTJCMDAzQUY0QjAgLyogSklU
RW50cnlQb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCURDMTdFODE5MUM5QzkxREIwMDhBNkFC
MyAvKiBTaGFkb3dDaGlja2VuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMxN0U4MTgx
QzlDOTFEOTAwOEE2QUIzIC8qIFNoYWRvd0NoaWNrZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5
OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCmluZGV4
IGM0OTYzYjM3YTAyMGQ3MTc0OWQ5YjI0ZWIyNjdlMWQ1ZDg0ODZhZmQuLjU1YjM2NWZjMmE1N2M1
M2Y0NmRmNzY4YTAyZDE5YWY5Y2FmY2QyMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKQEAgLTU1LDEzICs1NSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CiAgICAgfQogCi0gICAgQXJndW1lbnRSZWdWYWx1ZShP
cmlnaW4gb3JpZ2luLCBSZWcgcmVnLCBUeXBlIHR5cGUpCi0gICAgICAgIDogVmFsdWUoQ2hlY2tl
ZE9wY29kZSwgQXJndW1lbnRSZWcsIHR5cGUsIG9yaWdpbikKLSAgICAgICAgLCBtX3JlZyhyZWcp
Ci0gICAgewotICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOwotICAgIH0KLQogICAgIFJlZyBt
X3JlZzsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAppbmRleCBm
OTlkYTViMGY1ZGU3NjJiMzFkYjBmNTUwMmYyYTQ1ZWM4ODhiOTZkLi5mNzIyNGNmMjdkYjE5NGQ3
Mjg4M2Q4ZTJiN2ZjMjhiNTEwZTZjODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
aWRhdGUuY3BwCkBAIC0xODIsMTIgKzE4Miw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2Ug
QXJndW1lbnRSZWc6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFz
RXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOwotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzE3
Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgSW50MzIgYXJndW1lbnRzIGFu
ZCBJbnQ2NCBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHNhbWUgcmVnaXN0
ZXIgZGlzdGluY3RseS4KLSAgICAgICAgICAgICAgICBWQUxJREFURSgodmFsdWUtPmFzPEFyZ3Vt
ZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkuaXNHUFIoKQotICAgICAgICAgICAgICAgICAg
ICA/ICh2YWx1ZS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCkgfHwgdmFsdWUtPnR5cGUoKSA9PSBJ
bnQzMikKLSAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZS0+dHlwZSgpID09IERvdWJsZSksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAg
ICAgICAgICh2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRSZWcoKS5pc0dQ
UigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgPT0gdmFs
dWUtPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQWRkOgogICAgICAgICAgICAgY2FzZSBTdWI6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDAzMGE5N2U4YzFm
ZjBmZWVkZTA0ZWQ0YTZlZjBkMGQxMTQ5OTVkNWMuLjdmZmRhMDVmNGNhY2UyZDFkMzljYjI4NGRh
NTg2MmJiZjczMjlhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCkBAIC02MCw3ICs2MCw2IEBAIENhbGxMaW5rSW5mbzo6Q2FsbExpbmtJ
bmZvKCkKICAgICAsIG1faGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgLCBtX2NsZWFyZWRCeUdD
KGZhbHNlKQogICAgICwgbV9hbGxvd1N0dWJzKHRydWUpCi0gICAgLCBtX2FyZ3VtZW50c0xvY2F0
aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihBcmd1bWVudHNMb2NhdGlvbjo6U3RhY2tBcmdzKSkK
ICAgICAsIG1faXNMaW5rZWQoZmFsc2UpCiAgICAgLCBtX2NhbGxUeXBlKE5vbmUpCiAgICAgLCBt
X2NhbGxlZUdQUigyNTUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgKaW5kZXggMGM5NjQxZDAwZWEzNjI5MzYzZGQwN2U4MGQ3YmVlYTg1ZTUzOGYzMi4u
MGE5MTAyMDEzODIwNjBiYWIxZTIyZmQxMDVlZjZmNzIzYjFkNzllMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAtMjgsNyArMjgsNiBAQAog
I2luY2x1ZGUgIkNhbGxNb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVk
ZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgotI2luY2x1ZGUgIkpJVEVudHJ5UG9pbnRzLmgi
CiAjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CkBAIC0xNTgs
MTIgKzE1Nyw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gbV9zdHVi
IHx8IG1fY2FsbGVlT3JDb2RlQmxvY2s7IH0KICAgICB2b2lkIHVubGluayhWTSYpOwogCi0gICAg
dm9pZCBzZXRVcENhbGwoQ2FsbFR5cGUgY2FsbFR5cGUsIEFyZ3VtZW50c0xvY2F0aW9uIGFyZ3Vt
ZW50c0xvY2F0aW9uLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGNhbGxlZUdQUikK
KyAgICB2b2lkIHNldFVwQ2FsbChDYWxsVHlwZSBjYWxsVHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCB1bnNpZ25lZCBjYWxsZWVHUFIpCiAgICAgewotICAgICAgICBBU1NFUlQoIWlzVmFyYXJn
c0NhbGxUeXBlKGNhbGxUeXBlKSB8fCAoYXJndW1lbnRzTG9jYXRpb24gPT0gU3RhY2tBcmdzKSk7
Ci0KICAgICAgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOwotICAgICAgICBtX2FyZ3VtZW50c0xv
Y2F0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3VtZW50c0xvY2F0aW9uKTsKICAgICAg
ICAgbV9jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxs
ZWVHUFI7CiAgICAgfQpAQCAtMjc5LDE2ICsyNzUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgQXJndW1l
bnRzTG9jYXRpb24gYXJndW1lbnRzTG9jYXRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEFyZ3VtZW50c0xvY2F0aW9uPihtX2FyZ3VtZW50c0xvY2F0aW9uKTsKLSAgICB9
Ci0KLSAgICBib29sIGFyZ3VtZW50c0luUmVnaXN0ZXJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2FyZ3VtZW50c0xvY2F0aW9uICE9IFN0YWNrQXJnczsKLSAgICB9Ci0KICAgICB1aW50MzJf
dCogYWRkcmVzc09mTWF4TnVtQXJndW1lbnRzKCkKICAgICB7CiAgICAgICAgIHJldHVybiAmbV9t
YXhOdW1Bcmd1bWVudHM7CkBAIC0zNTMsNyArMzM5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aGFzU2VlbkNsb3N1cmUgOiAxOwogICAgIGJvb2wgbV9jbGVhcmVkQnlHQyA6IDE7CiAgICAgYm9v
bCBtX2FsbG93U3R1YnMgOiAxOwotICAgIHVuc2lnbmVkIG1fYXJndW1lbnRzTG9jYXRpb24gOiA0
OwogICAgIGJvb2wgbV9pc0xpbmtlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7
IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgbV9jYWxsZWVHUFIgOiA4OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXgg
ZmI1MWE1ZmZkOWZmMDBlYjBmNTFiZmE2ZDkwNDA4ODRiM2EyYTViNC4uZTZjNzQyNzhlNTI1NjBi
Y2NlOWQ1MTViYThiMzY0OTgwZGFiZDk0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0xMDMyLDcgKzEwMzIsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0
YXRlKQogICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5kaXNhbGxvd1N0dWJz
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+
c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbCwgU3RhY2tBcmdz
LCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
Q2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7
CiAKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKIApAQCAtMTEwNSw3
ICsxMTA1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIC8vIFdlICphbHdheXMqIGtub3cgdGhhdCB0aGUg
Z2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4KICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZv
OjpyZWdUMSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAg
ICAgICAgICBzbG93UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAgICAgICAgIGlmICht
X3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVS
ZWdzKTsKQEAgLTExMzEsNyArMTEzMSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0SklUQ2FsbFRodW5r
RW50cnlTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmVudHJ5Rm9yKFN0YWNrQXJncykpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEN1c3RvbVZhbHVl
R2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlciB8fCBtX3R5cGUgPT0gQ3Vz
dG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAppbmRleCA3MGY1MjViZWI0YWFmOTQyZDNhNGNmYmY0M2U3NGU1MDY5NDI1ZDk3
Li4yNzkxYWVhODI1Yzk2NzNlNzQyMTI4Y2YyMTkyMmY3Y2IxY2I3NmNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCkBAIC0yNzEsMTcgKzI3MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KICAgICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxl
cygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6Ci0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7Ci0gICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSA9PSBGbHVzaGVkSlNW
YWx1ZSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKG1fZ3JhcGgsIHR5cGVGaWx0ZXJGb3Iobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZs
dXNoRm9ybWF0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgCiAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBG
b3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFu
ZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAzOTQ4MzVhZjdjNzExNmNhMDhkNmI4YWE2
MWNhYzdhYTU1YjViN2E5Li5kNDUyYjkyZmRiYTdiODNkZDI2N2JmMGRiNjBiNjc5OTdmZjRiODMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cApAQCAtMzY5Nyw1OSArMzY5NywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3Vt
ZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3Nl
ZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRC
bG9jayA9PSBtX2dyYXBoLmJsb2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzT25TdGFjay5yZXNpemUobV9udW1Bcmd1bWVudHMpOwotICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRzRm9yQ2hlY2tpbmcucmVzaXplKG1fbnVtQXJndW1lbnRz
KTsKLSAgICAgICAgLy8gQ3JlYXRlIGFsbCBHZXRBcmd1bWVudFJlZ2lzdGVyIG5vZGVzIGZpcnN0
IGFuZCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIE1vdkhpbnQgbm9kZXMsCi0gICAgICAgIC8vIGZv
bGxvd2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIFNldExvY2FsIG5vZGVzIGFuZCBmaW5hbGx5IGFu
eSBTZXRBcmd1bWVudCBub2RlcyBmb3IKLSAgICAgICAgLy8gdGhlIHJlbWFpbmluZyBhcmd1bWVu
dHMuCi0gICAgICAgIC8vIFdlIGRvIHRoaXMgdG8gbWFrZSB0aGUgZXhpdCBwcm9jZXNzaW5nIGNv
cnJlY3QuIFdlIHN0YXJ0IHdpdGggbV9leGl0T0sgPSB0cnVlIHNpbmNlCi0gICAgICAgIC8vIEdl
dEFyZ3VtZW50UmVnaXN0ZXIgbm9kZXMgY2FuIGV4aXQsIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3Qu
IFRoZSBNb3ZIaW50J3MgdGVjaG5pY2FsbHkgY291bGQKLSAgICAgICAgLy8gZXhpdCBidXQgd29u
J3QuIFRoZSBTZXRMb2NhbHMgY2FuIGV4aXQgYW5kIHRoZXJlZm9yZSB3ZSB3YW50IGFsbCB0aGUg
TW92SGludHMKLSAgICAgICAgLy8gYmVmb3JlIHRoZSBmaXJzdCBTZXRMb2NhbCBzbyB0aGF0IHRo
ZSByZWdpc3RlciBzdGF0ZSBpcyBjb25zaXN0ZW50LgotICAgICAgICAvLyBXZSBkbyBhbGwgdGhp
cyBwcm9jZXNzaW5nIGJlZm9yZSBjcmVhdGluZyBhbnkgU2V0QXJndW1lbnQgbm9kZXMgc2luY2Ug
dGhleSBhcmUKLSAgICAgICAgLy8gbW9yYWxseSBlcXVpdmFsZW50IHRvIHRoZSBTZXRMb2NhbHMg
Zm9yIEdldEFyZ3VtZW50UmVnaXN0ZXIgbm9kZXMuCisgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKKyAgICAgICAgLy8gV2Ugd2lsbCBlbWl0IFNldEFy
Z3VtZW50IG5vZGVzLiBUaGV5IGRvbid0IGV4aXQsIGJ1dCB3ZSdyZSBhdCB0aGUgdG9wIG9mIGFu
IG9wX2VudGVyIHNvCisgICAgICAgIC8vIGV4aXRPSyA9IHRydWUuCiAgICAgICAgIG1fZXhpdE9L
ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bVJlZ2lzdGVyQXJndW1lbnRz
ID0gc3RkOjptaW4obV9udW1Bcmd1bWVudHMsIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVO
VF9SRUdJU1RFUlMpOwotCi0gICAgICAgIFZlY3RvcjxOb2RlKiwgTlVNQkVSX09GX0pTX0ZVTkNU
SU9OX0FSR1VNRU5UX1JFR0lTVEVSUz4gZ2V0QXJndW1lbnRSZWdpc3Rlck5vZGVzOwotCi0gICAg
ICAgIC8vIEZpcnN0IGNyZWF0ZSBHZXRBcmd1bWVudFJlZ2lzdGVyIG5vZGVzLgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBudW1SZWdpc3RlckFyZ3VtZW50
czsgKythcmd1bWVudCkgewotICAgICAgICAgICAgZ2V0QXJndW1lbnRSZWdpc3Rlck5vZGVzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldEFyZ3VtZW50UmVnaXN0ZXIsIE9w
SW5mbygwKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFyZ3VtZW50UmVnaXN0ZXJJbmRl
eEZvckpTRnVuY3Rpb25Bcmd1bWVudChhcmd1bWVudCkpKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBDcmVhdGUgYWxsIHRoZSBNb3ZIaW50J3MgZm9yIHRoZSBHZXRBcmd1bWVudFJlZ2lzdGVy
IG5vZGVzIGNyZWF0ZWQgYWJvdmUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBn
ZXRBcmd1bWVudFJlZ2lzdGVyTm9kZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUq
IGdldEFyZ3VtZW50UmVnaXN0ZXIgPSBnZXRBcmd1bWVudFJlZ2lzdGVyTm9kZXNbaV07Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpKS5vZmZzZXQoKSksIGdldEFyZ3VtZW50UmVnaXN0ZXIpOwotICAgICAgICAgICAgLy8g
V2UgY2FuJ3QgZXhpdCBhbnltb3JlLgotICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEV4aXQgaXMgbm93IG9rYXksIGJ1dCB3ZSBuZWVkIHRvIGZl
bmNlIHdpdGggYW4gRXhpdE9LIG5vZGUuCi0gICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKLSAgICAg
ICAgYWRkVG9HcmFwaChFeGl0T0spOwotCi0gICAgICAgIC8vIENyZWF0ZSBhbGwgdGhlIFNldExv
Y2FscydzIGZvciB0aGUgR2V0QXJndW1lbnRSZWdpc3RlciBub2RlcyBjcmVhdGVkIGFib3ZlLgot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2V0QXJndW1lbnRSZWdpc3Rlck5vZGVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBnZXRBcmd1bWVudFJlZ2lzdGVyID0g
Z2V0QXJndW1lbnRSZWdpc3Rlck5vZGVzW2ldOwotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkpOwotICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5t
ZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCi0gICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFk
Q2FjaGUpKTsKLSAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVja0FycmF5
SG9pc3RpbmdGYWlsZWQoCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSW5kZXhpbmdUeXBlKSk7Ci0g
ICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBnZXRBcmd1bWVudFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkgPSBzZXRMb2NhbDsKLSAg
ICAgICAgICAgIGdldEFyZ3VtZW50UmVnaXN0ZXItPnNldFZhcmlhYmxlQWNjZXNzRGF0YShzZXRM
b2NhbC0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50c09uU3RhY2tbaV0gPSBzZXRMb2NhbDsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dHNGb3JDaGVja2luZ1tpXSA9IGdldEFyZ3VtZW50UmVnaXN0ZXI7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBGaW5hbGx5IGNyZWF0ZSBhbnkgU2V0QXJndW1lbnQgbm9kZXMuCi0gICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVH
SVNURVJTOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyAr
K2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nRmFpbGVkKApAQCAtMzc1OCw4ICszNzEwLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0QXJn
dW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNPblN0YWNrW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50
OwotICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5nW2FyZ3VtZW50XSA9
IHNldEFyZ3VtZW50OworICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBzZXRBcmd1bWVudDsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAg
fQogICAgIH0KQEAgLTQ4NjksMTAgKzQ4MjAsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCB3ZSBkb24ndCB1bmJveCBvdXIgYXJndW1lbnRzIGhlcmUgc2luY2UgdGhhdCB3b24n
dCBiZQogICAgICAgICAgICAgLy8gZG9uZSBieSB0aGUgYXJndW1lbnRzIG9iamVjdCBjcmVhdGlv
biBub2RlIGFzIHRoYXQgbm9kZSBtYXkgbm90IGV4aXN0LgogICAgICAgICAgICAgbm90aWNlQXJn
dW1lbnRzVXNlKCk7Ci0gICAgICAgICAgICBUZXJtaW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRs
ZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgVGFpbENhbGxGb3J3YXJkVmFyYXJncywg
Q2FsbE1vZGU6OlRhaWwpOwotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBpbnNlcnQgZmx1c2gg
bm9kZXMgZm9yIG91ciBhcmd1bWVudHMgYWZ0ZXIgdGhlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MK
LSAgICAgICAgICAgIC8vIG5vZGUgc28gdGhhdCB0aGV5IHdpbGwgYmUgZmx1c2hlZCB0byB0aGUg
c3RhY2sgYW5kIGtlcHQgYWxpdmUuCiAgICAgICAgICAgICBmbHVzaEZvclJldHVybigpOworICAg
ICAgICAgICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVWYXJhcmdzQ2FsbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MsIENhbGxNb2RlOjpUYWlsKTsK
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0g
Y3VycmVudEluc3RydWN0aW9uLCAiaGFuZGxlVmFyYXJnc0NhbGwsIHdoaWNoIG1heSBoYXZlIGlu
bGluZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlvbiIpOwogICAgICAg
ICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgdGVybWluYWwgdGhlbiB3ZSBzaG91bGQgbm90IHBhcnNl
IGFueSBmdXJ0aGVyIGJ5dGVjb2RlcyBhcyB0aGUgVGFpbENhbGwgd2lsbCBleGl0IHRoZSBmdW5j
dGlvbi4KICAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIG5vdCB0ZXJtaW5hbCwgaG93ZXZl
ciwgdGhlbiB3ZSB3YW50IHRoZSBzdWJzZXF1ZW50IG9wX3JldC9vcF9qdW1wIHRvIHVwZGF0ZSBt
ZXRhZGF0YSBhbmQgY2xlYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQzNmRhNjMwMzdmODcyNTkxMWM4NWMxMmM2
MjUzMDc3NmUyODk4MDQuLjY3YjM1NzQzODJhYWQ3MDIxZjNjYTc2ODVmYTNhNDljZGY0ZTNmZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcApAQCAtMjk5LDE2ICsyOTksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8v
IFRoZSBydWxlcyBmb3IgdGhyZWFkZWQgQ1BTIGZvcm06CiAgICAgICAgICAgICAvLyAKICAgICAg
ICAgICAgIC8vIEhlYWQgdmFyaWFibGU6IGRlc2NyaWJlcyB3aGF0IGlzIGxpdmUgYXQgdGhlIGhl
YWQgb2YgdGhlIGJhc2ljIGJsb2NrLgotICAgICAgICAgICAgLy8gSGVhZCB2YXJpYWJsZSBsaW5r
cyBtYXkgcmVmZXIgdG8gRmx1c2gsIFBoYW50b21Mb2NhbCwgUGhpLCBHZXRBcmd1bWVudFJlZ2lz
dGVyCi0gICAgICAgICAgICAvLyBvciBTZXRBcmd1bWVudC4KLSAgICAgICAgICAgIC8vIEdldEFy
Z3VtZW50UmVnaXN0ZXIgYW5kIFNldEFyZ3VtZW50IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9v
dCBibG9jay4KKyAgICAgICAgICAgIC8vIEhlYWQgdmFyaWFibGUgbGlua3MgbWF5IHJlZmVyIHRv
IEZsdXNoLCBQaGFudG9tTG9jYWwsIFBoaSwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAv
LyBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIgaW4gdGhlIHJvb3QgYmxvY2suCiAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgLy8gVGFpbCB2YXJpYWJsZTogdGhlIGxhc3QgdGhpbmcgdGhh
dCBoYXBwZW5lZCB0byB0aGUgdmFyaWFibGUgaW4gdGhlIGJsb2NrLgotICAgICAgICAgICAgLy8g
SXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWwsIFNldExvY2FsLCBHZXRB
cmd1bWVudFJlZ2lzdGVyLAotICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQsIG9yIFBoaS4gR2V0
QXJndW1lbnRSZWdpc3RlciBhbmQgU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFyCi0gICAgICAg
ICAgICAvLyBpbiB0aGUgcm9vdCBibG9jay4gTm90ZSB0aGF0IGlmIHRoZXJlIGV2ZXIgd2FzIGEg
R2V0TG9jYWwgdG8gdGhlIHZhcmlhYmxlLAotICAgICAgICAgICAgLy8gYW5kIGl0IHdhcyBmb2xs
b3dlZCBieSBQaGFudG9tTG9jYWxzIGFuZCBGbHVzaGVzIGJ1dCBub3QgU2V0TG9jYWxzLCB0aGVu
Ci0gICAgICAgICAgICAvLyB0aGUgdGFpbCB2YXJpYWJsZSB3aWxsIGJlIHRoZSBHZXRMb2NhbC4K
KyAgICAgICAgICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExvY2Fs
LCBTZXRMb2NhbCwgU2V0QXJndW1lbnQsIG9yIFBoaS4KKyAgICAgICAgICAgIC8vIFNldEFyZ3Vt
ZW50IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4gTm90ZSB0aGF0IGlmIHRoZXJl
IGV2ZXIKKyAgICAgICAgICAgIC8vIHdhcyBhIEdldExvY2FsIHRvIHRoZSB2YXJpYWJsZSwgYW5k
IGl0IHdhcyBmb2xsb3dlZCBieSBQaGFudG9tTG9jYWxzIGFuZAorICAgICAgICAgICAgLy8gRmx1
c2hlcyBidXQgbm90IFNldExvY2FscywgdGhlbiB0aGUgdGFpbCB2YXJpYWJsZSB3aWxsIGJlIHRo
ZSBHZXRMb2NhbC4KICAgICAgICAgICAgIC8vIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCB5
b3Ugb25seSBjYXJlIHRoYXQgdGhlIHRhaWwgdmFyaWFibGUgaXMgYQogICAgICAgICAgICAgLy8g
Rmx1c2ggb3IgUGhhbnRvbUxvY2FsIGlmIG5vdGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5l
ZC4gTGlrZXdpc2UsIGlmCiAgICAgICAgICAgICAvLyB0aGVyZSBldmVyIHdhcyBhIFNldExvY2Fs
IGFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgRmx1c2hlcywgdGhlbiB0aGUgdGFpbApAQCAtMzY5LDEz
ICszNjcsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHNwZWNpYWxDYXNlQXJndW1lbnRz
KCkKICAgICB7Ci0gICAgICAgIC8vIE5vcm1hbGx5LCBhIFNldEFyZ3VtZW50IG9yIFNldExvY2Fs
IGRlbm90ZXMgdGhlIHN0YXJ0IG9mIGEgbGl2ZSByYW5nZSBmb3IKLSAgICAgICAgLy8gYSBsb2Nh
bCdzIHZhbHVlIG9uIHRoZSBzdGFjay4gQnV0IHRob3NlIFNldEFyZ3VtZW50cyBhbmQgU2V0TG9j
YWxzIHVzZWQKLSAgICAgICAgLy8gZm9yIHRoZSBhY3R1YWwgYXJndW1lbnRzIHRvIHRoZSBtYWNo
aW5lIENvZGVCbG9jayBnZXQgc3BlY2lhbC1jYXNlZC4gV2UgY291bGQgaGF2ZQotICAgICAgICAv
LyBpbnN0ZWFkIHVzZWQgdHdvIGRpZmZlcmVudCBub2RlIHR5cGVzIC0gb25lIGZvciB0aGUgYXJn
dW1lbnRzIGF0IHRoZSBwcm9sb2d1ZSBjYXNlLAotICAgICAgICAvLyBhbmQgYW5vdGhlciBmb3Ig
dGhlIG90aGVyIHVzZXMuIEJ1dCB0aGlzIHNlZW1lZCBsaWtlIElSIG92ZXJraWxsLgotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fYXJndW1lbnRzT25TdGFjay5zaXplKCk7IGkt
LTspCi0gICAgICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoaSwgbV9ncmFwaC5tX2FyZ3VtZW50c09uU3RhY2tbaV0pOworICAgICAg
ICAvLyBOb3JtYWxseSwgYSBTZXRBcmd1bWVudCBkZW5vdGVzIHRoZSBzdGFydCBvZiBhIGxpdmUg
cmFuZ2UgZm9yIGEgbG9jYWwncyB2YWx1ZSBvbiB0aGUgc3RhY2suCisgICAgICAgIC8vIEJ1dCB0
aG9zZSBTZXRBcmd1bWVudHMgdXNlZCBmb3IgdGhlIGFjdHVhbCBhcmd1bWVudHMgdG8gdGhlIG1h
Y2hpbmUgQ29kZUJsb2NrIGdldAorICAgICAgICAvLyBzcGVjaWFsLWNhc2VkLiBXZSBjb3VsZCBo
YXZlIGluc3RlYWQgdXNlZCB0d28gZGlmZmVyZW50IG5vZGUgdHlwZXMgLSBvbmUgZm9yIHRoZSBh
cmd1bWVudHMKKyAgICAgICAgLy8gYXQgdGhlIHByb2xvZ3VlIGNhc2UsIGFuZCBhbm90aGVyIGZv
ciB0aGUgb3RoZXIgdXNlcy4gQnV0IHRoaXMgc2VlbWVkIGxpa2UgSVIgb3ZlcmtpbGwuCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9hcmd1bWVudHMuc2l6ZSgpOyBpLS07KQor
ICAgICAgICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50
Rmlyc3RUaW1lKGksIG1fZ3JhcGgubV9hcmd1bWVudHNbaV0pOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTQ4Myw3ICs0ODAsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKLSAgICAgICAgICAgIGNh
c2UgR2V0QXJndW1lbnRSZWdpc3RlcjoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgRmx1c2g6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDBlYjYxOWQ1YTZjNmY5NTdhMTJmN2MzNGJhYTE1MDcx
M2I0Mjg0NGMuLjBjZWQ1MjJlMTk0YTUxYWMwZDIyNjU3OTNkZjcxZTRhMWU0MDZlMjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC00MDYsNyArNDA2LDYg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFBoYW50
b21Mb2NhbDoKICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgIGNhc2UgR2V0QXJndW1lbnRSZWdp
c3RlcjoKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6
CkBAIC00NzEsNyArNDcwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFBo
YW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIC8vIERGRyBiYWNrZW5kIHJlcXVpcmVzIHRo
YXQgdGhlIGxvY2FscyB0aGF0IHRoaXMgcmVhZHMgYXJlIGZsdXNoZWQuIEZUTCBiYWNrZW5kIGNh
biBoYW5kbGUgdGhvc2UKICAgICAgICAgLy8gbG9jYWxzIGJlaW5nIHByb21vdGVkLgotICAgICAg
ICBpZiAoIWlzRlRMKGdyYXBoLm1fcGxhbi5tb2RlKSAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgaWYgKCFpc0ZUTChncmFwaC5tX3BsYW4ubW9kZSkp
CiAgICAgICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAgICAgIC8vIEV2ZW4gdGhv
dWdoIGl0J3MgcGhhbnRvbSwgaXQgc3RpbGwgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG9uZSBjYW4n
dCBiZSByZXBsYWNlZCB3aXRoIGFub3RoZXIuCkBAIC01NjAsMTggKzU1OSwxMSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgVGFpbENhbGw6CiAgICAgY2FzZSBEaXJlY3RUYWls
Q2FsbDoKICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICAgICAgcmVhZChXb3JsZCk7Ci0g
ICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICAvLyBXZSByZWFkIGFsbCBhcmd1
bWVudHMgYWZ0ZXIgInRoaXMiLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZyA9IDE7IGFyZyA8
IGdyYXBoLm1fYXJndW1lbnRzT25TdGFjay5zaXplKCk7IGFyZysrKQotICAgICAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoU3RhY2ssIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZykpKTsK
ICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAg
IHJldHVybjsKLQorICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjoKICAgICAgICAgcmVhZChH
ZXR0ZXJTZXR0ZXJfZ2V0dGVyKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHZXR0ZXJMb2Ms
IEdldHRlclNldHRlcl9nZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKaW5kZXggMTY5NzdmMDI5NTk4ZWNlM2E5
NTJlMTQzNWY3NTFiYzdiNzNlODUxNC4uNDEwNGViMzI0NzgwNWY3MWJkY2UzMmFkMTJhMTgyMzQy
NzE3MGExMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCkBAIC0xNTIsOCAr
MTUyLDYgQEAgZW51bSBTdHJ1Y3R1cmVSZWdpc3RyYXRpb25SZXN1bHQgeyBTdHJ1Y3R1cmVSZWdp
c3RlcmVkTm9ybWFsbHksIFN0cnVjdHVyZVJlZ2lzdGUKIAogZW51bSBPcHRpbWl6YXRpb25GaXhw
b2ludFN0YXRlIHsgQmVmb3JlRml4cG9pbnQsIEZpeHBvaW50Tm90Q29udmVyZ2VkLCBGaXhwb2lu
dENvbnZlcmdlZCB9OwogCi1lbnVtIFN0cmVuZ3RoUmVkdWNlQXJndW1lbnRGbHVzaGVzIHsgRG9u
dE9wdGltaXplQXJndW1lbnRGbHVzaGVzLCBPcHRpbWl6ZUFyZ3VtZW50Rmx1c2hlcyB9OwotCiAv
LyBEZXNjcmliZXMgdGhlIGZvcm0geW91IGNhbiBleHBlY3QgdGhlIGVudGlyZSBncmFwaCB0byBi
ZSBpbi4KIGVudW0gR3JhcGhGb3JtIHsKICAgICAvLyBMb2FkU3RvcmUgZm9ybSBtZWFucyB0aGF0
IGJhc2ljIGJsb2NrcyBtYXkgZnJlZWx5IHVzZSBHZXRMb2NhbCwgU2V0TG9jYWwsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCmluZGV4IGFiZjJjOTgwN2VmNzgxYWJm
NzkzNTFhNjYxMGI2ZjNhN2M3OWVmZDYuLmE3MGE4Njk4ZDQ5ZTMxYzllNjMyYTlmNjc2MTY3MDk0
OWM2OWY2MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCkBA
IC01Myw4ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKQogICAgICAgICAgICAgZml4dXBCbG9jayhibG9j
ayk7CiAgICAgICAgIAotICAgICAgICBjbGVhblZhcmlhYmxlcyhtX2dyYXBoLm1fYXJndW1lbnRz
T25TdGFjayk7Ci0gICAgICAgIGNsZWFuVmFyaWFibGVzKG1fZ3JhcGgubV9hcmd1bWVudHNGb3JD
aGVja2luZyk7CisgICAgICAgIGNsZWFuVmFyaWFibGVzKG1fZ3JhcGgubV9hcmd1bWVudHMpOwog
CiAgICAgICAgIC8vIEp1c3QgZG8gYSBiYXNpYyBQaGFudG9tL0NoZWNrIGNsZWFuLXVwLgogICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRl
eCBmZjA4YWVmNzcxMWNmOGQ2M2ExYTFkZjEwYTRhMzI5NjYwOGIzMjE4Li5lNzFmMmIzZWM4NTcy
MzQwYzFlOGJhOWY0Mzk4YWI4MmYyNDNjNmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCkBAIC0yNjEsNyArMjYxLDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBHZXRGcm9tQXJndW1l
bnRzOgogICAgIGNhc2UgUHV0VG9Bcmd1bWVudHM6Ci0gICAgY2FzZSBHZXRBcmd1bWVudFJlZ2lz
dGVyOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgY2FzZSBMb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWU6CiAgICAgY2FzZSBMb2dTaGFkb3dDaGlja2VuVGFpbDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAppbmRleCBhZmRhYjEwZmI5ZmYwZjI4N2VlMzlmZTU5Mjk0OTg2
MzM1MDU1OWEzLi4xNGNkMGQwMTQyZGIyYjhiM2E4MjRiZmM0NmY4Y2Q5MGJlMTU1NjA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw5ICs5MCw4IEBAIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBtYWtlIHN1cmUgdGhh
dCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0
aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcik7Ci0gICAgdm0uZ2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpOwotICAgIHZtLmdldEpJVENhbGxUaHVua0VudHJ5U3R1YihsaW5rRGlyZWN0Q2FsbFRo
dW5rR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5r
R2VuZXJhdG9yKTsKICAgICAKICAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkpCiAgICAgICAgIHZt
LnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIlByZXBh
cmluZyBmb3IgREZHIGNvbXBpbGF0aW9uLiIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDljYjY4ZTk0ZTZhMDU5Nzg0NmI1YTM3NmIxNzFiZDUx
YzIwZTBhYzUuLmNhNTYyYjRlOTZhMTdjZDlkMzU4MGVlZDc2MDAwYTUzZGIxYWQ1YzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMTc5MSw3ICsx
NzkxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKICAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIGNhc2UgR2V0
QXJndW1lbnRSZWdpc3RlcjoKICAgICAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpczoKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgogICAgICAgICBjYXNlIEdldEFyZ3Vt
ZW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9u
SW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCmlu
ZGV4IDVlZmVjODQyNTQ0MmNiZDYzMmQ0ZDZjODFiNmI0ZmYwZmM5MThhZTIuLmU5ZGY4NDEwNjg1
MjU4YzY0OTM3YWY0ZTZlMzZlNWUwMDc3NmRlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKQEAgLTEwNCwxOSArMTA0LDYgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQoZm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaW5pdEdQUihu
b2RlLCB1c2VDb3VudCwgZ3ByLCBmb3JtYXQpOwogICAgIH0KLQotICAgIHZvaWQgaW5pdEFyZ3Vt
ZW50UmVnaXN0ZXJWYWx1ZShOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdw
ciwgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9ICBEYXRhRm9ybWF0SlMpCi0gICAgewotICAg
ICAgICBtX25vZGUgPSBub2RlOwotICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7Ci0gICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSByZWdpc3RlckZvcm1hdDsKLSAgICAgICAgbV9zcGlsbEZv
cm1hdCA9IERhdGFGb3JtYXROb25lOwotICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKLSAgICAg
ICAgdS5ncHIgPSBncHI7Ci0gICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwotICAgICAgICBt
X2lzQ29uc3RhbnQgPSBmYWxzZTsKLSAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwotICAgIH0K
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdm9pZCBpbml0SlNWYWx1ZShOb2RlKiBub2Rl
LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIERh
dGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYzQ1MzEzZmNiOWIxY2U5N2M1OGFlYjY1NTg5NTgxMTU5
NzUwYTJiYi4uZjlmOGU0YzQ5NzVlMDlmOTc0MjhjYzY1NGUxNzNlZjJkMDIwMTEzOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTI5NCw2ICsyOTQsNyBAQCB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSog
bm9kZSwgRHVtcENvbnRleHQqCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRh
LnZhcmlhbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNv
bnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4dCkpOwogICAgIH0KKyAgICBBU1NFUlQobm9k
ZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSA9PSBub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0
aGlzKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50cnlH
ZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YSkg
ewpAQCAtMzcyLDggKzM3Myw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBub2RlLCBEdW1wQ29udGV4dCoKICAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KGRhdGEtPmNhc2VzW2ldLnZhbHVlLCBjb250ZXh0
KSwgIjoiLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJkZWZhdWx0OiIsIGRhdGEtPmZhbGxUaHJvdWdoKTsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmhh
c0FyZ3VtZW50UmVnaXN0ZXJJbmRleCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUt
PmFyZ3VtZW50UmVnaXN0ZXJJbmRleCgpLCAiKCIsIEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3Rl
cihub2RlLT5hcmd1bWVudFJlZ2lzdGVySW5kZXgoKSksICIpIik7CiAgICAgQ2xvYmJlclNldCBy
ZWFkczsKICAgICBDbG9iYmVyU2V0IHdyaXRlczsKICAgICBhZGRSZWFkc0FuZFdyaXRlcygqdGhp
cywgbm9kZSwgcmVhZHMsIHdyaXRlcyk7CkBAIC0zOTcsNyArMzk2LDcgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIG5vZGUsIER1
bXBDb250ZXh0KgogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXYXNIb2lzdGVkIik7CiAgICAg
b3V0LnByaW50KCIpIik7CiAKLSAgICBpZiAoKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpIHx8
IG5vZGUtPm9wKCkgPT0gR2V0QXJndW1lbnRSZWdpc3RlcikgJiYgbm9kZS0+dHJ5R2V0VmFyaWFi
bGVBY2Nlc3NEYXRhKCkpCisgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpICYmIG5v
ZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICBvdXQucHJpbnQoIiAgcHJl
ZGljdGluZyAiLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3Rpb24oKSkpOwogICAgIGVsc2UgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9u
KCkpCiAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChu
b2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSk7CkBAIC01MDcsMTAgKzUwNiw4IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpCiAgICAgb3V0
LnByaW50KCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIs
IG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIjsg
UmVmIGNvdW50IHN0YXRlOiAiLCBtX3JlZkNvdW50U3RhdGUsICJcbiIpOwogICAgIGlmIChtX2Zv
cm0gPT0gU1NBKQogICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnQgZm9ybWF0czogIiwgbGlz
dER1bXAobV9hcmd1bWVudEZvcm1hdHMpLCAiXG4iKTsKLSAgICBlbHNlIHsKLSAgICAgICAgb3V0
LnByaW50KCIgIEFyZ3VtZW50cyBmb3IgY2hlY2tpbmc6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRz
Rm9yQ2hlY2tpbmcpLCAiXG4iKTsKLSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50cyBvbiBz
dGFjazogIiwgbGlzdER1bXAobV9hcmd1bWVudHNPblN0YWNrKSwgIlxuIik7Ci0gICAgfQorICAg
IGVsc2UKKyAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50czogIiwgbGlzdER1bXAobV9hcmd1
bWVudHMpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgCiAgICAgTm9kZSogbGFz
dE5vZGUgPSBudWxscHRyOwpAQCAtMTYyMywxMyArMTYyMCwxMyBAQCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUq
IGN1cnJlbgogICAgICAgICBpZiAoIWN1cnJlbnROb2RlIHx8IG5vZGUtPm9yaWdpbiAhPSBjdXJy
ZW50Tm9kZS0+b3JpZ2luKSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogCi0gICAgICAg
ICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykgfHwgbm9kZS0+b3AoKSA9PSBHZXRB
cmd1bWVudFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygq
dGhpcykpIHsKICAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IFsmXSAoKSAt
PiBWYWx1ZVByb2ZpbGUqIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5sb2NhbCgp
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1l
bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9hcmd1bWVu
dHNPblN0YWNrW2FyZ3VtZW50XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudE5v
ZGUgfHwgIWFyZ3VtZW50Tm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpCisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudE5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpICE9IGFyZ3VtZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAppbmRleCAwMGI1YWU3ZDZmOTgxZDk2YThlMDNkZjBhYTZhMDg0NWI4NzA1MjFm
Li5kMzA0N2YzNGMyZDg3MGJiMTk1MDU3NjE5ZmM1OWNiNmUwNDdiM2YyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04NTksNyArODU5LDcgQEAgcHVibGljOgogICAgIGJv
b2wgd2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUoQ29kZU9yaWdpbiwgQ29kZU9yaWdp
biYgb3BDYXRjaE9yaWdpbk91dCwgSGFuZGxlckluZm8qJiBjYXRjaEhhbmRsZXJPdXQpOwogICAg
IAogICAgIGJvb2wgbmVlZHNTY29wZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWJ1
Z2dlckVuYWJsZWQgfHwgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCk7IH0KLSAgICBib29sIG5lZWRz
Rmx1c2hlZFRoaXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0RlYnVnZ2VyRW5hYmxlZCB8fCBtX2Nv
ZGVCbG9jay0+dXNlc0V2YWwoKTsgfQorICAgIGJvb2wgbmVlZHNGbHVzaGVkVGhpcygpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT51c2VzRXZhbCgpOyB9CiAKICAgICBWTSYgbV92bTsKICAg
ICBQbGFuJiBtX3BsYW47CkBAIC04NzgsOSArODc4LDkgQEAgcHVibGljOgogICAgIAogICAgIEJh
ZzxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICAKLSAgICAvLyBJ
biBDUFMsIHRoaXMgaXMgYWxsIG9mIHRoZSBHZXRBcmd1bWVudFJlZ2lzdGVyIGFuZCBTZXRBcmd1
bWVudCBub2RlcyBmb3IgdGhlIGFyZ3VtZW50cyBpbgotICAgIC8vIHRoZSBtYWNoaW5lIGNvZGUg
YmxvY2sgdGhhdCBzdXJ2aXZlZCBEQ0UuIEFsbCBvZiB0aGVtIGV4Y2VwdCBtYXliZSAidGhpcyIg
d2lsbCBzdXJ2aXZlIERDRSwKLSAgICAvLyBiZWNhdXNlIG9mIHRoZSBGbHVzaCBub2Rlcy4KKyAg
ICAvLyBJbiBDUFMsIHRoaXMgaXMgYWxsIG9mIHRoZSBTZXRBcmd1bWVudCBub2RlcyBmb3IgdGhl
IGFyZ3VtZW50cyBpbiB0aGUgbWFjaGluZSBjb2RlIGJsb2NrCisgICAgLy8gdGhhdCBzdXJ2aXZl
ZCBEQ0UuIEFsbCBvZiB0aGVtIGV4Y2VwdCBtYXliZSAidGhpcyIgd2lsbCBzdXJ2aXZlIERDRSwg
YmVjYXVzZSBvZiB0aGUgRmx1c2gKKyAgICAvLyBub2Rlcy4KICAgICAvLwogICAgIC8vIEluIFNT
QSwgdGhpcyBpcyBhbGwgb2YgdGhlIEdldFN0YWNrIG5vZGVzIGZvciB0aGUgYXJndW1lbnRzIGlu
IHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sgdGhhdAogICAgIC8vIG1heSBoYXZlIHNvbWUgc3BlY3Vs
YXRpb24gaW4gdGhlIHByb2xvZ3VlIGFuZCBzdXJ2aXZlZCBEQ0UuIE5vdGUgdGhhdCB0byBnZXQg
dGhlIHNwZWN1bGF0aW9uCkBAIC05MDMsOCArOTAzLDcgQEAgcHVibGljOgogICAgIC8vCiAgICAg
Ly8gSWYgd2UgRENFIHRoZSBBcml0aEFkZCBhbmQgd2UgcmVtb3ZlIHRoZSBpbnQgY2hlY2sgb24g
eCwgdGhlbiB0aGlzIHdvbid0IGRvIHRoZSBzaWRlCiAgICAgLy8gZWZmZWN0cy4KLSAgICBWZWN0
b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzT25TdGFjazsKLSAgICBWZWN0b3I8Tm9kZSosIDg+IG1f
YXJndW1lbnRzRm9yQ2hlY2tpbmc7CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsK
ICAgICAKICAgICAvLyBJbiBDUFMsIHRoaXMgaXMgbWVhbmluZ2xlc3MuIEluIFNTQSwgdGhpcyBp
cyB0aGUgYXJndW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3ZSd2ZSBsb2NrZWQgaW4uCiAgICAgVmVj
dG9yPEZsdXNoRm9ybWF0PiBtX2FyZ3VtZW50Rm9ybWF0czsKQEAgLTk1NSw3ICs5NTQsNiBAQCBw
dWJsaWM6CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKICAgICBVbmlmaWNhdGlvblN0YXRlIG1fdW5p
ZmljYXRpb25TdGF0ZTsKICAgICBQbGFuU3RhZ2UgbV9wbGFuU3RhZ2UgeyBQbGFuU3RhZ2U6Oklu
aXRpYWwgfTsKLSAgICBTdHJlbmd0aFJlZHVjZUFyZ3VtZW50Rmx1c2hlcyBtX3N0cmVuZ3RoUmVk
dWNlQXJndW1lbnRzID0geyBTdHJlbmd0aFJlZHVjZUFyZ3VtZW50Rmx1c2hlczo6RG9udE9wdGlt
aXplQXJndW1lbnRGbHVzaGVzIH07CiAgICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7
CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsKICAgICBib29sIG1faGFzRXhjZXB0aW9u
SGFuZGxlcnMgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAppbmRleCA4MDQ0Yjc4MTIwMTFkNDI0ZDI5ZmIz
NjU2OWUzOGY2NzU0NTZkMzYwLi4xZDIwZDFkNGNhNTAyNzJiYzY2YWQ0NDRhYWZhOTYwODAyMTMz
MWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcApAQCAtMTA2LDExICsxMDYsMTEgQEAgdm9pZCBJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
CiAgICAgICAgICAgICBmb3JtYXQgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRz
T25TdGFja1tpXTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRz
W2ldOwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgIGZvcm1hdCA9IEZs
dXNoZWRKU1ZhbHVlOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgfHwgbm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwogICAgICAg
ICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1h
dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDU3M2MwM2MzNDI3YWYwZGM3MjE0ZjhmYWRhOWRj
MWY4ZTEwM2IyZDYuLjBhYzZhZmY5OGEzMmVhMGU3NDhhNTM4NDBiM2ViYmVjY2IyMjIwMjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC05OSw2
ICs5OSwxOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgIH0KIH0KIAor
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKK3sKKyAgICAvLyBUaGlzIGNvZGUgY3Vy
cmVudGx5IG1hdGNoZXMgdGhlIG9sZCBKSVQuIEluIHRoZSBmdW5jdGlvbiBoZWFkZXIgd2UgbmVl
ZCB0bworICAgIC8vIHNhdmUgcmV0dXJuIGFkZHJlc3MgYW5kIGNhbGwgZnJhbWUgdmlhIHRoZSBw
cm9sb2d1ZSBhbmQgcGVyZm9ybSBhIGZhc3Qgc3RhY2sgY2hlY2suCisgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5MgorICAgIC8vIFdlJ2xs
IG5lZWQgdG8gY29udmVydCB0aGUgcmVtYWluaW5nIGN0aV8gc3R5bGUgY2FsbHMgKHNwZWNpZmlj
YWxseSB0aGUgc3RhY2sKKyAgICAvLyBjaGVjaykgd2hpY2ggd2lsbCBiZSBkZXBlbmRlbnQgb24g
c3RhY2sgbGF5b3V0LiAoV2UnZCBuZWVkIHRvIGFjY291bnQgZm9yIHRoaXMgaW4KKyAgICAvLyBi
b3RoIG5vcm1hbCByZXR1cm4gY29kZSBhbmQgd2hlbiBqdW1waW5nIHRvIGFuIGV4Y2VwdGlvbiBo
YW5kbGVyKS4KKyAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwog
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZVNldHVwUmVnaXN0ZXJzRm9yRW50cnkoKQogewogICAg
IGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKQEAgLTI2NSw3ICsyNzcsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICBKU0NhbGxSZWNvcmQmIHJl
Y29yZCA9IG1fanNDYWxsc1tpXTsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29y
ZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLnNsb3dDYWxsLCBGdW5jdGlv
blB0cihtX3ZtLT5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuZW50cnlGb3IoaW5mby5hcmd1bWVudHNMb2NhdGlvbigpKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIEZ1bmN0aW9uUHRy
KG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3Jk
LnNsb3dDYWxsKSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YocmVjb3JkLnRhcmdldFRvQ2hlY2spKSwKQEAgLTI3NSw4ICsyODcsNiBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgZm9yIChKU0Rp
cmVjdENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RDYWxscykgewogICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhy
ZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0aCkpOwotICAg
ICAgICBpZiAocmVjb3JkLmhhc1Nsb3dDYWxsKCkpCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsocmVjb3JkLnNsb3dDYWxsLCBGdW5jdGlvblB0cihtX3ZtLT5nZXRKSVRDYWxsVGh1bmtFbnRy
eVN0dWIobGlua0RpcmVjdENhbGxUaHVua0dlbmVyYXRvcikuZW50cnlGb3IoaW5mby5hcmd1bWVu
dHNMb2NhdGlvbigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGluZm8uc2V0Q2Fs
bExvY2F0aW9ucygKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKCksCiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnNsb3dQYXRoKSwKQEAgLTM0NCwxNCArMzU0
LDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogCiB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKIHsKLSAgICBMYWJlbCBtYWluRW50cnkodGhpcyk7
Ci0KICAgICBzZXRTdGFydE9mQ29kZSgpOwotICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0K
LSAgICBMYWJlbCBlbnRyeVBvaW50KHRoaXMpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKLQorICAgIGNvbXBpbGVF
bnRyeSgpOwogICAgIG1fc3BlY3VsYXRpdmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNwZWN1bGF0aXZl
SklUPigqdGhpcyk7CiAKICAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFj
ZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCkBAIC0zNzgsMjAgKzM4Miw2IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmNvbXBpbGUoKQogCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CiAKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJH
VU1FTlRfUkVHSVNURVJTCi0gICAgbV9zdGFja0FyZ3NBcml0eU9LRW50cnkgPSBsYWJlbCgpOwot
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0KLSAgICAvLyBMb2FkIGFyZ3VtZW50IHZhbHVl
cyBpbnRvIGFyZ3VtZW50IHJlZ2lzdGVycwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpLCBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkpOwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBhcmd1bWVudFJlZ2lz
dGVyRm9yQXJndW1lbnRDb3VudCgpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4
ID0gMDsgYXJnSW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkgJiYgYXJnSW5kZXggPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRf
UkVHSVNURVJTOyBhcmdJbmRleCsrKQotICAgICAgICBsb2FkNjQoQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ0luZGV4
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBhcmd1bWVudFJlZ2lzdGVy
Rm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCkpOwotICAgIAotICAgIGp1bXAoZW50cnlQb2lu
dCk7Ci0jZW5kaWYKLQogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgogICAgIG1fc3Bl
Y3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cik7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9y
aW5nV2F0Y2hwb2ludHMoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9y
aWdpbigpKTsKQEAgLTQxNiw4NyArNDA2LDI0IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUo
KQogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwog
CiAgICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIpOwotCi0gICAgSklURW50cnlQb2ludHMgZW50
cnlwb2ludHM7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwot
ICAgIGVudHJ5cG9pbnRzLnNldEVudHJ5Rm9yKFJlZ2lzdGVyQXJnc0FyaXR5Q2hlY2tOb3RSZXF1
aXJlZCwgbGlua0J1ZmZlci0+bG9jYXRpb25PZihtYWluRW50cnkpKTsKLSAgICBlbnRyeXBvaW50
cy5zZXRFbnRyeUZvcihTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQsIGxpbmtCdWZmZXIt
PmxvY2F0aW9uT2YobV9zdGFja0FyZ3NBcml0eU9LRW50cnkpKTsKLSNlbHNlCi0gICAgZW50cnlw
b2ludHMuc2V0RW50cnlGb3IoU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkLCBsaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKG1haW5FbnRyeSkpOwotI2VuZGlmCi0KKyAgICAKICAgICBtX2dyYXBo
Lm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oCi0gICAg
ICAgIG1fZ3JhcGgubV9wbGFuLCBXVEZNb3ZlKG1faml0Q29kZSksIFdURk1vdmUobGlua0J1ZmZl
ciksIGVudHJ5cG9pbnRzKTsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4sIFdURk1vdmUobV9qaXRD
b2RlKSwgV1RGTW92ZShsaW5rQnVmZmVyKSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbigpCiB7CiAgICAgc2V0U3RhcnRPZkNvZGUoKTsKLQotI2lmIE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwot
ICAgIEdQUlJlZyBhcmdDb3VudFJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50
KCk7Ci0gICAgSnVtcExpc3QgY29udGludWVSZWdpc3RlckVudHJ5OwotICAgIExhYmVsIHJlZ2lz
dGVyQXJndW1lbnRzRW50cnlwb2ludHNbTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JF
R0lTVEVSUyArIDFdOwotCi0gICAgaWYgKG51bVBhcmFtZXRlcnMgPCBOVU1CRVJfT0ZfSlNfRlVO
Q1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKSB7Ci0gICAgICAgIC8vIFNwaWxsIGFueSBleHRyYSBy
ZWdpc3RlciBhcmd1bWVudHMgcGFzc2VkIHRvIGZ1bmN0aW9uIG9udG8gdGhlIHN0YWNrLgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGV4dHJhUmVnaXN0ZXJBcmd1bWVudEluZGV4ID0gTlVNQkVSX09G
X0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyAtIDE7Ci0gICAgICAgICAgICBleHRyYVJl
Z2lzdGVyQXJndW1lbnRJbmRleCA+PSBudW1QYXJhbWV0ZXJzOyBleHRyYVJlZ2lzdGVyQXJndW1l
bnRJbmRleC0tKSB7Ci0gICAgICAgICAgICByZWdpc3RlckFyZ3VtZW50c0VudHJ5cG9pbnRzW2V4
dHJhUmVnaXN0ZXJBcmd1bWVudEluZGV4ICsgMV0gPSBsYWJlbCgpOwotICAgICAgICAgICAgZW1p
dFB1dEFyZ3VtZW50VG9DYWxsRnJhbWVCZWZvcmVQcm9sb2d1ZShhcmd1bWVudFJlZ2lzdGVyRm9y
RnVuY3Rpb25Bcmd1bWVudChleHRyYVJlZ2lzdGVyQXJndW1lbnRJbmRleCksIGV4dHJhUmVnaXN0
ZXJBcmd1bWVudEluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpbmNyZW1lbnRDb3VudGVy
KHRoaXMsIFZNOjpSZWdBcmdzRXh0cmEpOwotCi0gICAgY29udGludWVSZWdpc3RlckVudHJ5LmFw
cGVuZChqdW1wKCkpOwotCi0gICAgbV9yZWdpc3RlckFyZ3NXaXRoQXJpdHlDaGVjayA9IGxhYmVs
KCk7Ci0gICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6UmVnQXJnc0FyaXR5KTsKLQotICAg
IExhYmVsIHJlZ2lzdGVyQXJnc0NoZWNrQXJpdHkodGhpcyk7Ci0KLSAgICBKdW1wIHJlZ2lzdGVy
Q2hlY2tBcml0eTsKLQotICAgIGlmIChudW1QYXJhbWV0ZXJzIDwgTlVNQkVSX09GX0pTX0ZVTkNU
SU9OX0FSR1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgcmVnaXN0ZXJDaGVja0FyaXR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIGFyZ0NvdW50UmVnLCBUcnVzdGVkSW1tMzIobnVtUGFyYW1ldGVycykp
OwotICAgIGVsc2UgewotICAgICAgICByZWdpc3RlckNoZWNrQXJpdHkgPSBicmFuY2gzMihCZWxv
dywgYXJnQ291bnRSZWcsIFRydXN0ZWRJbW0zMihudW1QYXJhbWV0ZXJzKSk7Ci0gICAgICAgIG1f
cmVnaXN0ZXJBcmdzV2l0aFBvc3NpYmxlRXh0cmFBcmdzID0gbGFiZWwoKTsKLSAgICB9Ci0gICAg
Ci0gICAgTGFiZWwgcmVnaXN0ZXJFbnRyeU5vQXJpdHkodGhpcyk7Ci0KLSAgICBpZiAobnVtUGFy
YW1ldGVycyA8PSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKQotICAg
ICAgICByZWdpc3RlckFyZ3VtZW50c0VudHJ5cG9pbnRzW251bVBhcmFtZXRlcnNdID0gcmVnaXN0
ZXJFbnRyeU5vQXJpdHk7Ci0KLSAgICBpbmNyZW1lbnRDb3VudGVyKHRoaXMsIFZNOjpSZWdBcmdz
Tm9Bcml0eSk7Ci0KLSAgICBjb250aW51ZVJlZ2lzdGVyRW50cnkubGluayh0aGlzKTsKLSNlbmRp
ZiAvLyBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0KLSAgICBMYWJl
bCBtYWluRW50cnkodGhpcyk7Ci0KLSAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGNv
bXBpbGVFbnRyeSgpOwogCiAgICAgLy8gPT09IEZ1bmN0aW9uIGhlYWRlciBjb2RlIGdlbmVyYXRp
b24gPT09CiAgICAgLy8gVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgd2l0aG91dCBwZXJm
b3JtaW5nIGFuIGFyaXR5IGNoZWNrLgogICAgIC8vIElmIHdlIG5lZWRlZCB0byBwZXJmb3JtIGFu
IGFyaXR5IGNoZWNrIHdlIHdpbGwgYWxyZWFkeSBoYXZlIG1vdmVkIHRoZSByZXR1cm4gYWRkcmVz
cywKICAgICAvLyBzbyBlbnRlciBhZnRlciB0aGlzLgogICAgIExhYmVsIGZyb21Bcml0eUNoZWNr
KHRoaXMpOwotCi0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwot
ICAgIHN0b3JlUHRyKGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSwgYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKTsKLSAgICBzdG9yZTMyKGFyZ0NvdW50UmVnLCBwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKLQotICAgIExhYmVsIGZyb21TdGFja0Vu
dHJ5KHRoaXMpOwotI2VuZGlmCi0gICAgCi0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1f
Y29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotCiAgICAgLy8gUGxhbnQgYSBj
aGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9ncmFwaC5y
ZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCkgLSAxKS5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgSnVtcCBzdGFja092ZXJmbG93ID0gYnJhbmNoUHRyKEFib3ZlLCBB
YnNvbHV0ZUFkZHJlc3MobV92bS0+YWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCkg
LSAxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6cmVnVDEpOworICAgIEp1bXAgc3RhY2tPdmVyZmxvdyA9IGJyYW5jaFB0
cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkp
LCBHUFJJbmZvOjpyZWdUMSk7CiAKICAgICAvLyBNb3ZlIHRoZSBzdGFjayBwb2ludGVyIGRvd24g
dG8gYWNjb21tb2RhdGUgbG9jYWxzCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC01MjUsMTA1ICs0NTIsMjggQEAg
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBtX3NwZWN1bGF0aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29k
ZUJsb2NrKTsKLQotICAgIEp1bXBMaXN0IGFyaXR5T0s7CiAgICAgCi0jaWYgTlVNQkVSX09GX0pT
X0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIGp1bXAocmVnaXN0ZXJBcmdzQ2hlY2tB
cml0eSk7Ci0KLSAgICBKdW1wTGlzdCByZWdpc3RlckFyaXR5TmVlZHNGaXh1cDsKLSAgICBpZiAo
bnVtUGFyYW1ldGVycyA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMp
IHsKLSAgICAgICAgcmVnaXN0ZXJDaGVja0FyaXR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHJlZ2lz
dGVyQXJpdHlOZWVkc0ZpeHVwLmFwcGVuZChicmFuY2gzMihCZWxvdywgYXJnQ291bnRSZWcsIFRy
dXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkpOwotCi0gICAgICAgIC8v
IFdlIGhhdmUgZXh0cmEgcmVnaXN0ZXIgYXJndW1lbnRzLgotCi0gICAgICAgIC8vIFRoZSBmYXN0
IGVudHJ5IHBvaW50IGludG8gYSBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IHRoZSBjb3Jy
ZWN0IG51bWJlciBvZiBhcmd1bWVudHMKLSAgICAgICAgLy8gaGF2ZSBiZWVuIHBhc3NlZCB0byB0
aGUgY2FsbCAod2Ugb25seSB1c2UgdGhlIGZhc3QgZW50cnkgcG9pbnQgd2hlcmUgd2UgY2FuIHN0
YXRpY2FsbHkKLSAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmd1
bWVudHMgaGF2ZSBiZWVuIHBhc3NlZCwgb3IgaGF2ZSBhbHJlYWR5IGNoZWNrZWQpLgotICAgICAg
ICAvLyBJbiBjYXNlcyB3aGVyZSBhbiBhcml0eSBjaGVjayBpcyBuZWNlc3NhcnksIHdlIGVudGVy
IGhlcmUuCi0gICAgICAgIG1fcmVnaXN0ZXJBcmdzV2l0aFBvc3NpYmxlRXh0cmFBcmdzID0gbGFi
ZWwoKTsKLQotICAgICAgICBpbmNyZW1lbnRDb3VudGVyKHRoaXMsIFZNOjpSZWdBcmdzRXh0cmEp
OwotCi0gICAgICAgIC8vIFNwaWxsIGV4dHJhIGFyZ3MgcGFzc2VkIHRvIGZ1bmN0aW9uCi0gICAg
ICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7IGFyZ0luZGV4IDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJnSW5kZXgrKykgewotICAgICAgICAgICAgYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgYXJnQ291bnRSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoYXJnSW5kZXgpKS5saW5rVG8obWFpbkVudHJ5LCB0aGlzKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRBcmd1bWVudFRvQ2FsbEZyYW1lQmVmb3JlUHJvbG9ndWUoYXJndW1lbnRS
ZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpLCBhcmdJbmRleCk7Ci0gICAgICAg
IH0KLSAgICAgICAganVtcChtYWluRW50cnkpOwotICAgIH0KLQotICAgIC8vIEZhbGwgdGhyb3Vn
aAotICAgIGlmIChudW1QYXJhbWV0ZXJzID4gMCkgewotICAgICAgICAvLyBUaGVyZSBzaG91bGQg
YWx3YXlzIGJlIGEgInRoaXMiIHBhcmFtZXRlci4KLSAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJB
cmd1bWVudEZpeHVwQ291bnQgPSBzdGQ6Om1pbihudW1QYXJhbWV0ZXJzIC0gMSwgTlVNQkVSX09G
X0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyk7Ci0gICAgICAgIExhYmVsIHJlZ2lzdGVy
QXJndW1lbnRzTmVlZEFyaXR5Rml4dXAgPSBsYWJlbCgpOwotCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgYXJnSW5kZXggPSAxOyBhcmdJbmRleCA8PSByZWdpc3RlckFyZ3VtZW50Rml4dXBDb3VudDsg
YXJnSW5kZXgrKykKLSAgICAgICAgICAgIHJlZ2lzdGVyQXJndW1lbnRzRW50cnlwb2ludHNbYXJn
SW5kZXhdID0gcmVnaXN0ZXJBcmd1bWVudHNOZWVkQXJpdHlGaXh1cDsKLSAgICB9Ci0KLSAgICBp
bmNyZW1lbnRDb3VudGVyKHRoaXMsIFZNOjpSZWdBcmdzQXJpdHkpOwotCi0gICAgcmVnaXN0ZXJB
cml0eU5lZWRzRml4dXAubGluayh0aGlzKTsKLQotICAgIGlmIChudW1QYXJhbWV0ZXJzID49IE5V
TUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpCi0gICAgICAgIHJlZ2lzdGVy
Q2hlY2tBcml0eS5saW5rKHRoaXMpOwotCi0gICAgc3BpbGxBcmd1bWVudFJlZ2lzdGVyc1RvRnJh
bWVCZWZvcmVQcm9sb2d1ZSgpOwotCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQotICAgIEp1bXAg
Y29udGludWVUb1N0YWNrQXJpdHlGaXh1cCA9IGp1bXAoKTsKLSNlbmRpZgotI2VuZGlmIC8vIE5V
TUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLQotICAgIG1fc3RhY2tBcmdz
V2l0aEFyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06
OlN0YWNrQXJnc0FyaXR5KTsKLQotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICBjb250aW51
ZVRvU3RhY2tBcml0eUZpeHVwLmxpbmsodGhpcyk7Ci0jZW5kaWYKLQotICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKCk7CisgICAgLy8gVGhlIGZhc3QgZW50cnkgcG9pbnQgaW50byBhIGZ1bmN0aW9u
IGRvZXMgbm90IGNoZWNrIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKKyAgICAvLyBo
YXZlIGJlZW4gcGFzc2VkIHRvIHRoZSBjYWxsICh3ZSBvbmx5IHVzZSB0aGUgZmFzdCBlbnRyeSBw
b2ludCB3aGVyZSB3ZSBjYW4gc3RhdGljYWxseQorICAgIC8vIGRldGVybWluZSB0aGUgY29ycmVj
dCBudW1iZXIgb2YgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXNzZWQsIG9yIGhhdmUgYWxyZWFkeSBj
aGVja2VkKS4KKyAgICAvLyBJbiBjYXNlcyB3aGVyZSBhbiBhcml0eSBjaGVjayBpcyBuZWNlc3Nh
cnksIHdlIGVudGVyIGhlcmUuCisgICAgLy8gRklYTUU6IGNoYW5nZSB0aGlzIGZyb20gYSBjdGkg
Y2FsbCB0byBhIERGRyBzdHlsZSBvcGVyYXRpb24gKG5vcm1hbCBDIGNhbGxpbmcgY29udmVudGlv
bnMpLgorICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7CisgICAgY29tcGlsZUVudHJ5KCk7CiAK
ICAgICBsb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBhcml0
eU9LLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJlZ1QxLCBUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpKTsKLQotICAgIGluY3JlbWVudENv
dW50ZXIodGhpcywgVk06OkFyaXR5Rml4dXBSZXF1aXJlZCk7Ci0KKyAgICBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIEdQUkluZm86OnJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7CiAgICAgZW1pdFN0b3Jl
Q29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIG1fc3BlY3VsYXRpdmUt
PmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVCbG9j
ay0+bV9pc0NvbnN0cnVjdG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJh
dGlvbkNhbGxBcml0eUNoZWNrLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGFyaXR5
T0suYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwot
CisgICAgYnJhbmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKS5saW5rVG8o
ZnJvbUFyaXR5Q2hlY2ssIHRoaXMpOwogICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdp
bigwKSk7CiAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICBtX2NhbGxBcml0eUZpeHVwID0gY2FsbCgpOwotCi0jaWYgTlVNQkVSX09G
X0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIEp1bXAgdG9GaWxsUmVnaXN0ZXJz
ID0ganVtcCgpOwotCi0gICAgbV9zdGFja0FyZ3NBcml0eU9LRW50cnkgPSBsYWJlbCgpOwotCi0g
ICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6U3RhY2tBcmdzTm9Bcml0eSk7Ci0gICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKLQotICAgIGFyaXR5T0subGluayh0aGlzKTsKLSAgICB0b0Zp
bGxSZWdpc3RlcnMubGluayh0aGlzKTsKLQotICAgIC8vIExvYWQgYXJndW1lbnQgdmFsdWVzIGlu
dG8gYXJndW1lbnQgcmVnaXN0ZXJzCi0gICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFy
Z0luZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpICYmIGFyZ0luZGV4IDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVS
UzsgYXJnSW5kZXgrKykKLSAgICAgICAgbG9hZDY0KEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmdJbmRleCkgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0
aW9uQXJndW1lbnQoYXJnSW5kZXgpKTsKLQotICAgIGp1bXAoZnJvbVN0YWNrRW50cnkpOwotI2Vs
c2UKLSAgICBhcml0eU9LLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7CiAgICAganVtcChm
cm9tQXJpdHlDaGVjayk7Ci0jZW5kaWYKICAgICAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGgg
Y29kZS4KICAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRvcnMobV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIpOwpAQCAtNjUyLDM1ICs1MDIsMTAgQEAgdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7
CiAKLSAgICBKSVRFbnRyeVBvaW50cyBlbnRyeXBvaW50czsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVO
Q1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBtYWluRW50cnlDb2RlUHRyID0gbGlua0J1ZmZlci0+bG9jYXRp
b25PZihyZWdpc3RlckVudHJ5Tm9Bcml0eSk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBtYWluRW50cnlDb2RlUHRyID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZihtYWluRW50cnkp
OwotI2VuZGlmCi0gICAgZW50cnlwb2ludHMuc2V0RW50cnlGb3IoUmVnaXN0ZXJBcmdzQXJpdHlD
aGVja05vdFJlcXVpcmVkLCBtYWluRW50cnlDb2RlUHRyKTsKLSAgICBlbnRyeXBvaW50cy5zZXRF
bnRyeUZvcihSZWdpc3RlckFyZ3NQb3NzaWJsZUV4dHJhQXJncywgbGlua0J1ZmZlci0+bG9jYXRp
b25PZihtX3JlZ2lzdGVyQXJnc1dpdGhQb3NzaWJsZUV4dHJhQXJncykpOwotICAgIGVudHJ5cG9p
bnRzLnNldEVudHJ5Rm9yKFJlZ2lzdGVyQXJnc011c3RDaGVja0FyaXR5LCBsaW5rQnVmZmVyLT5s
b2NhdGlvbk9mKG1fcmVnaXN0ZXJBcmdzV2l0aEFyaXR5Q2hlY2spKTsKLQotICAgIGZvciAodW5z
aWduZWQgYXJnQ291bnQgPSAxOyBhcmdDb3VudCA8PSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJH
VU1FTlRfUkVHSVNURVJTOyBhcmdDb3VudCsrKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBlbnRyeTsKLSAgICAgICAgaWYgKGFyZ0NvdW50ID09IG51bVBhcmFtZXRlcnMpCi0gICAg
ICAgICAgICBlbnRyeSA9IG1haW5FbnRyeUNvZGVQdHI7Ci0gICAgICAgIGVsc2UgaWYgKHJlZ2lz
dGVyQXJndW1lbnRzRW50cnlwb2ludHNbYXJnQ291bnRdLmlzU2V0KCkpCi0gICAgICAgICAgICBl
bnRyeSA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YocmVnaXN0ZXJBcmd1bWVudHNFbnRyeXBvaW50
c1thcmdDb3VudF0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbnRyeSA9IGxpbmtCdWZm
ZXItPmxvY2F0aW9uT2YobV9yZWdpc3RlckFyZ3NXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGVu
dHJ5cG9pbnRzLnNldEVudHJ5Rm9yKEpJVEVudHJ5UG9pbnRzOjpyZWdpc3RlckVudHJ5VHlwZUZv
ckFyZ3VtZW50Q291bnQoYXJnQ291bnQpLCBlbnRyeSk7Ci0gICAgfQotICAgIGVudHJ5cG9pbnRz
LnNldEVudHJ5Rm9yKFN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgbGlua0J1ZmZlci0+
bG9jYXRpb25PZihtX3N0YWNrQXJnc0FyaXR5T0tFbnRyeSkpOwotI2Vsc2UKLSAgICBlbnRyeXBv
aW50cy5zZXRFbnRyeUZvcihTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQsIGxpbmtCdWZm
ZXItPmxvY2F0aW9uT2YobWFpbkVudHJ5KSk7Ci0jZW5kaWYKLSAgICBlbnRyeXBvaW50cy5zZXRF
bnRyeUZvcihTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSwgbGlua0J1ZmZlci0+bG9jYXRpb25PZiht
X3N0YWNrQXJnc1dpdGhBcml0eUNoZWNrKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdp
dGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOwogCiAg
ICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxKSVRGaW5hbGl6
ZXI+KAotICAgICAgICBtX2dyYXBoLm1fcGxhbiwgV1RGTW92ZShtX2ppdENvZGUpLCBXVEZNb3Zl
KGxpbmtCdWZmZXIpLCBlbnRyeXBvaW50cyk7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLCBXVEZN
b3ZlKG1faml0Q29kZSksIFdURk1vdmUobGlua0J1ZmZlciksIHdpdGhBcml0eUNoZWNrKTsKIH0K
IAogdm9pZCBKSVRDb21waWxlcjo6ZGlzYXNzZW1ibGUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCBmMDJjYTE0
N2NlMDkxZmY0MzhiOGJiODBiMzQ1NzUxN2MyMTMwYmM3Li40ZjhlODE3MjU4N2EwMjU0MGY0NmE2
M2YyZmQxZjY5ZGZhZGRiZDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCkBAIC0yMTcsMTEgKzIxNyw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qc0RpcmVj
dENhbGxzLmFwcGVuZChKU0RpcmVjdENhbGxSZWNvcmQoY2FsbCwgc2xvd1BhdGgsIGluZm8pKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRKU0RpcmVjdENhbGwoQ2FsbCBjYWxsLCBDYWxsIHNs
b3dDYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAgIHsKLSAgICAg
ICAgbV9qc0RpcmVjdENhbGxzLmFwcGVuZChKU0RpcmVjdENhbGxSZWNvcmQoY2FsbCwgc2xvd0Nh
bGwsIHNsb3dQYXRoLCBpbmZvKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgYWRkSlNEaXJlY3RU
YWlsQ2FsbChQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAsIENhbGwgY2FsbCwgTGFiZWwgc2xv
d1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKICAgICB7CiAgICAgICAgIG1fanNEaXJlY3RUYWls
Q2FsbHMuYXBwZW5kKEpTRGlyZWN0VGFpbENhbGxSZWNvcmQocGF0Y2hhYmxlSnVtcCwgY2FsbCwg
c2xvd1BhdGgsIGluZm8pKTsKQEAgLTI3Miw2ICsyNjcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyOwogICAgIAogICAgIC8vIEludGVybmFsIGlt
cGxlbWVudGF0aW9uIHRvIGNvbXBpbGUuCisgICAgdm9pZCBjb21waWxlRW50cnkoKTsKICAgICB2
b2lkIGNvbXBpbGVTZXR1cFJlZ2lzdGVyc0ZvckVudHJ5KCk7CiAgICAgdm9pZCBjb21waWxlRW50
cnlFeGVjdXRpb25GbGFnKCk7CiAgICAgdm9pZCBjb21waWxlQm9keSgpOwpAQCAtMzIyLDE4ICsz
MTgsNyBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IEpTRGlyZWN0Q2FsbFJlY29yZChDYWxsIGNhbGwsIENhbGwgc2xvd0NhbGwsIExhYmVsIHNsb3dQ
YXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAgICA6IGNhbGwoY2FsbCkKLSAgICAg
ICAgICAgICwgc2xvd0NhbGwoc2xvd0NhbGwpCi0gICAgICAgICAgICAsIHNsb3dQYXRoKHNsb3dQ
YXRoKQotICAgICAgICAgICAgLCBpbmZvKGluZm8pCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgaGFzU2xvd0NhbGwoKSB7IHJldHVybiBzbG93Q2FsbC5tX2xhYmVsLmlzU2V0
KCk7IH0KLQogICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIENhbGwgc2xvd0NhbGw7CiAgICAg
ICAgIExhYmVsIHNsb3dQYXRoOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87CiAgICAgfTsK
QEAgLTM3MCwxMiArMzU1LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8RXhjZXB0aW9uSGFuZGxp
bmdPU1JFeGl0SW5mbz4gbV9leGNlcHRpb25IYW5kbGVyT1NSRXhpdENhbGxTaXRlczsKICAgICAK
ICAgICBDYWxsIG1fY2FsbEFyaXR5Rml4dXA7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FS
R1VNRU5UX1JFR0lTVEVSUwotICAgIExhYmVsIG1fcmVnaXN0ZXJBcmdzV2l0aFBvc3NpYmxlRXh0
cmFBcmdzOwotICAgIExhYmVsIG1fcmVnaXN0ZXJBcmdzV2l0aEFyaXR5Q2hlY2s7Ci0gICAgTGFi
ZWwgbV9zdGFja0FyZ3NBcml0eU9LRW50cnk7Ci0jZW5kaWYKLSAgICBMYWJlbCBtX3N0YWNrQXJn
c1dpdGhBcml0eUNoZWNrOworICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3VsYXRpdmU7CiAgICAgUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAppbmRleCBkYWI0MzMyMzhjMjhlMzFj
NTk5ZTk2YTUyYjdkYTk5YjczNDMwYmQ4Li41MzkxMTU4YzVlYjViMDU1ODIzMzMyN2Y3NTY3NTk1
Nzc2N2Y3ZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZp
bmFsaXplci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwCkBAIC0zNywxMiArMzcsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCi1KSVRGaW5hbGl6ZXI6OkpJVEZpbmFsaXplcihQbGFuJiBwbGFuLCBQYXNzUmVmUHRy
PEpJVENvZGU+IGppdENvZGUsCi0gICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGxpbmtC
dWZmZXIsIEpJVEVudHJ5UG9pbnRzJiBlbnRyeXBvaW50cykKK0pJVEZpbmFsaXplcjo6SklURmlu
YWxpemVyKFBsYW4mIHBsYW4sIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSwgc3RkOjp1bmlx
dWVfcHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRo
QXJpdHlDaGVjaykKICAgICA6IEZpbmFsaXplcihwbGFuKQogICAgICwgbV9qaXRDb2RlKGppdENv
ZGUpCiAgICAgLCBtX2xpbmtCdWZmZXIoV1RGTW92ZShsaW5rQnVmZmVyKSkKLSAgICAsIG1fZW50
cnlwb2ludHMoZW50cnlwb2ludHMpCisgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNo
ZWNrKQogewogfQogCkBAIC01Nyw4ICs1Niw5IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVT
aXplKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsICgi
REZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Bs
YW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkpKTsKLSAgICBtX2ppdENvZGUt
PmluaXRpYWxpemVFbnRyeVBvaW50cyhKSVRFbnRyeVBvaW50c1dpdGhSZWYoY29kZVJlZiwgbV9l
bnRyeXBvaW50cykpOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCisgICAgICAg
IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsICgiREZHIEpJVCBjb2RlIGZvciAlcyIs
IHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2Rl
OjpERkdKSVQpKS5kYXRhKCkpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwog
ICAgIAogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlKTsKICAgICAK
QEAgLTY5LDExICs2OSwxMCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogCiBib29s
IEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
IW1fZW50cnlwb2ludHMuZW50cnlGb3IoU3RhY2tBcmdzTXVzdENoZWNrQXJpdHkpLmlzRW1wdHlW
YWx1ZSgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0RG
R19DT0RFKCptX2xpbmtCdWZmZXIsICgiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5k
YXRhKCkpKTsKLQotICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUVudHJ5UG9pbnRzKEpJVEVudHJ5
UG9pbnRzV2l0aFJlZihjb2RlUmVmLCBtX2VudHJ5cG9pbnRzKSk7Ci0KKyAgICBSRUxFQVNFX0FT
U0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7CisgICAgbV9qaXRDb2RlLT5p
bml0aWFsaXplQ29kZVJlZigKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZl
ciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpLAorICAgICAgICBt
X3dpdGhBcml0eUNoZWNrKTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0
Q29kZSk7CiAgICAgCiAgICAgZmluYWxpemVDb21tb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCmluZGV4IDhlNDZhMGMwOTJmOGRkNDc2ZDkwMGYyZTA4
YjRiNGZmODRkNzNkYjMuLjFiMjFmOGM4NWMwOWJjYTg5MjBiY2E0MGY5NTkwOWJhODIzYjc5ZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaApAQCAtMzYs
NyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVEZp
bmFsaXplciA6IHB1YmxpYyBGaW5hbGl6ZXIgewogcHVibGljOgotICAgIEpJVEZpbmFsaXplcihQ
bGFuJiwgUGFzc1JlZlB0cjxKSVRDb2RlPiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+LCBK
SVRFbnRyeVBvaW50cyYpOworICAgIEpJVEZpbmFsaXplcihQbGFuJiwgUGFzc1JlZlB0cjxKSVRD
b2RlPiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
d2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpFbXB0eVZhbHVlKSk7CiAgICAgdmlydHVhbCB+SklURmluYWxpemVyKCk7CiAgICAgCiAg
ICAgc2l6ZV90IGNvZGVTaXplKCkgb3ZlcnJpZGU7CkBAIC00OCw3ICs0OCw3IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TGlua0J1ZmZlcj4gbV9saW5rQnVmZmVyOwotICAgIEpJVEVudHJ5UG9pbnRzIG1fZW50cnlw
b2ludHM7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fd2l0aEFyaXR5Q2hlY2s7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlLmNwcAppbmRleCA5NjY3NzFmOWVmODA5NGVjN2I5MzNhZjJlOWEyODMxZWY1MjIzOTg1Li5k
YjM2OTk5N2ZmNjE4OWFkYjc5N2ZhNjAyNmU4NmM0YzYyZmI2ODk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgp
OyBpKyspIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgICAgIGJvb2wgaXNQcmltb3JkaWFsU2V0QXJndW1lbnQgPSBub2RlLT5vcCgpID09
IFNldEFyZ3VtZW50ICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpICYmIG5vZGUgPT0gbV9n
cmFwaC5tX2FyZ3VtZW50c09uU3RhY2tbbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCldOworICAg
ICAgICAgICAgICAgIGJvb2wgaXNQcmltb3JkaWFsU2V0QXJndW1lbnQgPSBub2RlLT5vcCgpID09
IFNldEFyZ3VtZW50ICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpICYmIG5vZGUgPT0gbV9n
cmFwaC5tX2FyZ3VtZW50c1tub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKV07CiAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUpCiAgICAgICAgICAgICAgICAgICAgIHNlZW5JbmxpbmVDYWxsRnJhbWVzLmFkZChpbmxpbmVD
YWxsRnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcAppbmRleCA1YjdmOTlmN2M4MmE3M2YwZmQ1
NjVmNzE5ZTZlNzBjNjBiNGU0ZWNmLi4zZTA0YjBjOGQ1YjE1MTM2MWQyYTY3NTU1MGZjYzkyMzdk
YmI0MmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heGltYWxG
bHVzaEluc2VydGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcApAQCAtNjcsOCArNjcsOCBAQCBwdWJsaWM6
CiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgICAgIGlmICgobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8fCBub2Rl
LT5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgICAgICAgICAmJiAoIW5vZGUtPmxvY2Fs
KCkuaXNBcmd1bWVudCgpIHx8IG5vZGUgIT0gbV9ncmFwaC5tX2FyZ3VtZW50c09uU3RhY2tbbm9k
ZS0+bG9jYWwoKS50b0FyZ3VtZW50KCldKSkgeworICAgICAgICAgICAgICAgIGJvb2wgaXNQcmlt
b3JkaWFsU2V0QXJndW1lbnQgPSBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50ICYmIG5vZGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpICYmIG5vZGUgPT0gbV9ncmFwaC5tX2FyZ3VtZW50c1tub2RlLT5s
b2NhbCgpLnRvQXJndW1lbnQoKV07CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwgfHwgKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgIWlzUHJpbW9yZGlhbFNl
dEFyZ3VtZW50KSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG5vZGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogZmx1c2hBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJh
bmQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZsdXNoQWNjZXNzRGF0YSkKQEAgLTExNyw2
ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoaW5pdGlhbEFjY2Vzc0RhdGEub3Bl
cmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcCgpICE9IFNldExvY2FsKTsgLy8gV2Ug
c2hvdWxkIGhhdmUgaW5zZXJ0ZWQgYSBGbHVzaCBiZWZvcmUgdGhpcyEKICAgICAgICAgICAgIGlu
aXRpYWxBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgIGluaXRpYWxBY2Nlc3NOb2Rlcy5vcGVyYW5kKG9wZXJhbmQpID0g
bm9kZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAK
aW5kZXggNWFjMzZhYzUxYThiM2UxODgxNzQ2Y2NlZDk1YzFkNDU0NDRlNmRlMi4uNDYyNzkwNWIx
OTE1YTQzZDA1YjM5OGVlNTM4NmQ2ZGU4MWZiYjE5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01heUV4aXQuY3BwCkBAIC03Miw3ICs3Miw2IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBs
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIEdl
dFN0YWNrOgogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM6Ci0gICAgY2FzZSBHZXRBcmd1bWVudFJlZ2lzdGVyOgogICAgIGNhc2UgR2V0
UmVzdExlbmd0aDoKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCmluZGV4IDU0
YjY1MzY3OTkzYTRiNzY2ZTQ2MTFmMDgxZTgxMTVkNDE2M2ZlNTkuLjgwNzk1YzJmZTcwZjAzY2Yx
OTM5ZGIzMTdmNTMwOWNjNzZhOTI3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01pbmlmaWVkTm9kZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw4ICs0MSw2IEBAIE1pbmlmaWVkTm9kZSBNaW5p
ZmllZE5vZGU6OmZyb21Ob2RlKE5vZGUqIG5vZGUpCiAgICAgcmVzdWx0Lm1fb3AgPSBub2RlLT5v
cCgpOwogICAgIGlmIChoYXNDb25zdGFudChub2RlLT5vcCgpKSkKICAgICAgICAgcmVzdWx0Lm1f
aW5mbyA9IEpTVmFsdWU6OmVuY29kZShub2RlLT5hc0pTVmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRBcmd1bWVudFJlZ2lzdGVyKQotICAgICAgICByZXN1bHQubV9pbmZv
ID0ganNGdW5jdGlvbkFyZ3VtZW50Rm9yQXJndW1lbnRSZWdpc3RlckluZGV4KG5vZGUtPmFyZ3Vt
ZW50UmVnaXN0ZXJJbmRleCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBub2RlLT5vcCgpID09IFBoYW50b21DbG9u
ZWRBcmd1bWVudHMpOwogICAgICAgICByZXN1bHQubV9pbmZvID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4obm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAppbmRleCA2YzE2YTczZGQzYzEyMDY3
ZTJmYzQ1NGY2ZjRhYzA3MjAxNGQ3MjNjLi4yOWY2ZGEzYmFhNDUyZTg4YTQyYWI2NGNlOWQ5NDMy
MjcxMWMyYjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlm
aWVkTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2Rl
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNiBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5N
aW5pZmllZEdyYXBoKE5vZGVUeXBlIHR5cGUpCiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAg
ICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJn
dW1lbnRzOgotICAgIGNhc2UgR2V0QXJndW1lbnRSZWdpc3RlcjoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzIsMTAgKzcxLDYg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxJbmxpbmVDYWxs
RnJhbWUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1faW5mbykpOwogICAgIH0KLQotICAgIGJv
b2wgaGFzQXJndW1lbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGhhc0FyZ3VtZW50SW5kZXgobV9v
cCk7IH0KLQotICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9pbmZvKTsgfQogICAgIAogICAgIHN0YXRpYyBNaW5pZmllZElE
IGdldElEKE1pbmlmaWVkTm9kZSogbm9kZSkgeyByZXR1cm4gbm9kZS0+aWQoKTsgfQogICAgIHN0
YXRpYyBib29sIGNvbXBhcmVCeU5vZGVJbmRleChjb25zdCBNaW5pZmllZE5vZGUmIGEsIGNvbnN0
IE1pbmlmaWVkTm9kZSYgYikKQEAgLTkzLDExICs4OCw2IEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICByZXR1cm4gdHlwZSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IHR5cGUgPT0gUGhh
bnRvbUNsb25lZEFyZ3VtZW50czsKICAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBoYXNBcmd1bWVu
dEluZGV4KE5vZGVUeXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBHZXRB
cmd1bWVudFJlZ2lzdGVyOwotICAgIH0KICAgICAKICAgICBNaW5pZmllZElEIG1faWQ7CiAgICAg
dWludDY0X3QgbV9pbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKaW5kZXgg
ZTUwNjVjOTVjYWFjMjFkNDU4ZjNlYjAxMWMzMmVhMThmZWFjYzM3Ny4uNmE5NGI1OTlkODdhODgx
ZDQ1OTkwOThjNmMzZWJjZmQ0NjA3NmY2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuY3BwCkBAIC03MSw3ICs3MSw2IEBAIGJvb2wgTm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KEdyYXBoJiBncmFwaCkKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9jYWw6CiAg
ICAgY2FzZSBTZXRBcmd1bWVudDoKLSAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6CiAgICAg
Y2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgcmV0dXJuIHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGM4ODBhZGFhMmYyYjA5OWRkYjky
Y2RkODk1NzA5ZTEzYTUwZDg5OWEuLmIyODE1N2YyNTAxMTVlNjI4N2IyNGU3ZjNhOTZiNzFjMmVm
ZTQ5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC04MjgsOSArODI4LDYg
QEAgcHVibGljOgogICAgIGJvb2wgaGFzVmFyaWFibGVBY2Nlc3NEYXRhKEdyYXBoJik7CiAgICAg
Ym9vbCBhY2Nlc3Nlc1N0YWNrKEdyYXBoJiBncmFwaCkKICAgICB7Ci0gICAgICAgIGlmIChvcCgp
ID09IEdldEFyZ3VtZW50UmVnaXN0ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAg
ICAgICAgcmV0dXJuIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YShncmFwaCk7CiAgICAgfQogICAgIApA
QCAtODQ5LDExICs4NDYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxW
YXJpYWJsZUFjY2Vzc0RhdGEqPigpLT5maW5kKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0
VmFyaWFibGVBY2Nlc3NEYXRhKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCi0gICAgewot
ICAgICAgICBtX29wSW5mbyA9IHZhcmlhYmxlOwotICAgIH0KLSAgICAKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5sb2NhbCgpOwpAQCAtMTIyMiwxNyArMTIxNCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbUpTVHlwZShxdWVyaWVkVHlwZSgpKTsKICAgICB9CiAgICAgCi0gICAg
Ym9vbCBoYXNBcmd1bWVudFJlZ2lzdGVySW5kZXgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gR2V0QXJndW1lbnRSZWdpc3RlcjsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJn
dW1lbnRSZWdpc3RlckluZGV4KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNBcmd1bWVudFJl
Z2lzdGVySW5kZXgoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mbzIuYXM8dW5zaWduZWQ+KCk7
Ci0gICAgfQotICAgIAogICAgIGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVy
biAhIXJlc3VsdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4
IDg3ZWVjYjMzNDA3MWU3Nzk2NzBlNmUxMWRmMWEzODc4OGJiMTUyOWMuLmQ0NWU0ZGZhMDA2MWZi
NDYyZjZlZWFhNmUzOTA3MTEyNDkyZjdmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKQEAgLTUzLDcgKzUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKENyZWF0ZVRoaXMsIE5vZGVSZXN1bHRKUykgLyogTm90ZSB0aGlzIGlz
IG5vdCBNdXN0R2VuZXJhdGUgc2luY2Ugd2UncmUgcmV0dXJuaW5nIGl0IGFueXdheS4gKi8gXAog
ICAgIG1hY3JvKEdldENhbGxlZSwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEFy
Z3VtZW50UmVnaXN0ZXIsIE5vZGVSZXN1bHRKUyAvKiB8IE5vZGVNdXN0R2VuZXJhdGUgKi8pIFwK
ICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGxvY2FsIHZhcmlhYmxlIGFjY2Vzcy4gVGhlc2Ugbm9k
ZXMgYXJlIGxpbmtlZCB0b2dldGhlciB1c2luZyBQaGkgbm9kZXMuICovXAogICAgIC8qIEFueSB0
d28gbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc2FtZSBQaGkgZ3JhcGggd2lsbCBzaGFyZSB0
aGUgc2FtZSAqL1wKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCmluZGV4IDFhMjNjMzcyZGNmZjRk
ZTAzMzlkN2IyYmE5M2UyNGY4NTFkYTU4YWQuLjAzNTk4NDZmNTA4OGI3MGZkMDJjYTJiMDZhMmM3
ZWVmZDFjNWRhZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcApAQCAtMTQ0LDExICsxNDQs
NiBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBHZXRBcmd1bWVudFJl
Z2lzdGVyOiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuc2V0Tm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2Fz
ZSBNb3ZIaW50OiB7CiAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCAxYmUyNzk5NDU3YzRlYjYxMWE4
NjlhNmI5M2NjMmE1OTUxYTUxOGNkLi41ZDIyZWRkNjBjNWY4ODVmMWM2MDAzYTY1ZjA1Mzc2ZWI3
MDBhNjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTEyLDMyICsxMTIsMTYgQEAgcHVi
bGljOgogICAgICAgICAvLyB0eXBlIGNoZWNrcyB0byBoZXJlLgogICAgICAgICBvcmlnaW4gPSB0
YXJnZXQtPmF0KDApLT5vcmlnaW47CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmFzZWxpbmUtPm51
bVBhcmFtZXRlcnMoKSk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgZm9yIChpbnQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgIE5vZGUqIG9sZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1
bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBpZiAoIW9sZE5vZGUpIHsKLSAgICAgICAgICAg
ICAgICAvLyBKdXN0IGZvciBzYW5pdHksIGFsd2F5cyBoYXZlIGFuIGFyZ3VtZW50IG5vZGUgZXZl
biBpZiBpdCdzIG5vdCBuZWVkZWQuCi0gICAgICAgICAgICAgICAgb2xkTm9kZSA9IG1fZ3JhcGgu
bV9hcmd1bWVudHNGb3JDaGVja2luZ1thcmd1bWVudF07CisgICAgICAgICAgICAgICAgLy8gSnVz
dCBmb3Igc2FuaXR5LCBhbHdheXMgaGF2ZSBhIFNldEFyZ3VtZW50IGV2ZW4gaWYgaXQncyBub3Qg
bmVlZGVkLgorICAgICAgICAgICAgICAgIG9sZE5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRzW2Fy
Z3VtZW50XTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAg
ICAgICBOb2RlKiBzdGFja05vZGU7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnQgPCBOVU1CRVJf
T0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKSB7Ci0gICAgICAgICAgICAgICAgbm9k
ZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNw
ZWNOb25lLCBHZXRBcmd1bWVudFJlZ2lzdGVyLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksCi0gICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhhcmd1bWVudFJlZ2lzdGVySW5kZXhGb3JKU0Z1bmN0aW9uQXJndW1lbnQoYXJn
dW1lbnQpKSk7Ci0gICAgICAgICAgICAgICAgc3RhY2tOb2RlID0gbmV3Um9vdC0+YXBwZW5kTm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldExvY2FsLCBvcmln
aW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSksCi0gICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSkpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBub2RlID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFyZ3VtZW50LCBvcmlnaW4sCi0g
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkp
OwotICAgICAgICAgICAgICAgIHN0YWNrTm9kZSA9IG5vZGU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNGb3JDaGVja2luZ1thcmd1bWVudF0gPSBub2Rl
OwotICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c09uU3RhY2tbYXJndW1lbnRdID0gc3Rh
Y2tOb2RlOworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFyZ3VtZW50LCBvcmlnaW4sCisg
ICAgICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7Cisg
ICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7CiAgICAgICAg
IH0KIAogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUtPm1fbnVt
Q2FsbGVlTG9jYWxzOyArK2xvY2FsKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAppbmRleCBiMGQxZWFlMzc3MjVhODEyYTkwNjVmMTliYjlkZDUzNTQzMzY2ZjM5Li5jMGM5NDc5
Y2E4YTRjMzQ2NzA4OGY5ZDdiZmQyOThiM2MyZWE2MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKQEAgLTMxNCw5ICszMTQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGgg
UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbChMb25nTGl2ZWRTdGF0ZSYgbG9uZ0xpdmVkU3RhdGUp
CiAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsK
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICBkZmcubV9zdHJlbmd0aFJlZHVjZUFyZ3Vt
ZW50cyA9IE9wdGltaXplQXJndW1lbnRGbHVzaGVzOwogICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNG
R1NpbXBsaWZpY2F0aW9uKGRmZyk7Ci0gICAgY2hhbmdlZCB8PSBwZXJmb3JtU3RyZW5ndGhSZWR1
Y3Rpb24oZGZnKTsKICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Mb2NhbENTRShkZmcpOwogICAgIAog
ICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCBiMmM3OWJhYTVjNTE2
MWE4MmJiYzA5OTJiMTcyNjM5M2M0Nzg0NTQ1Li5iYWYwYWQ5MTExZDlhZWNhMWJjYzZhYTU5ZmUy
ZmQ3NDJmNjBmYjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApAQCAtMTk3LDcgKzE5Nyw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAvLyBBbGwgb2Yg
dGhlIG91dGVybW9zdCBzdGFjayBhcmd1bWVudHMsIGV4Y2VwdCB0aGlzLCBhcmUgZGVmaW5pdGVs
eSByZWFkLgorICAgICAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRlcm1vc3QgYXJndW1lbnRzLCBl
eGNlcHQgdGhpcywgYXJlIGRlZmluaXRlbHkgcmVhZC4KICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAg
ICAgICAgICAgICAgICAgbV9yZWFkKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKICAg
ICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKaW5kZXggMmIwYTcwZmZiYTM3ZDhkNzlmYjQ1MDA0M2I0
ZDdkMWU4NjhmMzIxMy4uMjdmYjkwMzczN2M0Y2IzMTU5NzU4MzliNTgxOGFlMWFiNzgxNDA2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNGb3JDaGVja2luZ1th
cmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAogICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YWNjZXNzZXNTdGFj
ayhtX2dyYXBoKSB8fCBub2RlLT5vcCgpID09IEdldEFyZ3VtZW50UmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKICAgICAgICAg
ICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKICAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZh
bHVlc1tpXSkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCAzZmZm
OGMwNDA0NTE3ZDk1OGJmMDlmNTFmZGQwNzZkNGE2NDYwYmVlLi4zNTZlZjNlMjM5YmMwZWI0MzAz
NmU2MGZlNTYwZDYzNDk0NmMzOTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMTY4LDE2
ICsxNjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOwot
ICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+Y291bGRSZXByZXNlbnRJbnQ1MigpICYmIChwcmVk
aWN0aW9uICYgU3BlY0ludDUyT25seSkpCi0gICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IChw
cmVkaWN0aW9uIHwgU3BlY0FueUludEFzRG91YmxlKSAmIH5TcGVjSW50NTJPbmx5OwotICAgICAg
ICAgICAgaWYgKHByZWRpY3Rpb24pCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24ocHJlZGljdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKICAgICAgICAgICAgIGlm
IChub2RlLT5jYW5TcGVjdWxhdGVJbnQzMihtX3Bhc3MpKQogICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwpAQCAtOTc4LDcgKzk2OCw2IEBA
IHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKLSAgICAgICAgY2FzZSBHZXRBcmd1bWVudFJlZ2lzdGVyOgogICAgICAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgogICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICBjYXNlIEFyaXRoQWRk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcAppbmRleCA0ZTI4ZDlkMmEzZmIzYzUwMTEwOGIzMzc1NWVjNWNjNTQzYmY2Y2Y5
Li43ODE2MmM3MTM1NjJiNDY0NzI3YTUxNDVjYjFlMDJiYjMzZDE3NTcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApA
QCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICB9IHdoaWxl
IChjaGFuZ2VkKTsKICAgICAgICAgCi0gICAgICAgIC8vIEFsbCBvZiB0aGUgc3RhY2sgYXJndW1l
bnRzIHNob3VsZCBiZSBsaXZlIGF0IGhlYWQgb2Ygcm9vdC4gTm90ZSB0aGF0IHdlIG1heSBmaW5k
IHRoYXQgc29tZQorICAgICAgICAvLyBBbGwgb2YgdGhlIGFyZ3VtZW50cyBzaG91bGQgYmUgbGl2
ZSBhdCBoZWFkIG9mIHJvb3QuIE5vdGUgdGhhdCB3ZSBtYXkgZmluZCB0aGF0IHNvbWUKICAgICAg
ICAgLy8gbG9jYWxzIGFyZSBsaXZlIGF0IGhlYWQgb2Ygcm9vdC4gVGhpcyBzZWVtcyB3cm9uZyBi
dXQgaXNuJ3QuIFRoaXMgd2lsbCBoYXBwZW4gZm9yIGV4YW1wbGUKICAgICAgICAgLy8gaWYgdGhl
IGZ1bmN0aW9uIGFjY2Vzc2VzIGNsb3N1cmUgdmFyaWFibGUgIzQyIGZvciBzb21lIG90aGVyIGZ1
bmN0aW9uIGFuZCB3ZSBlaXRoZXIgZG9uJ3QKICAgICAgICAgLy8gaGF2ZSB2YXJpYWJsZSAjNDIg
YXQgYWxsIG9yIHdlIGhhdmVuJ3Qgc2V0IGl0IGF0IHJvb3QsIGZvciB3aGF0ZXZlciByZWFzb24u
IEJhc2ljYWxseSB0aGlzCkBAIC0xNTcsMTIgKzE1Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8K
ICAgICAgICAgLy8gRm9yIG91ciBwdXJwb3NlcyBoZXJlLCB0aGUgaW1wcmVjaXNpb24gaW4gdGhl
IGFsaWFzaW5nIGlzIGhhcm1sZXNzLiBJdCBqdXN0IG1lYW5zIHRoYXQgd2UKICAgICAgICAgLy8g
bWF5IG5vdCBkbyBhcyBtdWNoIFBoaSBwcnVuaW5nIGFzIHdlIHdhbnRlZC4KLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5udW1iZXJPZkFyZ3VtZW50cygpOyBp
LS07KSB7Ci0gICAgICAgICAgICBpZiAoaSA+PSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1F
TlRfUkVHSVNURVJTKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RhY2sgYXJndW1lbnRzIGFyZSBs
aXZlIGF0IHRoZSBoZWFkIG9mIHJvb3QuCi0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBudWxscHRyLCBsaXZlQXRIZWFkLmF0SW5kZXgoMCkuYXJndW1lbnQoaSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlQXRIZWFkLmF0
SW5kZXgoMCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbnVsbHB0ciwgbGl2ZUF0SGVhZC5hdEluZGV4KDApLmFyZ3VtZW50KGkpKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIE5leHQgaWRlbnRpZnkgd2hlcmUgd2Ugd291bGQgd2FudCB0
byBzaW5rIFB1dFN0YWNrcyB0by4gV2Ugc2F5IHRoYXQgdGhlcmUgaXMgYSBkZWZlcnJlZAogICAg
ICAgICAvLyBmbHVzaCBpZiB3ZSBoYWQgYSBQdXRTdGFjayB3aXRoIGEgZ2l2ZW4gRmx1c2hGb3Jt
YXQgYnV0IGl0IGhhc24ndCBiZWVuIG1hdGVyaWFsaXplZCB5ZXQuCkBAIC0zNjIsOCArMzU4LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQ
dXRTdGFjazoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fYXJndW1lbnRzT25T
dGFjay5jb250YWlucyhub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dFN0YWNrc1Rv
U2luay5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIHB1dFN0YWNrc1RvU2luay5hZGQo
bm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAogICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CkBAIC00ODgsMTUgKzQ4MywxMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29t
aW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU2luY2Ugd2UgZG9uJ3QgZGVsZXRlIGFyZ3VtZW50IFB1dFN0YWNrcywgbm8gbmVlZCB0byBh
ZGQgb25lIGJhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2FyZ3Vt
ZW50c09uU3RhY2suY29udGFpbnMoaW5jb21pbmcpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEg
UHV0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRTdGFjayBmb3IgIiwg
b3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAorICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGluY29taW5nKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKQEAgLTU0Nyw4ICs1MzgsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGluY29taW5nOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb25jcmV0ZShkZWZlcnJl
ZC5vcGVyYW5kKG9wZXJhbmQpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcg
PSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2FyZ3VtZW50c09uU3RhY2suY29udGFpbnMoaW5jb21pbmcpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBwaGlOb2RlLCBpbmNvbWluZyk7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJc3N1ZSBhIEdldFN0YWNrIHRv
IGdldCB0aGUgdmFsdWUuIFRoaXMgbWlnaHQgaW50cm9kdWNlIHNvbWUgcmVkdW5kYW5jeQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgKaW5kZXggNTY3NWNjZWQ1
OTAwZDhjY2FjMmYwNTU4MzQ0NzJjZGI1MDMxZmFjNS4uYTMzMjNlNmFjYmQ1ZWQwN2JmZDQ0NTMz
NWRkZDk5M2FmODBhZDA3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZWdpc3RlckJhbmsuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lz
dGVyQmFuay5oCkBAIC0yMzYsMTEgKzIzNiw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biBtX2JhbmstPmlzTG9ja2VkQXRJbmRleChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgdW5sb2NrKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYmFu
ay0+dW5sb2NrQXRJbmRleChtX2luZGV4KTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAg
dm9pZCByZWxlYXNlKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgbV9iYW5rLT5yZWxl
YXNlQXRJbmRleChtX2luZGV4KTsKQEAgLTMwMywxMyArMjk4LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIG1fZGF0YVtpbmRleF0ubG9ja0NvdW50OwogICAgIH0KIAotICAgIHZvaWQgdW5s
b2NrQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8
IE5VTV9SRUdTKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKLSAg
ICAgICAgLS1tX2RhdGFbaW5kZXhdLmxvY2tDb3VudDsKLSAgICB9Ci0KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbmFtZUF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXggYmFiOTU5MzE0Y2M0MjcxNmZjOGUw
OTQ2NmMyZWRlNTcwYzFhZDk5OS4uY2RlMDc0MDA3Yzk2NTc0MWIzZmFiNzM0NDJiZTAxYWZmOGM1
YmQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcApAQCAtNzMsOCArNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIC8vIEZpbmQgYWxsIFNldExvY2FscyBhbmQgY3JlYXRlIERlZnMgZm9yIHRo
ZW0uIFdlIGhhbmRsZSBTZXRBcmd1bWVudCBieSBjcmVhdGluZyBhCi0gICAgICAgIC8vIEdldFN0
YWNrLCBhbmQgcmVjb3JkaW5nIHRoZSBmbHVzaCBmb3JtYXQuIFdlIGhhbmRsZSBHZXRBcmd1bWVu
dFJlZ2lzdGVyIGJ5IGRpcmVjdGx5Ci0gICAgICAgIC8vIGFkZGluZyB0aGUgbm9kZSB0byBtX2Fy
Z3VtZW50TWFwcGluZyBoYXNoIG1hcC4KKyAgICAgICAgLy8gR2V0TG9jYWwsIGFuZCByZWNvcmRp
bmcgdGhlIGZsdXNoIGZvcm1hdC4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQpAQCAtODQsMTYgKzgzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIGFz
c2lnbm1lbnQgZm9yIGV2ZXJ5IGxvY2FsLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCAmJiBub2RlLT5vcCgpICE9IFNldEFy
Z3VtZW50ICYmIG5vZGUtPm9wKCkgIT0gR2V0QXJndW1lbnRSZWdpc3RlcikKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCAmJiBub2RlLT5vcCgpICE9IFNldEFyZ3Vt
ZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSog
Y2hpbGROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGU7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5vcCgpID09IEdldEFyZ3VtZW50UmVnaXN0ZXIpCi0gICAgICAgICAg
ICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBub2RlKTsKICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKApAQCAtMTA0LDExICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2FyZ3VtZW50R2V0dGVycy5hZGQoY2hpbGROb2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9hcmd1bWVudE1hcHBpbmcuYWRkKG5vZGUsIGNoaWxkTm9kZSk7CiAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZSkgewotICAgICAgICAg
ICAgICAgICAgICBtX2NhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmdldCh2YXJpYWJsZSksIGJsb2NrLCBjaGlsZE5vZGUp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBt
X2NhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9y
VmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwpAQCAtMjk5LDEzICsyOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGNoaWxkOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBj
YXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBub2RlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0K
KyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9hcmd1bWVudEdldHRlcnMuY29udGFpbnMobm9k
ZSkpOwogICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gbm9kZTsKQEAgLTM5MywyMSArMzgyLDE3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxv
Y2s6OlNTQURhdGE+KGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9ncmFw
aC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUobV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5n
LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9hcmd1bWVudHNG
b3JDaGVja2luZy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9y
bWF0cy5yZXNpemUobV9ncmFwaC5tX2FyZ3VtZW50cy5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm1fYXJndW1lbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CiAKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQobV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNo
ZWNraW5nW2ldKTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5n
ZXQobV9ncmFwaC5tX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG5vZGUpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QXJn
dW1lbnRSZWdpc3RlcikgewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICBmb3Jt
YXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CisgICAg
ICAgICAgICBmb3JtYXQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldID0gZm9ybWF0
OwotICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5nW2ldID0gbm9kZTsg
Ly8gUmVjb3JkIHRoZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGJlbmVm
aXQgb2YgZXhpdCBwcm9maWxpbmcuCisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2ld
ID0gbm9kZTsgLy8gUmVjb3JkIHRoZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFyZ3VtZW50cyBmb3Ig
dGhlIGJlbmVmaXQgb2YgZXhpdCBwcm9maWxpbmcuCiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAppbmRleCAzMjY2MTk4ZTExZTFmMDJkMDBjMmEyNWFkN2EzMTI0Y2Iy
MTk3NTAyLi5mM2Y3ODkyOTI4ZTk2NGY2N2YwY2UzNzBiMTI0ZmQ0NzU5NmUzYzYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMTQ3LDcgKzE0
Nyw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgY2FzZSBHZXRD
YWxsZWU6CiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoKLSAgICBjYXNl
IEdldEFyZ3VtZW50UmVnaXN0ZXI6CiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgogICAgIGNhc2Ug
R2V0TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMGU5MmMyYTZhMDQzNTg1NzZmMjJjY2Q1
MmNkZWI1NjRlZmE4NDkwNy4uOWNiZGQ4NjAzMGNiOGFiNjE5YTMzYWMxNmQxMTJhMDRkNDljZmZj
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKQEAgLTc0LDcgKzc0LDYgQEAgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENv
bXBpbGVyJiBqaXQpCiAgICAgLCBtX2xhc3RHZW5lcmF0ZWROb2RlKExhc3ROb2RlVHlwZSkKICAg
ICAsIG1faW5kZXhJbkJsb2NrKDApCiAgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmdyYXBo
KCkuZnJhbWVSZWdpc3RlckNvdW50KCkpCi0gICAgLCBtX2FyZ3VtZW50R2VuZXJhdGlvbkluZm8o
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlICsgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
cykKICAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKICAgICAsIG1faW50ZXJwcmV0ZXIobV9q
aXQuZ3JhcGgoKSwgbV9zdGF0ZSkKICAgICAsIG1fc3RyZWFtKCZqaXQuaml0Q29kZSgpLT52YXJp
YWJsZUV2ZW50U3RyZWFtKQpAQCAtNDA4LDggKzQwNyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNsZWFyR2VuZXJhdGlvbkluZm8oKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBtX2dlbmVyYXRpb25JbmZvW2ld
ID0gR2VuZXJhdGlvbkluZm8oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1
bWVudEdlbmVyYXRpb25JbmZvLnNpemUoKTsgKytpKQotICAgICAgICBtX2FyZ3VtZW50R2VuZXJh
dGlvbkluZm9baV0gPSBHZW5lcmF0aW9uSW5mbygpOwogICAgIG1fZ3BycyA9IFJlZ2lzdGVyQmFu
azxHUFJJbmZvPigpOwogICAgIG1fZnBycyA9IFJlZ2lzdGVyQmFuazxGUFJJbmZvPigpOwogfQpA
QCAtMTIwMiwyNSArMTE5OSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhRm9ybWF0U3RyaW5n
KERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHJldHVybiBzdHJpbmdzW2Zvcm1hdF07CiB9CiAKLXN0
YXRpYyB2b2lkIGR1bXBSZWdpc3RlckluZm8oR2VuZXJhdGlvbkluZm8mIGluZm8sIHVuc2lnbmVk
IGluZGV4KQotewotICAgIGlmIChpbmZvLmFsaXZlKCkpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
JSAzZDolcyVzIiwgaW5kZXgsIGRhdGFGb3JtYXRTdHJpbmcoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSwgZGF0YUZvcm1hdFN0cmluZyhpbmZvLnNwaWxsRm9ybWF0KCkpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGRhdGFMb2dGKCIgICAgJSAzZDpbX19dW19fXSIsIGluZGV4KTsKLSAgICBpZiAoaW5mby5y
ZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCi0gICAgICAgIGRhdGFMb2dGKCI6
ZnByJWRcbiIsIGluZm8uZnByKCkpOwotICAgIGVsc2UgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICYmICEo
aW5mby5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKQotI2VuZGlmCi0gICAgICAgICkg
ewotICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAg
ZGF0YUxvZ0YoIjolc1xuIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8uZ3ByKCkpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmR1bXAoY29uc3QgY2hhciogbGFiZWwpCiB7CiAgICAgaWYgKGxhYmVsKQpAQCAtMTIzMCwxNSAr
MTIwOCwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpkdW1wKGNvbnN0IGNoYXIqIGxhYmVsKQog
ICAgIG1fZ3Bycy5kdW1wKCk7CiAgICAgZGF0YUxvZ0YoIiAgZnByczpcbiIpOwogICAgIG1fZnBy
cy5kdW1wKCk7Ci0KLSAgICBkYXRhTG9nRigiICBBcmd1bWVudCBWaXJ0dWFsUmVnaXN0ZXJzOlxu
Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRHZW5lcmF0aW9uSW5m
by5zaXplKCk7ICsraSkKLSAgICAgICAgZHVtcFJlZ2lzdGVySW5mbyhtX2FyZ3VtZW50R2VuZXJh
dGlvbkluZm9baV0sIGkpOwotCi0gICAgZGF0YUxvZ0YoIiAgTG9jYWwgVmlydHVhbFJlZ2lzdGVy
czpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dlbmVyYXRpb25JbmZvLnNp
emUoKTsgKytpKQotICAgICAgICBkdW1wUmVnaXN0ZXJJbmZvKG1fZ2VuZXJhdGlvbkluZm9baV0s
IGkpOwotCisgICAgZGF0YUxvZ0YoIiAgVmlydHVhbFJlZ2lzdGVyczpcbiIpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tpXTsKKyAgICAgICAg
aWYgKGluZm8uYWxpdmUoKSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgJSAzZDolcyVzIiwg
aSwgZGF0YUZvcm1hdFN0cmluZyhpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpLCBkYXRhRm9ybWF0U3Ry
aW5nKGluZm8uc3BpbGxGb3JtYXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRh
TG9nRigiICAgICUgM2Q6W19fXVtfX10iLCBpKTsKKyAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgZGF0YUxvZ0YoIjpmcHIl
ZFxuIiwgaW5mby5mcHIoKSk7CisgICAgICAgIGVsc2UgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAm
JiAhKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAmIERhdGFGb3JtYXRKUykKKyNlbmRpZgorICAgICAg
ICAgICAgKSB7CisgICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCI6JXNcbiIsIEdQUkluZm86OmRlYnVnTmFtZShpbmZv
LmdwcigpKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7Cisg
ICAgfQogICAgIGlmIChsYWJlbCkKICAgICAgICAgZGF0YUxvZ0YoIjwvJXM+XG4iLCBsYWJlbCk7
CiB9CkBAIC0xNjg5LDkgKzE2NzcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Vy
cmVudEJsb2NrKCkKICAgICAKICAgICBtX2ppdC5ibG9ja0hlYWRzKClbbV9ibG9jay0+aW5kZXhd
ID0gbV9qaXQubGFiZWwoKTsKIAotICAgIGlmICghbV9ibG9jay0+aW5kZXgpCi0gICAgICAgIGNo
ZWNrQXJndW1lbnRUeXBlcygpOwotCiAgICAgaWYgKCFtX2Jsb2NrLT5pbnRlcnNlY3Rpb25PZkNG
QUhhc1Zpc2l0ZWQpIHsKICAgICAgICAgLy8gRG9uJ3QgZ2VuZXJhdGUgY29kZSBmb3IgYmFzaWMg
YmxvY2tzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGFjY29yZGluZyB0byBDRkEuCiAgICAgICAgIC8v
IEJ1dCB0byBiZSBzdXJlIHRoYXQgbm9ib2R5IGhhcyBnZW5lcmF0ZWQgYSBqdW1wIHRvIHRoaXMg
YmxvY2ssIGRyb3AgaW4gYQpAQCAtMTcwMiw5ICsxNjg3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAKICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6OnJlc2V0KCkpOwogICAgIAotICAgIGlmICghbV9ibG9jay0+aW5kZXgpCi0g
ICAgICAgIHNldHVwQXJndW1lbnRSZWdpc3RlcnNGb3JFbnRyeSgpOwotICAgIAogICAgIG1faml0
LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAgICAgbV9qaXQuaml0QXNzZXJ0VGFnc0lu
UGxhY2UoKTsKICAgICBtX2ppdC5qaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwpAQCAtMTcx
NCwyMSArMTY5Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2so
KQogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKCFtX2Jsb2NrLT5pbmRleCAmJiBv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnRGb3JJbmRleChpKTsKLSAgICAg
ICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1faml0LmdyYXBoKCkubV9hcmd1bWVudHNGb3JD
aGVja2luZ1thcmd1bWVudF07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmd1bWVu
dE5vZGUgJiYgYXJndW1lbnROb2RlLT5vcCgpID09IEdldEFyZ3VtZW50UmVnaXN0ZXIpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50Tm9kZS0+cmVmQ291bnQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgR2V0QXJndW1lbnRS
ZWdpc3RlcnMncy4KLSAgICAgICAgICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKAotICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KAotICAgICAgICAgICAgICAg
ICAgICAgICAgTWluaWZpZWRJRChhcmd1bWVudE5vZGUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgYXJndW1lbnROb2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICBjb250
aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgpAQCAtMTgxNSwxNSAr
MTc4MiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAg
IG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVl
KTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKTsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYXJn
dW1lbnRzRm9yQ2hlY2tpbmdbaV07CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ppdC5ncmFwaCgp
Lm1fYXJndW1lbnRzW2ldOwogICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgIC8vIFRo
ZSBhcmd1bWVudCBpcyBkZWFkLiBXZSBkb24ndCBkbyBhbnkgY2hlY2tzIGZvciBzdWNoIGFyZ3Vt
ZW50cy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgfHwgKG5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gR2V0QXJndW1lbnRS
ZWdpc3RlcikKLSAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gR2V0QXJndW1lbnRSZWdpc3Rl
cik7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKICAgICAgICAg
QVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogCiAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBA
IC0xODM0LDQ0ICsxNzk5LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRU
eXBlcygpCiAgICAgICAgIAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwogCi0gICAgICAgIEpTVmFsdWVTb3VyY2Ug
dmFsdWVTb3VyY2U7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBHUFJSZWcgYXJndW1l
bnRSZWdpc3RlciA9IEludmFsaWRHUFJSZWc7Ci0KLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05f
QVJHVU1FTlRfUkVHSVNURVJTCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkg
PCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKSB7Ci0gICAgICAgICAg
ICBhcmd1bWVudFJlZ2lzdGVyID0gYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQo
aSk7Ci0gICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoYXJndW1lbnRSZWdp
c3Rlcik7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmCi0jZW5kaWYKLSAgICAgICAgICAgIHZhbHVl
U291cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpKTsKLQorICAgICAgICBKU1ZhbHVlU291cmNlIHZhbHVlU291cmNlID0gSlNWYWx1ZVNv
dXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKKyAgICAgICAg
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAg
Y2FzZSBGbHVzaGVkSW50MzI6IHsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudFJlZ2lzdGVyICE9
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBhcmd1bWVudFJlZ2lzdGVyLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOwotICAgICAgICAgICAgaWYgKGFyZ3VtZW50UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJl
ZykKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGFyZ3VtZW50UmVnaXN0ZXIsIHRlbXAuZ3By
KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKKyAgICAg
ICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXAuZ3ByKCkpOwogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogewotICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ3VtZW50UmVnaXN0ZXIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlcikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKQEAgLTE5MDIsMzggKzE4NDYsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICBtX29yaWdpbiA9IE5vZGVP
cmlnaW4oKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0dXBBcmd1bWVudFJlZ2lzdGVy
c0ZvckVudHJ5KCkKLXsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNU
RVJTCi0gICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soMCk7
Ci0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTcyMAotICAgIC8vIFdlIHNob3VsZCBzY2FuIG1fYXJndWVtbnRzRm9yQ2hlY2tpbmcgaW5z
dGVhZCBvZiBsb29raW5nIGZvciBHZXRBcmd1bWVudFJlZ2lzdGVyCi0gICAgLy8gbm9kZXMgaW4g
dGhlIHJvb3QgYmxvY2suCi0gICAgZm9yIChzaXplX3QgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJ
bkJsb2NrIDwgZmlyc3RCbG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICBO
b2RlKiBub2RlID0gZmlyc3RCbG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLQotICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRBcmd1bWVudFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAg
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAgICAgR1BSUmVnIGFyZ3VtZW50UmVn
ID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG5vZGUtPmFyZ3VtZW50UmVnaXN0ZXJJbmRl
eCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGFyZ3VtZW50UmVnICE9IElu
dmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW1fZ3Bycy5p
c0xvY2tlZChhcmd1bWVudFJlZykpOwotICAgICAgICAgICAgbV9ncHJzLmFsbG9jYXRlU3BlY2lm
aWMoYXJndW1lbnRSZWcpOwotICAgICAgICAgICAgbV9ncHJzLnJldGFpbihhcmd1bWVudFJlZywg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICAgICAgaW5mby5pbml0QXJn
dW1lbnRSZWdpc3RlclZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIGFyZ3VtZW50UmVnLCBE
YXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgaW5mby5ub3RpY2VPU1JCaXJ0aCgqbV9zdHJlYW0s
IG5vZGUsIHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgICAgICAvLyBEb24ndCBsZWF2ZSBhcmd1
bWVudCByZWdpc3RlcnMgbG9ja2VkLgotICAgICAgICAgICAgbV9ncHJzLnVubG9jayhhcmd1bWVu
dFJlZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQogYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSgpCiB7CisgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7CisgICAgCiAgICAgQVNT
RVJUKCFtX2N1cnJlbnROb2RlKTsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
ICAgICAgICAgbV9qaXQuc2V0Rm9yQmxvY2tJbmRleChibG9ja0luZGV4KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBmMjE1Nzg2YTJhNWY4
ZWQzZjYyMTY2NmU2YzI4NWQ5YmFkYzc5MzVjLi5kZTAwNmNjZjIxOTkzYzRjOTVmYTUxMjExYjky
NDkwOTVkMzZjZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCkBAIC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEdQUlJlZyBmaWxsSlNWYWx1ZShFZGdlLCBHUFJSZWcgZ3ByVG9V
c2UgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBHUFJSZWcgZmlsbEpTVmFsdWUoRWRnZSk7CiAjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGJvb2wgZmlsbEpTVmFsdWUoRWRnZSwgR1BSUmVnJiwg
R1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKQEAgLTIwMCw5ICsyMDAsNiBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKERGR19SRUdJU1RFUl9BTExPQ0FUSU9OX1ZBTElEQVRJT04pCiAgICAgICAgIG1f
aml0LmFkZFJlZ2lzdGVyQWxsb2NhdGlvbkF0T2Zmc2V0KG1faml0LmRlYnVnT2Zmc2V0KCkpOwog
I2VuZGlmCi0gICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlKCk7Ci0KICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUg
PSBtX2dwcnMuYWxsb2NhdGVTcGVjaWZpYyhzcGVjaWZpYyk7CiAgICAgICAgIGlmIChzcGlsbE1l
LmlzVmFsaWQoKSkgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0zMTgsOCArMzE1LDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKIAotICAgIHZvaWQgc2V0
dXBBcmd1bWVudFJlZ2lzdGVyc0ZvckVudHJ5KCk7Ci0KICAgICB2b2lkIGNsZWFyR2VuZXJhdGlv
bkluZm8oKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgd2hlbiBnZW5lcmF0aW5n
ICd1bmV4cGVjdGVkJwpAQCAtNDkwLDkgKzQ4NSw2IEBAIHB1YmxpYzoKICAgICAvLyBTcGlsbCBh
IFZpcnR1YWxSZWdpc3RlciB0byB0aGUgSlNTdGFjay4KICAgICB2b2lkIHNwaWxsKFZpcnR1YWxS
ZWdpc3RlciBzcGlsbE1lKQogICAgIHsKLSAgICAgICAgaWYgKHNwaWxsTWUuaXNBcmd1bWVudCgp
ICYmIG1fYmxvY2stPmluZGV4ID4gMCkKLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcihz
cGlsbE1lKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0yODgxLDEwICsyODczLDcgQEAg
cHVibGljOgogCiAgICAgR2VuZXJhdGlvbkluZm8mIGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAg
aWYgKHZpcnR1YWxSZWdpc3Rlci5pc0xvY2FsKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXIudG9Mb2NhbCgpXTsKLSAgICAgICAgQVNTRVJUKHZp
cnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbV9hcmd1bWVudEdl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKV07CisgICAgICAgIHJldHVybiBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlci50b0xvY2FsKCldOwogICAgIH0KICAgICAK
ICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm8oTm9kZSogbm9kZSkKQEAgLTI5MDcs
NyArMjg5Niw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICAv
LyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZlY3RvcjxHZW5lcmF0
aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87Ci0gICAgVmVjdG9yPEdlbmVyYXRpb25JbmZv
LCA4PiBtX2FyZ3VtZW50R2VuZXJhdGlvbkluZm87CiAgICAgUmVnaXN0ZXJCYW5rPEdQUkluZm8+
IG1fZ3ByczsKICAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9mcHJzOwogCkBAIC0zMDA2LDIw
ICsyOTk0LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVk
Z2UsIEdQUlJlZyByZWdUb1VzZSkKLSAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9l
ZGdlKGVkZ2UpCi0gICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSB8fCByZWdUb1VzZSAh
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgZ3ByVXNlU3BlY2lmaWMocmVnVG9Vc2UpOwot
ICAgIH0KLSNlbmRpZgotICAgIAogICAgIH5KU1ZhbHVlT3BlcmFuZCgpCiAgICAgewogICAgICAg
ICBpZiAoIW1fZWRnZSkKQEAgLTMwNTYsMTIgKzMwMzAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UpOwogICAgICAgICBy
ZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQotICAgIEdQUlJlZyBncHJVc2VTcGVjaWZpYyhH
UFJSZWcgcmVnVG9Vc2UpCi0gICAgewotICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52
YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxKU1Zh
bHVlKG1fZWRnZSwgcmVnVG9Vc2UpOwotICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7Ci0g
ICAgfQogICAgIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlUmVncyhncHIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzODM0NzY3ZGNlOGJmMmM1ZGNiMTFm
ZjZiMjU0ZmJiNTQwZWNlYzlmLi43M2ZiMzY4MjFjOGYyZWQ0MWMyYmJkNDkzNzgwYzE0YWUxODY4
ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKQEAgLTkzMiw3ICs5MzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5y
ZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQo
ZHluYW1pY09yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CiAgICAgCiAgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwotICAgIGluZm8t
PnNldFVwQ2FsbChjYWxsVHlwZSwgU3RhY2tBcmdzLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNh
bGxlZVBheWxvYWRHUFIpOworICAgIGluZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAKICAgICBhdXRvIHNldFJlc3Vs
dEFuZFJlc2V0U3RhY2sgPSBbJl0gKCkgewogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHRQYXlsb2FkKHRoaXMpOwpAQCAtMTA4MSw3ICsxMDgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICB9CiAKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwogCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CkBAIC01NjI0LDcgKzU2MjQsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgY2FzZSBH
ZXRTdGFjazoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKLSAgICBjYXNlIEdldEFyZ3Vt
ZW50UmVnaXN0ZXI6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAg
ICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4
IDYwZjhlZGNhNGZlZTMyZmI0MTk1YTA3ZTZkNjM5MWI3OTk1MWI5YzkuLjk3NWJlMjkyZmRhMDgw
YTIxM2JhMzhmMzZhOGFjYWM4YzczNzUzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtODAsMTQgKzgwLDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmJveEludDUyKEdQUlJlZyBzb3VyY2VHUFIsIEdQUlJlZyB0YXJnZXRH
UFIsIERhdGFGb3JtYXQgZm9yCiAgICAgdW5sb2NrKGZwcik7CiB9CiAKLUdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSBlZGdlLCBHUFJSZWcgZ3ByVG9Vc2UpCitHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRnZSkKIHsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyKTsKICAgICAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkg
ewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9j
YXRlKGdwclRvVXNlKTsKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKICAgICAg
ICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1
ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwpAQCAtMTIwLDEyICsxMjAsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRnZSwgR1BSUmVnIGdwclRvVXNlKQogICAgICAg
ICAvLyBJZiB0aGUgcmVnaXN0ZXIgaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgd2UgbmVlZCB0byB0
YWtlIGEgY29weS4KICAgICAgICAgLy8gSWYgbm90LCB3ZSdsbCB6ZXJvIGV4dGVuZCBpbiBwbGFj
ZSwgc28gbWFyayBvbiB0aGUgaW5mbyB0aGF0IHRoaXMgaXMgbm93IHR5cGUgRGF0YUZvcm1hdElu
dDMyLCBub3QgRGF0YUZvcm1hdEpTSW50MzIuCiAgICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQo
Z3ByKSkgewotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IGFsbG9jYXRlKGdwclRvVXNlKTsK
LSAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBn
cHIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChncHJUb1VzZSAhPSBJbnZhbGlkR1BSUmVnICYmIGdwciAhPSBncHJUb1VzZSkgewot
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IGFsbG9jYXRlKGdwclRvVXNlKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHQgPSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAgbV9qaXQub3I2NChH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE0MywxMSArMTM4LDYgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShFZGdlIGVkZ2UsIEdQUlJlZyBncHJUb1VzZSkKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7
CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwotICAgICAgICBpZiAoZ3ByVG9Vc2Ug
IT0gSW52YWxpZEdQUlJlZyAmJiBncHIgIT0gZ3ByVG9Vc2UpIHsKLSAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHQgPSBhbGxvY2F0ZShncHJUb1VzZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKGdw
ciwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KICAgICAg
ICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC02NDIs
NyArNjMyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcShOb2Rl
KiBub2RlKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKICAg
ICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOwotICAgIEFyZ3VtZW50c0xvY2F0aW9u
IGFyZ3VtZW50c0xvY2F0aW9uID0gU3RhY2tBcmdzOwogICAgIGJvb2wgaXNWYXJhcmdzID0gZmFs
c2U7CiAgICAgYm9vbCBpc0ZvcndhcmRWYXJhcmdzID0gZmFsc2U7CiAgICAgYm9vbCBpc1RhaWwg
PSBmYWxzZTsKQEAgLTcyNSwxMSArNzE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZSkKIAogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBJbnZhbGlkR1BSUmVnOwog
ICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHN0ZDo6b3B0aW9uYWw8
SlNWYWx1ZU9wZXJhbmQ+IHRhaWxDYWxsZWU7Ci0gICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jh
cnk+IGNhbGxlZUdQUlRlbXBvcmFyeTsKLQotICAgIGluY3JlbWVudENvdW50ZXIoJm1faml0LCBW
TTo6REZHQ2FsbGVyKTsKLQorICAgIAogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
bnVsbHB0cjsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IG51
bGxwdHI7CiAgICAgaWYgKGlzRGlyZWN0KSB7CkBAIC03NDgsNyArNzMzLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKICAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgpLm1f
bmV4dE1hY2hpbmVMb2NhbDsKICAgICAgICAgCi0gICAgICAgIGluY3JlbWVudENvdW50ZXIoJm1f
aml0LCBWTTo6Q2FsbFZhcmFyZ3MpOwogICAgICAgICBpZiAoaXNGb3J3YXJkVmFyYXJncykgewog
ICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDMoKSkKQEAgLTg1NywyNSArODQxLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAg
ICAgICBpbmNyZW1lbnRDb3VudGVyKCZtX2ppdCwgVk06OlRhaWxDYWxsKTsKICAgICAgICAgICAg
IEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7Ci0gICAgICAg
ICAgICAvLyBXZSBjYW4ndCBnZXQgdGhlIGEgc3BlY2lmaWMgcmVnaXN0ZXIgZm9yIHRoZSBjYWxs
ZWUsIHNpbmNlIHRoYXQgd2lsbCBqdXN0IG1vdmUKLSAgICAgICAgICAgIC8vIGZyb20gYW55IGN1
cnJlbnQgcmVnaXN0ZXIuICBXaGVuIHdlIHNpbGVudCBmaWxsIGluIHRoZSBzbG93IHBhdGggd2Un
bGwgZmlsbAotICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIHJlZ2lzdGVyIGFuZCB3b24ndCBo
YXZlIHRoZSBjYWxsZWUgaW4gdGhlIHJpZ2h0IHJlZ2lzdGVyLgotICAgICAgICAgICAgLy8gVGhl
cmVmb3JlIHdlIGFsbG9jYXRlIGEgdGVtcCByZWdpc3RlciBmb3IgdGhlIGNhbGxlZSBhbmQgbW92
ZSBvdXJzZWx2ZXMuCi0gICAgICAgICAgICB0YWlsQ2FsbGVlLmVtcGxhY2UodGhpcywgY2FsbGVl
RWRnZSk7Ci0gICAgICAgICAgICBHUFJSZWcgdGFpbENhbGxlZUdQUiA9IHRhaWxDYWxsZWUtPmdw
cigpOwotICAgICAgICAgICAgY2FsbGVlR1BSID0gYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgp
OwotICAgICAgICAgICAgaWYgKHRhaWxDYWxsZWVHUFIgIT0gY2FsbGVlR1BSKQotICAgICAgICAg
ICAgICAgIGNhbGxlZUdQUlRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlzLCBjYWxsZWVHUFIp
OworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwor
ICAgICAgICAgICAgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogICAgICAgICAgICAgaWYgKCFp
c0RpcmVjdCkKLSAgICAgICAgICAgICAgICB0YWlsQ2FsbGVlLT51c2UoKTsKKyAgICAgICAgICAg
ICAgICBjYWxsZWUudXNlKCk7CiAKLSAgICAgICAgICAgIGFyZ3VtZW50c0xvY2F0aW9uID0gYXJn
dW1lbnRzTG9jYXRpb25Gb3IobnVtQWxsb2NhdGVkQXJncyk7Ci0gICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmd1bWVudHNJblJlZ2lzdGVycyA9IGFyZ3VtZW50c0xvY2F0aW9uICE9IFN0YWNrQXJn
czsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLnRhZ1R5cGVOdW1iZXIgPSBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXI7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBt
X2ppdC5ncmFwaCgpLmZyYW1lUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgc2h1ZmZsZURh
dGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIodGFpbENhbGxlZUdQUiwgRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
R1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFy
Z3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CkBAIC04OTAsOCArODY0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5hcmdzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQo
KSk7CiAKICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyht
X2ppdC5jb2RlQmxvY2soKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBDYWxs
RXZhbCkgewotICAgICAgICAgICAgLy8gQ2FsbEV2YWwgaXMgaGFuZGxlZCB3aXRoIHRoZSBhcmd1
bWVudHMgaW4gdGhlIHN0YWNrCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIEpJVENv
bXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFy
Z3M7IGkrKykgewpAQCAtOTA1LDYwICs4NzgsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBKSVRDb21waWxl
cjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKLQotICAgICAgICAgICAgaW5jcmVtZW50Q291bnRl
cigmbV9qaXQsIFZNOjpDYWxsRXZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpLS0gPiAwOykgewotICAgICAgICAgICAg
ICAgIEdQUlJlZyBwbGF0Zm9ybUFyZ0dQUiA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFy
Z3VtZW50KGkpOwotICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UsIHBsYXRmb3JtQXJnR1BSKTsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChhcmdHUFIgPT0gcGxhdGZvcm1BcmdHUFIgfHwgcGxhdGZvcm1BcmdHUFIgPT0g
SW52YWxpZEdQUlJlZyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IGZyZWUgdGhlIG5vbi1h
cmd1bWVudCByZWdpc3RlcnMgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICBpZiAocGxh
dGZvcm1BcmdHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgICAgICAgICB1c2Uo
YXJnRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBKSVRD
b21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFVzZSB0aGUgYXJndW1lbnQgZWRnZXMgZm9yIGFy
Z3VtZW50cyBwYXNzZWQgaW4gcmVnaXN0ZXJzLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtUGFzc2VkQXJnczsgaS0tID4gMDspIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYXJn
R1BSID0gYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoaSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFyZ0dQUiAhPSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJz
dENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBhcmdDb3VudCh0aGlzLCBhcmd1bWVudFJlZ2lzdGVyRm9yQXJndW1lbnRDb3VudCgpKTsKLSAg
ICAgICAgICAgIEdQUlJlZyBhcmdDb3VudEdQUiA9IGFyZ0NvdW50LmdwcigpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIGFyZ0NvdW50R1BSKTsK
LSAgICAgICAgICAgIGFyZ3VtZW50c0xvY2F0aW9uID0gYXJndW1lbnRzTG9jYXRpb25Gb3IobnVt
QWxsb2NhdGVkQXJncyk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3Nl
ZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgcGxhdGZvcm1BcmdHUFIgPSBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChp
KTsKLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1NzY5Ci0gICAgICAgICAgICAgICAgLy8gRWxpbWluYXRlIGZpbGxp
bmcgZXh0cmEgc3RhY2sgc2xvdHMgd2l0aCB1bmRlZmluZWQgSlNWYWx1ZXMgZm9yIHJlZ2lzdGVy
IGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICAvLyBUaGUgTExJbnQgdGh1bmtzIGFyZW4ndCBz
bWFydCBlbm91Z2ggdG8ga25vdyB3aGF0IHJlZ2lzdGVyIGFyZ3VtZW50cyB0byBzcGlsbCB0aGVy
ZWZvcmUKLSAgICAgICAgICAgICAgICAvLyB3ZSBwdXQgdW5kZWZpbmVkIGluIGJvdGggdGhlIGV4
dHJhIGFyZ3VtZW50IHJlZ2lzdGVyIGFuZCBzdGFjayBzbG90LgotICAgICAgICAgICAgICAgIGlm
IChwbGF0Zm9ybUFyZ0dQUiAhPSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBhcmd1bWVudFRlbXAodGhpcywgcGxhdGZvcm1BcmdHUFIpOwotICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSkpLCBhcmd1bWVudFRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBKSVRD
b21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KICAgICAKICAgICBpZiAoIWlzVGFpbCB8fCBpc1ZhcmFyZ3MgfHwgaXNGb3J3YXJk
VmFyYXJncykgewogICAgICAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxk
KG5vZGUsIDApOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRn
ZSwgYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
Y2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwogICAgICAgICBjYWxsZWVHUFIgPSBjYWxsZWUuZ3By
KCk7CiAgICAgICAgIGNhbGxlZS51c2UoKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50c0xvY2F0aW9u
ID09IFN0YWNrQXJncykKLSAgICAgICAgICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBKSVRD
b21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAg
ICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAg
IH0KQEAgLTk4NSw3ICs5MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlKQogICAgIH07CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBt
X2ppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgY2FsbExpbmtJbmZvLT5z
ZXRVcENhbGwoY2FsbFR5cGUsIGFyZ3VtZW50c0xvY2F0aW9uLCBtX2N1cnJlbnROb2RlLT5vcmln
aW4uc2VtYW50aWMsIGNhbGxlZUdQUik7CisgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2Fs
bFR5cGUsIG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2FsbGVlR1BSKTsKIAogICAg
IGlmIChub2RlLT5vcCgpID09IENhbGxFdmFsKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2Fs
bCBvcGVyYXRpb25DYWxsRXZhbCBidXQgd2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlIHBh
cmFtZXRlciBhcmVhIGluCkBAIC0xMDI2LDE0ICs5NTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICBpZiAoaXNUYWlsKSB7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IERpcmVjdFRhaWxDYWxsKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGNhbGxlZUdQUlRlbXBvcmFyeSAhPSBzdGQ6Om51bGxvcHQp
Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0YWlsQ2FsbGVlLT5ncHIoKSwgY2FsbGVlR1BS
VGVtcG9yYXJ5LT5ncHIoKSk7Ci0KICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVK
dW1wIHBhdGNoYWJsZUp1bXAgPSBtX2ppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgICAgICAgICBK
SVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgICAgICAg
ICBpbmNyZW1lbnRDb3VudGVyKCZtX2ppdCwgVk06OlRhaWxDYWxsKTsKLSAgICAgICAgICAgIGlu
Y3JlbWVudENvdW50ZXIoJm1faml0LCBWTTo6RGlyZWN0Q2FsbCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAg
ICAgICAgCkBAIC0xMDQ5LDggKzk3MSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJl
Y3RDYWxsLCBjYWxsTGlua0luZm8sIGNhbGxlZUdQUik7CiAgICAgICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKLSAgICAgICAgICAgIGlmIChjYWxsZWVHUFJUZW1wb3JhcnkgIT0gc3RkOjpudWxs
b3B0KQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUodGFpbENhbGxlZS0+Z3ByKCksIGNhbGxl
ZUdQUlRlbXBvcmFyeS0+Z3ByKCkpOwogICAgICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyht
YWluUGF0aCwgJm1faml0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdXNlQ2hpbGRyZW4o
bm9kZSk7CkBAIC0xMDYxLDggKzk4MSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBh
dGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAKLSAgICAgICAgaW5jcmVtZW50Q291bnRlcigm
bV9qaXQsIFZNOjpEaXJlY3RDYWxsKTsKLQogICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0
ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwpAQCAtMTA3MCwyNSArOTg4LDIwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICBKSVRDb21w
aWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICBpZiAoaXNYODYo
KSkKLSAgICAgICAgICAgIG1faml0LnBvcChHUFJJbmZvOjpub25BcmdHUFIwKTsKLQotICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyks
IEdQUkluZm86Om5vbkFyZ0dQUjApOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gbm9uQXJn
R1BSMAotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxs
KCk7CisgICAgICAgICAgICBtX2ppdC5wb3AoSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIo
Y2FsbGVlR1BSKSk7CiAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0
Q2FsbCwgY2FsbExpbmtJbmZvLCBjYWxsZWVHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOwogICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKG1haW5QYXRoLCAmbV9qaXQpOwog
ICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICBz
ZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7Ci0KLSAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxs
KGNhbGwsIHNsb3dDYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgCisgICAg
ICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChpc1RhaWwgJiYgY2FsbGVlR1BSVGVt
cG9yYXJ5ICE9IHN0ZDo6bnVsbG9wdCkKLSAgICAgICAgbV9qaXQubW92ZSh0YWlsQ2FsbGVlLT5n
cHIoKSwgY2FsbGVlR1BSVGVtcG9yYXJ5LT5ncHIoKSk7Ci0KKyAgICAKICAgICBtX2ppdC5lbWl0
U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6RGF0
YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CkBAIC0xMTEyLDIyICsxMDI1LDIzIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBjYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpOwotICAgICAgICBpZiAoYXJndW1lbnRzTG9jYXRpb24gPT0g
U3RhY2tBcmdzKQotICAgICAgICAgICAgY2FsbEZyYW1lU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MoSlNWYWx1ZVJlZ3MoYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKSk7CisgICAgICAg
IGNhbGxGcmFtZVNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUklu
Zm86OnJlZ1QwKSk7CiAgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0
aCgpOwotICAgIH0gZWxzZSBpZiAoaXNUYWlsKQotICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIs
IEdQUkluZm86OnJlZ1QwKTsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCiAKLSAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gbm9uQXJnR1BS
MAorICAgICAgICBpZiAoaXNUYWlsKQorICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOyAvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB3ZSBtb3ZlZCBjYWxsZWVH
UFIgdG8gcmVnVDAKKyAgICB9CisKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5l
ZWRzIHRvIGJlIGluIHJlZ1QyCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2pp
dC5uZWFyQ2FsbCgpOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICBpZiAoaXNUYWls
KSB7Ci0gICAgICAgIHRhaWxDYWxsZWUgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIGNhbGxlZUdQ
UlRlbXBvcmFyeSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoaXNUYWlsKQogICAgICAgICBtX2pp
dC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKLSAgICB9IGVsc2UK
KyAgICBlbHNlCiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKIAogICAgIG1faml0
LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5m
byk7CkBAIC00MjUyLDkgKzQxNjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgR2V0QXJndW1lbnRS
ZWdpc3RlcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICBjYXNlIEdldFJlc3RM
ZW5ndGg6IHsKICAgICAgICAgY29tcGlsZUdldFJlc3RMZW5ndGgobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggMjMxNjFmYjZjYzAyMjk5NDZiZTEwNDI5OTc2MzFiMTA5
N2FjNWI4MC4uNjZjNTAwOGUyOTk3ODA1MTlkNjgwNDdjZDkyYjZkYTUzYjcxM2Q0NiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9u
UGhhc2UuY3BwCkBAIC0yNzYsOSArMjc2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUq
IHNldExvY2FsID0gbnVsbHB0cjsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9
IG1fbm9kZS0+bG9jYWwoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxvY2FsLmlz
QXJndW1lbnQoKSAmJiBtX2dyYXBoLm1fc3RyZW5ndGhSZWR1Y2VBcmd1bWVudHMgIT0gT3B0aW1p
emVBcmd1bWVudEZsdXNoZXMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwogICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCAyYmM5ODAyZDEyZjc1NzkyODIwNjdkZTY3
NWFhMGM0YzE3MGNkNGQ2Li4zOGJkZDExZDE2OWM2NDJhZTExMzUwODA2MDk5MGM3NGQ2NGZmMDYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzAsMzAgKzEz
MCwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSog
dm0pCiAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDMsIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Q0LCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgLXN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoUmVnaXN0
ZXIpKSArIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoaW50MzJfdCkpKSk7CiAgICAgaml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QxLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KC1zdGF0aWNfY2Fz
dDxpbnRwdHJfdD4oQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpKSkpLmxpbmtUbyhs
b29wLCAmaml0KTsKICAgICAKLSAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgb2Zmc2V0T2ZUYXJnZXRQQyksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEwMDApKSkp
OworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBvZmZzZXRPZlRhcmdldFBDKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIEdQUkluZm86
OnJlZ1QxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKICAgICBqaXQuYWJvcnRXaXRoUmVhc29u
KERGR1VucmVhc29uYWJsZU9TUkVudHJ5SnVtcERlc3RpbmF0aW9uKTsKIAogICAgIG9rLmxpbmso
JmppdCk7Ci0KLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0g
ICAgLy8gTG9hZCBhcmd1bWVudCB2YWx1ZXMgaW50byBhcmd1bWVudCByZWdpc3RlcnMKLSAgICBq
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSksIGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSk7Ci0gICAgR1BSUmVnIGFyZ0Nv
dW50UmVnID0gYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKTsKLSAgICBqaXQubG9h
ZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSwgYXJnQ291bnRSZWcpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lTG9hZGluZ0FyZ3M7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFy
Z0luZGV4IDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJnSW5k
ZXgrKykKLSAgICAgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ0lu
ZGV4KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBhcmd1bWVudFJlZ2lz
dGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCkpOwotICAgIAotICAgIGRvbmVMb2FkaW5n
QXJncy5saW5rKCZqaXQpOwotI2VuZGlmCi0gICAgCiAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOwogICAgIGppdC5lbWl0TWF0ZXJp
YWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaml0Lmp1bXAoR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOwogICAgIAogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBlbnRyeSB0aHVuayIpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
CmluZGV4IGY4MWMwMTBhZTM4ZWEzZTU1OTYwOWY4ZGE3MmEzNTQ1NjFiZTNmNzcuLjE4MDk2MjE3
MThlMjY3MGYxMGU3NGNjODFmNjI0M2QwN2RjYmI0YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApAQCAtMTMzLDEzICsx
MzMsOCBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIGlmICgh
aW5kZXgpIHsKICAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVy
eT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMp
IHsKLSAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUigKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJn
dW1lbnQoaSksIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHZhbHVlUmVjb3Zlcmll
cy5vcGVyYW5kRm9ySW5kZXgoaSkpLCBEYXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5K
U1N0YWNrKAorICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMu
b3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTY2LDEyICsxNjEsNiBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyBpbmZv
OwogICAgICAgICAgICAgaW5mby51cGRhdGUoZXZlbnQpOwogICAgICAgICAgICAgZ2VuZXJhdGlv
bkluZm9zLmFkZChldmVudC5pZCgpLCBpbmZvKTsKLSAgICAgICAgICAgIE1pbmlmaWVkTm9kZSog
bm9kZSA9IGdyYXBoLmF0KGV2ZW50LmlkKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9k
ZS0+aGFzQXJndW1lbnRJbmRleCgpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSBub2RlLT5hcmd1bWVudEluZGV4KCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50UmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwot
ICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoYXJndW1lbnRSZWcsIFZh
bHVlU291cmNlKGV2ZW50LmlkKCkpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmNwcAppbmRleCA2ZWNhMjI3ZmM4MzBhZTU4ZTA1MzZmMTY0MTExMmI5NGI3YzRhZGYxLi5mODEy
NzU5OWUwNTNjZjAxOTFlM2M0ZjViMDFjYzg0NTI1ZDI5NDVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwCkBAIC00MiwzMyArNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJ2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRpb24iKQogICAgIHsKICAgICB9Ci0KLSAg
ICB2b2lkIGFsbG9jYXRlUmVnaXN0ZXIoU2NvcmVCb2FyZCYgc2NvcmVCb2FyZCwgTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJl
bnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJl
Z2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAgICAgICAgLy8gb3JkZXIg
c28gdGhhdCBpZiBhIGNoaWxkIGlzIG9uIGl0cyBsYXN0IHVzZSwgYW5kIGEKLSAgICAgICAgLy8g
VmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUu
Ci0gICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykK
LSAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Nv
cmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIHNjb3Jl
Qm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFub2RlLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gc2NvcmVCb2FyZC5hbGxvY2F0ZSgp
OwotICAgICAgICBub2RlLT5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKLSAg
ICAgICAgLy8gJ211c3RHZW5lcmF0ZScgbm9kZXMgaGF2ZSB0aGVpciB1c2VDb3VudCBhcnRpZmlj
aWFsbHkgZWxldmF0ZWQsCi0gICAgICAgIC8vIGNhbGwgdXNlIG5vdyB0byBhY2NvdW50IGZvciB0
aGlzLgotICAgICAgICBpZiAobm9kZS0+bXVzdEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZShub2RlKTsKLSAgICB9Ci0KKyAgICAKICAgICBib29sIHJ1bigpCiAgICAgewog
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKTsKQEAgLTg1LDE3ICs1OSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAv
LyBGb3JjZSB1c2FnZSBvZiBoaWdoZXN0LW51bWJlcmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgogICAg
ICAgICAgICAgICAgIHNjb3JlQm9hcmQuc29ydEZyZWUoKTsKICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gSGFuZGxlIEdldEFyZ3VtZW50UmVnaXN0ZXIgTm9kZXMgZmlyc3QgYXMgdGhl
IHJlZ2lzdGVyIGlzIGFsaXZlIG9uIGVudHJ5Ci0gICAgICAgICAgICAvLyB0byB0aGUgZnVuY3Rp
b24gYW5kIG1heSBuZWVkIHRvIGJlIHNwaWxsZWQgYmVmb3JlIGFueSB1c2UuCi0gICAgICAgICAg
ICBpZiAoIWJsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleElu
QmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykg
ewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldEFyZ3VtZW50UmVn
aXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyKHNjb3JlQm9h
cmQsIG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIApAQCAtMTEwLDE0ICs3MywzMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFub2RlLT5jaGlsZDEoKS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGls
ZHJlbiwgdGhlbgorICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVy
IGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBvcmRl
ciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAg
ICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2Vk
IGZvciBub2RlLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5u
dW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVC
b2FyZC51c2VJZkhhc1Jlc3VsdChtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJk
LnVzZUlmSGFzUmVzdWx0KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2Nv
cmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aGFzUmVzdWx0KCkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgYWxsb2NhdGVSZWdp
c3RlcihzY29yZUJvYXJkLCBub2RlKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gc2NvcmVCb2FyZC5hbGxvY2F0ZSgpOworICAgICAgICAgICAgICAg
IG5vZGUtPnNldFZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIC8vICdtdXN0R2VuZXJhdGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lh
bGx5IGVsZXZhdGVkLAorICAgICAgICAgICAgICAgIC8vIGNhbGwgdXNlIG5vdyB0byBhY2NvdW50
IGZvciB0aGlzLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdXN0R2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzY29yZUJvYXJkLmFzc2VydENsZWFyKCk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA5YWI4MGFhMWNl
NzY3MGRjNGQ2M2ViOWZiMDdiZDNiMGVhM2RmNWMwLi5kNDJmZjRhZGFlOTdiYmJiNjA1YmJjOWI5
MGEyMDQ2NzM5OTY0MzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCkBAIC0xNzIsNyArMTcyLDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOgogICAgIGNhc2Ug
R2V0U2NvcGU6CiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgY2FzZSBHZXRBcmd1bWVudFJlZ2lz
dGVyOgogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6CiAgICAgY2FzZSBU
b051bWJlcjoKICAgICBjYXNlIFRvU3RyaW5nOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5jcHAKaW5kZXggNjNkNzQxNTcyZWE5N2Q4NzM2NTY5ZTZhYTM0ZWY3ZmJmYTkxNTk4
NC4uMWNkYjUwOTU3MmQ5OWNlNDE1ZWQ3NjAyMjJkOGJiMTg1Mzk4ZGVhYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCkBAIC00NSw4ICs0NSw3IEBAIEpJVENvZGU6
On5KSVRDb2RlKCkKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBGVEwgSklUIGNvZGUgYXQg
Iik7CiAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKICAgICAgICAgZGF0YUxvZyhjb21tYSwg
bV9iM0NvZGUpOwotICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX3JlZ2lzdGVyQXJnc1Bvc3NpYmxl
RXh0cmFBcmdzRW50cnlQb2ludCk7Ci0gICAgICAgIGRhdGFMb2coY29tbWEsIG1fcmVnaXN0ZXJB
cmdzQ2hlY2tBcml0eUVudHJ5UG9pbnQpOworICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2FyaXR5
Q2hlY2tFbnRyeXBvaW50KTsKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICB9CiB9CkBAIC02
MSwzMCArNjAsMzEgQEAgdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQjNCeXByb2R1Y3RzKHN0ZDo6
dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3QKICAgICBtX2IzQnlwcm9kdWN0
cyA9IFdURk1vdmUoYnlwcm9kdWN0cyk7CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUVu
dHJ5cG9pbnRUaHVuayhDb2RlUmVmIGVudHJ5cG9pbnRUaHVuaykKK3ZvaWQgSklUQ29kZTo6aW5p
dGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIgYWRkcmVzcykKIHsKLSAgICBtX2VudHJ5cG9p
bnRUaHVuayA9IGVudHJ5cG9pbnRUaHVuazsKKyAgICBtX2FkZHJlc3NGb3JDYWxsID0gYWRkcmVz
czsKIH0KIAotdm9pZCBKSVRDb2RlOjpzZXRFbnRyeUZvcihFbnRyeVBvaW50VHlwZSB0eXBlLCBD
b2RlUHRyIGVudHJ5KQordm9pZCBKSVRDb2RlOjppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9p
bnQoQ29kZVJlZiBlbnRyeXBvaW50KQogewotICAgIG1fZW50cnlwb2ludHMuc2V0RW50cnlGb3Io
dHlwZSwgZW50cnkpOworICAgIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQgPSBlbnRyeXBvaW50Owog
fQotICAgIAotSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChFbnRyeVBv
aW50VHlwZSBlbnRyeVR5cGUpCisKK0pJVENvZGU6OkNvZGVQdHIgSklUQ29kZTo6YWRkcmVzc0Zv
ckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHlDaGVjaykKIHsKLSAgICBDb2RlUHRyIGVudHJ5ID0g
bV9lbnRyeXBvaW50cy5lbnRyeUZvcihlbnRyeVR5cGUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGVu
dHJ5KTsKLSAgICByZXR1cm4gZW50cnk7CisgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CisgICAg
Y2FzZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JD
YWxsOworICAgIGNhc2UgTXVzdENoZWNrQXJpdHk6CisgICAgICAgIHJldHVybiBtX2FyaXR5Q2hl
Y2tFbnRyeXBvaW50LmNvZGUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpleGVjdXRh
YmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7Ci0jaWYgTlVNQkVSX09GX0pTX0ZV
TkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihhZGRyZXNzRm9yQ2FsbChSZWdpc3RlckFyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpICsgb2Zmc2V0OwotI2Vsc2UKLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oYWRkcmVzc0ZvckNhbGwoU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVp
cmVkKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKLSNlbmRpZgorICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNz
KCkpICsgb2Zmc2V0OwogfQogCiB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNp
emVfdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKaW5kZXggM2RiNzBkZjBj
NTdhYmVmZGY4NThjYjMyOTQ3NDFjOTJiZGU4ZmUxZC4uMmMyODA5ZTk3MmQxOTVlNzE1OGM0NGM2
YmE3MGMzY2VmYTE3ZjdjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgK
QEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIEpJVENvZGUoKTsKICAgICB+SklUQ29kZSgp
OwogCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChFbnRyeVBvaW50VHlwZSkgb3ZlcnJpZGU7
CisgICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBvdmVycmlk
ZTsKICAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIG92ZXJyaWRl
OwogICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkgb3ZlcnJpZGU7
CkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUIzQ29kZShD
b2RlUmVmKTsKICAgICB2b2lkIGluaXRpYWxpemVCM0J5cHJvZHVjdHMoc3RkOjp1bmlxdWVfcHRy
PEIzOjpPcGFxdWVCeXByb2R1Y3RzPik7Ci0gICAgdm9pZCBpbml0aWFsaXplRW50cnlwb2ludFRo
dW5rKENvZGVSZWYpOwotICAgIHZvaWQgc2V0RW50cnlGb3IoRW50cnlQb2ludFR5cGUsIENvZGVQ
dHIpOwotCisgICAgdm9pZCBpbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0cik7CisgICAg
dm9pZCBpbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZik7CisgICAgCiAgICAg
dm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBvdmVycmlk
ZTsKIAogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpIG92ZXJyaWRlOwpAQCAt
NzcsMTIgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBDb2RlUHRyIG1fYWRkcmVzc0ZvckNhbGw7CiAg
ICAgQ29kZVJlZiBtX2IzQ29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJv
ZHVjdHM+IG1fYjNCeXByb2R1Y3RzOwotICAgIENvZGVSZWYgbV9lbnRyeXBvaW50VGh1bms7Ci0g
ICAgSklURW50cnlQb2ludHMgbV9lbnRyeXBvaW50czsKLSAgICBDb2RlUHRyIG1fcmVnaXN0ZXJB
cmdzUG9zc2libGVFeHRyYUFyZ3NFbnRyeVBvaW50OwotICAgIENvZGVQdHIgbV9yZWdpc3RlckFy
Z3NDaGVja0FyaXR5RW50cnlQb2ludDsKLSAgICBDb2RlUHRyIG1fc3RhY2tBcmdzQXJpdHlPS0Vu
dHJ5UG9pbnQ7Ci0gICAgQ29kZVB0ciBtX3N0YWNrQXJnc0NoZWNrQXJpdHlFbnRyeXBvaW50Owor
ICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50cnlwb2ludDsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVy
LmNwcAppbmRleCA5NTQ2M2MzZDIwMGNhMDRkZDJlYzU2MmQzYjlhOGM3MDA5MmExMzJkLi5kY2Yz
ZGFkMWQwMjdkNzBjZjUxNGQyZDg3M2Y4ZWM1ZDA2NDUwNWQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCkBAIC03Niw3ICs3Niw3IEBAIGJvb2wg
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgICAgIGR1bXBEaXNhc3Nl
bWJseSwgKmIzQ29kZUxpbmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBCMyBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRD
b2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CiAKLSAgICBqaXRDb2RlLT5pbml0aWFsaXplRW50cnlw
b2ludFRodW5rKAorICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgK
ICAgICAgICAgRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJseSwg
KmVudHJ5cG9pbnRMaW5rQnVmZmVyLAogICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVu
ayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCks
IGZ1bmN0aW9uKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
aW5rLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggZjk0
NDk4NDY3NmQ3ZWU5MGFlMjkwYTcwYTEyNTBkMmMyZjM5MjBhYi4uZDExYjJhOWI2N2ZmODhiNzFm
M2ViNjA4YTVmOTVjYzFlMjUwZmYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsu
Y3BwCkBAIC0xMjcsMTEwICsxMjcsMTQgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAK
ICAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5tb2RlKSB7CiAgICAgY2FzZSBGVExNb2RlOiB7Ci0g
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmlsbFJlZ2lzdGVyc0FuZENvbnRpbnVlTWFp
blBhdGg7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgdG9NYWluUGF0aDsKLQotICAg
ICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKTsKLSAgICAgICAgdW5zaWduZWQgbWF4UmVnaXN0ZXJBcmd1
bWVudENvdW50ID0gc3RkOjptaW4obnVtUGFyYW1ldGVycywgTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUyk7Ci0KLSAgICAgICAgR1BSUmVnIGFyZ0NvdW50UmVnID0gYXJn
dW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKTsKLQotICAgICAgICBDQ2FsbEhlbHBlcnM6
OkxhYmVsIHJlZ2lzdGVyQXJndW1lbnRzRW50cnlwb2ludHNbTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUyArIDFdOwotCi0gICAgICAgIGlmIChudW1QYXJhbWV0ZXJzIDwg
TlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUykgewotICAgICAgICAgICAg
Ly8gU3BpbGwgYW55IGV4dHJhIHJlZ2lzdGVyIGFyZ3VtZW50cyBwYXNzZWQgdG8gZnVuY3Rpb24g
b250byB0aGUgc3RhY2suCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gTlVN
QkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyAtIDE7IGFyZ0luZGV4ID49IG51
bVBhcmFtZXRlcnM7IGFyZ0luZGV4LS0pIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlckFyZ3Vt
ZW50c0VudHJ5cG9pbnRzW2FyZ0luZGV4ICsgMV0gPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAg
ICAgICBqaXQuZW1pdFB1dEFyZ3VtZW50VG9DYWxsRnJhbWVCZWZvcmVQcm9sb2d1ZShhcmd1bWVu
dFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCksIGFyZ0luZGV4KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OlJlZ0FyZ3NF
eHRyYSk7Ci0gICAgICAgICAgICB0b01haW5QYXRoLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgY29udGludWVUb0FyaXR5Rml4
dXA7Ci0KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFja0FyZ3NDaGVja0FyaXR5RW50
cnkgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6U3Rh
Y2tBcmdzQXJpdHkpOwotICAgICAgICBqaXQubG9hZDMyKGZyYW1lLndpdGhPZmZzZXQoc2l6ZW9m
KFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBHUFJJbmZvOjpyZWdU
MSk7Ci0gICAgICAgIGNvbnRpbnVlVG9Bcml0eUZpeHVwLmFwcGVuZChqaXQuYnJhbmNoMzIoCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LCBHUFJJbmZvOjpyZWdUMSwKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bVBhcmFtZXRlcnMpKSk7Ci0KLSNpZiBF
TkFCTEUoVk1fQ09VTlRFUlMpCi0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51ZVRv
U3RhY2tBcml0eU9rID0gaml0Lmp1bXAoKTsKLSNlbmRpZgotCi0gICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgc3RhY2tBcmdzQXJpdHlPS0VudHJ5ID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAg
aW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6U3RhY2tBcmdzQXJpdHkpOwotCi0jaWYgRU5BQkxF
KFZNX0NPVU5URVJTKQotICAgICAgICBjb250aW51ZVRvU3RhY2tBcml0eU9rLmxpbmsoJmppdCk7
Ci0jZW5kaWYKLQotICAgICAgICAvLyBMb2FkIGFyZ3VtZW50IHZhbHVlcyBpbnRvIGFyZ3VtZW50
IHJlZ2lzdGVycwotCi0gICAgICAgIC8vIEZJWE1FOiBXb3VsZCBsaWtlIHRvIGVsaW1pbmF0ZSB0
aGVzZSB0byBsb2FkLCBidXQgd2UgY3VycmVudGx5IGNhbid0IGp1bXAgaW50bwotICAgICAgICAv
LyB0aGUgQjMgY29tcGlsZWQgY29kZSBhdCBhbiBhcmJpdHJhcnkgcG9pbnQgZnJvbSB0aGUgc2xv
dyBlbnRyeSB3aGVyZSB0aGUKLSAgICAgICAgLy8gcmVnaXN0ZXJzIGFyZSBzdG9yZWQgdG8gdGhl
IHN0YWNrLgotICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9s
b2d1ZShDYWxsRnJhbWVTbG90OjpjYWxsZWUsIGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSk7
Ci0gICAgICAgIGppdC5lbWl0R2V0UGF5bG9hZEZyb21DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9s
b2d1ZShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBhcmd1bWVudFJlZ2lzdGVyRm9yQXJn
dW1lbnRDb3VudCgpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJn
SW5kZXggPCBtYXhSZWdpc3RlckFyZ3VtZW50Q291bnQ7IGFyZ0luZGV4KyspCi0gICAgICAgICAg
ICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVBcmd1bWVudEJlZm9yZVByb2xvZ3VlKGFyZ0luZGV4
LCBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCkpOwotCi0gICAg
ICAgIHRvTWFpblBhdGguYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgcmVnaXN0ZXJBcmdzQ2hlY2tBcml0eUVudHJ5ID0gaml0LmxhYmVsKCk7Ci0gICAg
ICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OlJlZ0FyZ3NBcml0eSk7Ci0KLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBjb250aW51ZVRvUmVnaXN0ZXJBcml0eUZpeHVwOwotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGNoZWNrRm9yRXh0cmFSZWdpc3RlckFyZ3VtZW50czsK
LQotICAgICAgICBpZiAobnVtUGFyYW1ldGVycyA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdV
TUVOVF9SRUdJU1RFUlMpIHsKLSAgICAgICAgICAgIHRvTWFpblBhdGguYXBwZW5kKGppdC5icmFu
Y2gzMigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkVxdWFsLCBhcmdDb3VudFJlZywg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtUGFyYW1ldGVycykpKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlVG9SZWdpc3RlckFyaXR5Rml4dXAuYXBwZW5kKGppdC5icmFuY2gzMigKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LCBhcmdDb3VudFJlZywgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobnVtUGFyYW1ldGVycykpKTsKLSAgICAgICAgICAgIC8vICBGYWxsIHRo
cm91Z2ggdG8gdGhlICJleHRyYSByZWdpc3RlciBhcml0eSIgY2FzZS4KLQotICAgICAgICAgICAg
Y2hlY2tGb3JFeHRyYVJlZ2lzdGVyQXJndW1lbnRzID0gaml0LmxhYmVsKCk7Ci0gICAgICAgICAg
ICAvLyBTcGlsbCBhbnkgZXh0cmEgcmVnaXN0ZXIgYXJndW1lbnRzIHBhc3NlZCB0byBmdW5jdGlv
biBvbnRvIHRoZSBzdGFjay4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSBu
dW1QYXJhbWV0ZXJzOyBhcmdJbmRleCA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9S
RUdJU1RFUlM7IGFyZ0luZGV4KyspIHsKLSAgICAgICAgICAgICAgICB0b01haW5QYXRoLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIGFyZ0NvdW50UmVnLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhcmdJbmRleCkpKTsKLSAgICAgICAgICAgICAgICBq
aXQuZW1pdFB1dEFyZ3VtZW50VG9DYWxsRnJhbWVCZWZvcmVQcm9sb2d1ZShhcmd1bWVudFJlZ2lz
dGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCksIGFyZ0luZGV4KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6UmVnQXJnc0V4dHJh
KTsKLSAgICAgICAgICAgIHRvTWFpblBhdGguYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHRvTWFpblBhdGguYXBwZW5kKGppdC5icmFuY2gzMigKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgYXJnQ291bnRSZWcsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG51bVBhcmFtZXRlcnMpKSk7Ci0KLSNpZiBFTkFCTEUoVk1f
Q09VTlRFUlMpCi0gICAgICAgIGNvbnRpbnVlVG9SZWdpc3RlckFyaXR5Rml4dXAuYXBwZW5kKGpp
dC5qdW1wKCkpOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKG51bVBhcmFtZXRlcnMgPiAwKSB7Ci0g
ICAgICAgICAgICAvLyAgVGhlcmUgc2hvdWxkIGFsd2F5cyBiZSBhICJ0aGlzIiBwYXJhbWV0ZXIu
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHJlZ2lzdGVyQXJndW1lbnRzTmVlZEFy
aXR5Rml4dXAgPSBqaXQubGFiZWwoKTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJ
bmRleCA9IDE7IGFyZ0luZGV4IDwgbnVtUGFyYW1ldGVycyAmJiBhcmdJbmRleCA8PSBtYXhSZWdp
c3RlckFyZ3VtZW50Q291bnQ7IGFyZ0luZGV4KyspCi0gICAgICAgICAgICAgICAgcmVnaXN0ZXJB
cmd1bWVudHNFbnRyeXBvaW50c1thcmdJbmRleF0gPSByZWdpc3RlckFyZ3VtZW50c05lZWRBcml0
eUZpeHVwOwotICAgICAgICB9Ci0KLSNpZiBFTkFCTEUoVk1fQ09VTlRFUlMpCi0gICAgICAgIGlu
Y3JlbWVudENvdW50ZXIoJmppdCwgVk06OlJlZ0FyZ3NBcml0eSk7Ci0jZW5kaWYKLQotICAgICAg
ICBjb250aW51ZVRvUmVnaXN0ZXJBcml0eUZpeHVwLmxpbmsoJmppdCk7Ci0KLSAgICAgICAgaml0
LnNwaWxsQXJndW1lbnRSZWdpc3RlcnNUb0ZyYW1lQmVmb3JlUHJvbG9ndWUobWF4UmVnaXN0ZXJB
cmd1bWVudENvdW50KTsKLQotICAgICAgICBjb250aW51ZVRvQXJpdHlGaXh1cC5saW5rKCZqaXQp
OwotCi0gICAgICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OkFyaXR5Rml4dXBSZXF1aXJl
ZCk7Ci0KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtYWluUGF0aEp1bXBzOworICAg
IAorICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgZnJhbWUud2l0aE9mZnNldChzaXpl
b2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksCisgICAgICAgICAg
ICBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIG1haW5QYXRoSnVtcHMuYXBwZW5kKGppdC5icmFu
Y2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKSkpOwogICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgJnZtLnRvcENhbGxGcmFtZSk7CkBAIC0yNTEsMjAgKzE1NSwxMSBAQCB2b2lkIGxpbmso
U3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKLSAgICAgICAgZmlsbFJlZ2lzdGVyc0FuZENvbnRpbnVlTWFpblBhdGguYXBwZW5kKGpp
dC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICAgICAgbWFpblBhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhl
bHBlcnM6Olplcm8sIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZp
eHVwID0gaml0LmNhbGwoKTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0K
LSAgICAgICAgZmlsbFJlZ2lzdGVyc0FuZENvbnRpbnVlTWFpblBhdGguYXBwZW5kKGppdC5qdW1w
KCkpOwotCi0gICAgICAgIGZpbGxSZWdpc3RlcnNBbmRDb250aW51ZU1haW5QYXRoLmxpbmtUbyhz
dGFja0FyZ3NBcml0eU9LRW50cnksICZqaXQpOwotCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHJlZ2lzdGVyRW50cnlOb0FyaXR5ID0gaml0Lmxh
YmVsKCk7Ci0gICAgICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OlJlZ0FyZ3NOb0FyaXR5
KTsKLSAgICAgICAgdG9NYWluUGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0jZW5kaWYKKyAgICAg
ICAgbWFpblBhdGhKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgbGlua0J1ZmZl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4odm0sIGppdCwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxs
b2NhdGUoKSkgewpAQCAtMjc0LDM1ICsxNjksOSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
ICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXND
b25zdHJ1Y3RvciA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxs
QXJpdHlDaGVjayk7CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlv
bkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVy
RnJhbWUpOwogICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlv
blB0cigodm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLSAgICAgICAgbGlua0J1ZmZlci0+bGluayh0b01haW5QYXRoLCBDb2Rl
TG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
KSkpOwotCi0gICAgICAgIHN0YXRlLmppdENvZGUtPnNldEVudHJ5Rm9yKFN0YWNrQXJnc011c3RD
aGVja0FyaXR5LCBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YWNrQXJnc0NoZWNrQXJpdHlFbnRy
eSkpOwotICAgICAgICBzdGF0ZS5qaXRDb2RlLT5zZXRFbnRyeUZvcihTdGFja0FyZ3NBcml0eUNo
ZWNrTm90UmVxdWlyZWQsIGxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhY2tBcmdzQXJpdHlPS0Vu
dHJ5KSk7CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wcywgQ29kZUxvY2F0
aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsK
IAotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IG1haW5FbnRyeSA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YocmVnaXN0ZXJFbnRyeU5vQXJpdHkp
OwotI2Vsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5FbnRyeSA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0
aW9uKSk7Ci0jZW5kaWYKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+c2V0RW50cnlGb3IoUmVnaXN0
ZXJBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkLCBtYWluRW50cnkpOwotCi0gICAgICAgIGlmIChj
aGVja0ZvckV4dHJhUmVnaXN0ZXJBcmd1bWVudHMuaXNTZXQoKSkKLSAgICAgICAgICAgIHN0YXRl
LmppdENvZGUtPnNldEVudHJ5Rm9yKFJlZ2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdzLCBsaW5r
QnVmZmVyLT5sb2NhdGlvbk9mKGNoZWNrRm9yRXh0cmFSZWdpc3RlckFyZ3VtZW50cykpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5zZXRFbnRyeUZvcihSZWdpc3Rl
ckFyZ3NQb3NzaWJsZUV4dHJhQXJncywgbWFpbkVudHJ5KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgIHN0YXRlLmppdENvZGUtPnNldEVudHJ5Rm9yKFJlZ2lzdGVyQXJnc011c3RDaGVj
a0FyaXR5LCBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHJlZ2lzdGVyQXJnc0NoZWNrQXJpdHlFbnRy
eSkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgYXJnQ291bnQgPSAxOyBhcmdDb3VudCA8PSBO
VU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdDb3VudCsrKSB7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnk7Ci0gICAgICAgICAgICBpZiAo
YXJnQ291bnQgPT0gbnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgICAgICBlbnRyeSA9IG1haW5F
bnRyeTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyQXJndW1lbnRzRW50cnlwb2ludHNb
YXJnQ291bnRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgZW50cnkgPSBsaW5rQnVmZmVyLT5s
b2NhdGlvbk9mKHJlZ2lzdGVyQXJndW1lbnRzRW50cnlwb2ludHNbYXJnQ291bnRdKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeSA9IGxpbmtCdWZmZXItPmxvY2F0aW9u
T2YocmVnaXN0ZXJBcmdzQ2hlY2tBcml0eUVudHJ5KTsKLSAgICAgICAgICAgIHN0YXRlLmppdENv
ZGUtPnNldEVudHJ5Rm9yKEpJVEVudHJ5UG9pbnRzOjpyZWdpc3RlckVudHJ5VHlwZUZvckFyZ3Vt
ZW50Q291bnQoYXJnQ291bnQpLCBlbnRyeSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGUuaml0
Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIApAQCAtMzEyLDIwICsxODEsNyBAQCB2b2lkIGxpbmsoU3RhdGUm
IHN0YXRlKQogICAgICAgICAvLyBwb2ludCB3ZSd2ZSBldmVuIGRvbmUgdGhlIHN0YWNrIGNoZWNr
LiBCYXNpY2FsbHkgd2UganVzdCBoYXZlIHRvIG1ha2UgdGhlCiAgICAgICAgIC8vIGNhbGwgdG8g
dGhlIEIzLWdlbmVyYXRlZCBjb2RlLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YXJ0
ID0gaml0LmxhYmVsKCk7Ci0KICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0K
LSAgICAgICAgLy8gTG9hZCBhcmd1bWVudCB2YWx1ZXMgaW50byBhcmd1bWVudCByZWdpc3RlcnMK
LQotICAgICAgICAvLyBGSVhNRTogV291bGQgbGlrZSB0byBlbGltaW5hdGUgdGhlc2UgdG8gbG9h
ZCwgYnV0IHdlIGN1cnJlbnRseSBjYW4ndCBqdW1wIGludG8KLSAgICAgICAgLy8gdGhlIEIzIGNv
bXBpbGVkIGNvZGUgYXQgYW4gYXJiaXRyYXJ5IHBvaW50IGZyb20gdGhlIHNsb3cgZW50cnkgd2hl
cmUgdGhlCi0gICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgc3RvcmVkIHRvIHRoZSBzdGFjay4KLSAg
ICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkpOwotICAgICAgICBq
aXQuZW1pdEdldFBheWxvYWRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCwgYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQo
KSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSAmJiBhcmdJbmRl
eCA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlM7IGFyZ0luZGV4Kysp
Ci0gICAgICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVBcmd1bWVudEJlZm9yZVByb2xv
Z3VlKGFyZ0luZGV4LCBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRl
eCkpOwotCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBtYWluUGF0aEp1bXAgPSBqaXQuanVt
cCgpOwogICAgICAgICAKICAgICAgICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlu
a0J1ZmZlcj4odm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAt
MzM1LDcgKzE5MSw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIH0KICAgICAg
ICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CiAKLSAgICAgICAgc3Rh
dGUuaml0Q29kZS0+c2V0RW50cnlGb3IoUmVnaXN0ZXJBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVk
LCBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXJ0KSk7CisgICAgICAgIHN0YXRlLmppdENvZGUt
PmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXJ0KSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggZDAwNjgzYjQxYzUzNmU5NWMzODAwMmEy
ZDk3M2JjNzI5M2VjMTBlYi4uM2NmOGQyZDA0YTFmM2UwNzE1ZTgxZGMxM2YzMDViZjBmMDI5ZjIw
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtMTk2LDEwICsxOTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3Rh
bnQobV90YWdUeXBlTnVtYmVyLT5rZXkoKSk7CiAgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3Rh
bnQobV90YWdNYXNrLT5rZXkoKSk7CiAgICAgICAgIAotICAgICAgICAvLyBTdG9yZSBvdXQgY2Fs
bGVlIGFuZCBhcmd1bWVudCBjb3VudCBmb3IgcG9zc2libGUgT1NSIGV4aXQuCi0gICAgICAgIG1f
b3V0LnN0b3JlNjQobV9vdXQuYXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudFJlZ2lzdGVyRm9yQ2Fs
bGVlKCkpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwotICAgICAgICBtX291
dC5zdG9yZTMyKG1fb3V0LmFyZ3VtZW50UmVnaXN0ZXJJbnQzMihhcmd1bWVudFJlZ2lzdGVyRm9y
QXJndW1lbnRDb3VudCgpKSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSk7Ci0KICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoY29kZUJsb2Nr
KCkpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwogCiAgICAgICAgIC8v
IFN0YWNrIE92ZXJmbG93IENoZWNrLgpAQCAtMjUxLDM0ICsyNDcsMjAgQEAgcHVibGljOgogICAg
ICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFy
KCk7CiAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxh
YmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKLQotICAgICAgICBWZWN0
b3I8Tm9kZSosIDg+IGFyZ3VtZW50Tm9kZXM7Ci0gICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IGFy
Z3VtZW50VmFsdWVzOwotCi0gICAgICAgIGFyZ3VtZW50Tm9kZXMucmVzaXplKGNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCkpOwotICAgICAgICBhcmd1bWVudFZhbHVlcy5yZXNpemUoY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSk7Ci0KLSAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBo
LmJsb2NrKDApOwotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1f
YXJndW1lbnRzRm9yQ2hlY2tpbmdbaV07CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5hcmd1bWVudChpKSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNo
ZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKKyAg
ICAgICAgfQorICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICBtX29yaWdpbiA9IE5v
ZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRzW2ldOwogICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBudWxscHRyOwot
Ci0gICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgIGlmIChpIDwgTlVNQkVS
X09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUykgewotICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9IEF2YWlsYWJpbGl0eShu
b2RlKTsKLSAgICAgICAgICAgICAgICAgICAganNWYWx1ZSA9IG1fb3V0LmFyZ3VtZW50UmVnaXN0
ZXIoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG5vZGUtPmFyZ3VtZW50UmVnaXN0ZXJJbmRl
eCgpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShub2RlLCBqc1ZhbHVlKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBvcGVyYW5kKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExW
YWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5o
YXNBcmd1bWVudFJlZ2lzdGVySW5kZXgoKSB8fCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5tYWNoaW5lTG9jYWwpOworICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIGhhY2ssIGJ1dCBpdCdzIGFuIGVmZmVjdGl2ZSBvbmUuIEl0IGFs
bG93cyB1cyB0byBkbyBDU0Ugb24gdGhlCiAgICAgICAgICAgICAgICAgLy8gcHJpbW9yZGlhbCBs
b2FkIG9mIGFyZ3VtZW50cy4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIEdldExvY2FsIHRoYXQgZ290
IHB1dCBpbgpAQCAtMjg2LDIxICsyNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8g
c2hvdWxkIGhvbGQgdHJ1ZS4KICAgICAgICAgICAgICAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVz
LmFkZChub2RlLCBqc1ZhbHVlKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXJndW1l
bnROb2Rlc1tpXSA9IG5vZGU7Ci0gICAgICAgICAgICBhcmd1bWVudFZhbHVlc1tpXSA9IGpzVmFs
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtX25vZGUgPSBudWxscHRyOwotICAgICAgICBtX29y
aWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhcmd1bWVudE5vZGVzW2ldOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gYXJndW1lbnRWYWx1ZXNbaV07Ci0KICAg
ICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSkgewogICAgICAg
ICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CkBA
IC04NDUsOSArODEzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczoKICAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0QXJndW1lbnRS
ZWdpc3RlcjoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudFJlZ2lzdGVyKCk7Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRTY29wZToKICAgICAgICAgICAgIGNvbXBp
bGVHZXRTY29wZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01NDM3LDE2ICs1NDAyLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxl
R2V0QXJndW1lbnRSZWdpc3RlcigpCi0gICAgewotICAgICAgICAvLyBXZSBtaWdodCBoYXZlIGFs
cmVhZHkgaGF2ZSBhIHZhbHVlIGZvciB0aGlzIG5vZGUuCi0gICAgICAgIGlmIChMVmFsdWUgdmFs
dWUgPSBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzLmdldChtX25vZGUpKSB7Ci0gICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LmFyZ3VtZW50UmVnaXN0ZXIoR1BSSW5mbzo6dG9Bcmd1bWVudFJl
Z2lzdGVyKG1fbm9kZS0+YXJndW1lbnRSZWdpc3RlckluZGV4KCkpKSk7Ci0gICAgfQotICAgIAog
ICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKCkKICAgICB7CiAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTRnVuY3Rpb25f
c2NvcGUpKTsKQEAgLTU4NTksMTAgKzU4MTQsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyB0aGUg
Y2FsbC4KICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKIAotICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgY2FsbGVlIGdvZXMgaW50byBhcmd1bWVudFJlZ2lz
dGVyRm9yQ2FsbGVlKCkgYmVjYXVzZSB0aGF0J3Mgd2hlcmUKLSAgICAgICAgLy8gdGhlIHNsb3cg
cGF0aCB0aHVua3MgZXhwZWN0IHRoZSBjYWxsZWUgdG8gYmUuCi0gICAgICAgIEdQUlJlZyBjYWxs
ZWVSZWcgPSBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCk7Ci0gICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhjYWxsZWVSZWcp
KSk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29lcyBpbnRvIEdQUjAg
YmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHNsb3cgcGF0aCB0aHVua3MgZXhwZWN0IHRoZQorICAg
ICAgICAvLyBjYWxsZWUgdG8gYmUuCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKIAogICAg
ICAgICBhdXRvIGFkZEFyZ3VtZW50ID0gWyZdIChMVmFsdWUgdmFsdWUsIFZpcnR1YWxSZWdpc3Rl
ciByZWcsIGludCBvZmZzZXQpIHsKICAgICAgICAgICAgIGludHB0cl90IG9mZnNldEZyb21TUCA9
CkBAIC01ODcwLDE2ICs1ODI0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KG9m
ZnNldEZyb21TUCkpKTsKICAgICAgICAgfTsKIAotICAgICAgICBBcmd1bWVudHNMb2NhdGlvbiBh
cmdMb2NhdGlvbiA9IGFyZ3VtZW50c0xvY2F0aW9uRm9yKG51bUFyZ3MpOwotICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoY2Fs
bGVlUmVnKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUobV9v
dXQuY29uc3RJbnQzMihudW1BcmdzKSwgVmFsdWVSZXA6OnJlZyhhcmd1bWVudFJlZ2lzdGVyRm9y
QXJndW1lbnRDb3VudCgpKSkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1BcmdzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpIDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBp
KSksIFZhbHVlUmVwOjpyZWcoYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoaSkp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNW
YWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGkpLCAwKTsKLSAgICAgICAgfQorICAgICAgICBhZGRBcmd1bWVudChqc0NhbGxl
ZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIDApOworICAgICAgICBh
ZGRBcmd1bWVudChtX291dC5jb25zdEludDMyKG51bUFyZ3MpLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIFBheWxvYWRPZmZzZXQpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQorICAgICAgICAgICAgYWRkQXJndW1l
bnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpLCAwKTsKIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKICAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kVmVjdG9yKGFyZ3VtZW50cyk7CkBAIC01OTA4LDExICs1ODU2LDkgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVC
bG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKIAotICAgICAgICAgICAgICAgIGluY3JlbWVudENv
dW50ZXIoJmppdCwgVk06OkZUTENhbGxlcik7Ci0KICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZVJlZywgdGFyZ2V0VG9DaGVj
aywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6
cmVnVDAsIHRhcmdldFRvQ2hlY2ssCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cigwKSk7CiAKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
ZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKQEAgLTU5MjAsMTMgKzU4NjYsMTMgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAKLSAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsK
ICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAKICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBD
b25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwK
LSAgICAgICAgICAgICAgICAgICAgYXJnTG9jYXRpb24sIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
YXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
b3JpZ2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CiAKICAgICAgICAgICAgICAgICBqaXQu
YWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigt
cGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCkBAIC01OTM1LDcgKzU4ODEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAg
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIudm0oKS5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikuZW50cnlGb3IoY2FsbExpbmtJbmZvLT5hcmd1bWVudHNMb2NhdGlvbigpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRD
YWxsTG9jYXRpb25zKApAQCAtNTk3OSwzOCArNTkyNSwyMCBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKICAgICAgICAgCi0g
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29lcyBpbnRvIGFyZ3VtZW50UmVn
aXN0ZXJGb3JDYWxsZWUoKSBiZWNhdXNlIHRoYXQncyB3aGVyZQotICAgICAgICAvLyB0aGUgc2xv
dyBwYXRoIHRodW5rcyBleHBlY3QgdGhlIGNhbGxlZSB0byBiZS4KLSAgICAgICAgR1BSUmVnIGNh
bGxlZVJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKTsKLSAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKGNhbGxlZVJl
ZykpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGpzQ2FsbGVl
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgICAgIGlmICghaXNUYWlsKSB7CiAgICAg
ICAgICAgICBhdXRvIGFkZEFyZ3VtZW50ID0gWyZdIChMVmFsdWUgdmFsdWUsIFZpcnR1YWxSZWdp
c3RlciByZWcsIGludCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXRG
cm9tU1AgPQogICAgICAgICAgICAgICAgICAgICAocmVnLm9mZnNldCgpIC0gQ2FsbGVyRnJhbWVB
bmRQQzo6c2l6ZUluUmVnaXN0ZXJzKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXQ7
CiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVl
LCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChvZmZzZXRGcm9tU1ApKSk7CiAgICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxs
ZWUsIFZhbHVlUmVwOjpyZWcoY2FsbGVlUmVnKSkpOwotI2lmIEVOQUJMRShDQUxMRVJfU1BJTExT
X0NBTExFRSkKKyAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkQXJndW1lbnQoanNDYWxsZWUs
IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCAwKTsKLSNlbmRpZgotICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKG1fb3V0LmNvbnN0SW50
MzIobnVtUGFzc2VkQXJncyksIFZhbHVlUmVwOjpyZWcoYXJndW1lbnRSZWdpc3RlckZvckFyZ3Vt
ZW50Q291bnQoKSkpKTsKLSNpZiBFTkFCTEUoQ0FMTEVSX1NQSUxMU19BUkdDT1VOVCkKICAgICAg
ICAgICAgIGFkZEFyZ3VtZW50KG1fb3V0LmNvbnN0SW50MzIobnVtUGFzc2VkQXJncyksIFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgUGF5bG9hZE9mZnNldCk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChpIDwgTlVNQkVS
X09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgICAgICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxICsgaSkpLCBWYWx1ZVJlcDo6cmVnKGFyZ3VtZW50UmVnaXN0ZXJGb3JG
dW5jdGlvbkFyZ3VtZW50KGkpKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCAwKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1B
bGxvY2F0ZWRBcmdzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA8IE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpCi0gICAgICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSksIFZhbHVlUmVwOjpyZWcoYXJndW1lbnRSZWdpc3RlckZvckZ1
bmN0aW9uQXJndW1lbnQoaSkpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBhZGRBcmd1bWVudChtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCAwKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyArK2kpCisgICAgICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCAw
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1B
bGxvY2F0ZWRBcmdzOyArK2kpCisgICAgICAgICAgICAgICAgYWRkQXJndW1lbnQobV9vdXQuY29u
c3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpKSwgMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKQogICAgICAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSArIGkpKSwgVmFsdWVSZXA6Oldhcm1BbnkpKTsKQEAgLTYwNTIsNyArNTk4
MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2Fs
cyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uZnJhbWVSZWdpc3RlckNvdW50OwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGFy
YW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3VtZW50c0luUmVnaXN0ZXJzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9y
bWF0Q2VsbCk7CiAgICAgICAgICAgICAgICAgICAgIHRvU2F2ZS5zZXQoY2FsbGVlR1BSKTsKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7
ICsraSkgewpAQCAtNjA3MSwxMSArNTk5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0
Y2hhYmxlSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFiZWwoKTsKLQotICAgICAgICAgICAg
ICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpGVExDYWxsZXIpOwotICAgICAgICAg
ICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpUYWlsQ2FsbCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OkRpcmVjdENhbGwpOwotCisg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwpAQCAt
NjA5Niw3ICs2MDE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAo
KS5saW5rVG8obWFpblBhdGgsICZqaXQpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBhcmd1bWVudHNMb2NhdGlvbkZvcihu
dW1QYXNzZWRBcmdzKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwsIG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBhc3NlZEFyZ3Mp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heE51bUFyZ3VtZW50
cyhudW1BbGxvY2F0ZWRBcmdzKTsKQEAgLTYxMTksOSArNjA0Miw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtYWluUGF0
aCA9IGppdC5sYWJlbCgpOwogCi0gICAgICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0
LCBWTTo6RlRMQ2FsbGVyKTsKLSAgICAgICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQs
IFZNOjpEaXJlY3RDYWxsKTsKLQogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwpAQCAtNjEzMyw3ICs2MDUz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxs
TGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwKLSAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzTG9jYXRpb25Gb3IobnVtUGFzc2VkQXJncyksIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhlY3V0YWJsZSk7
CiAgICAgICAgICAgICAgICAgaWYgKG51bUFsbG9jYXRlZEFyZ3MgPiBudW1QYXNzZWRBcmdzKQog
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heE51bUFyZ3VtZW50cyhudW1B
bGxvY2F0ZWRBcmdzKTsKQEAgLTYxNDQsMTEgKzYwNjQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBzbG93UGF0aCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzWDg2KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOyAv
LyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gbm9uQXJnR1BSMAotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25D
aGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBl
cnM6OkZhckp1bXBXaWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wb3Ao
Q0NhbGxIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksIGppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8o
bWFpblBhdGgsICZqaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCkBAIC02MTU3LDkgKzYwNzksNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93
UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBzbG93UGF0aExvY2F0aW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRKSVRDYWxs
VGh1bmtFbnRyeVN0dWIobGlua0RpcmVjdENhbGxUaHVua0dlbmVyYXRvcikuZW50cnlGb3IoY2Fs
bExpbmtJbmZvLT5hcmd1bWVudHNMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCgpLApAQCAtNjE5MSw4ICs2MTEwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBWZWN0b3I8
Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1lbnRzOwogCi0gICAgICAgIEdQUlJlZyBjYWxsZWVSZWcg
PSBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
Q29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhjYWxsZWVSZWcpKSk7Cisg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtQXJnczsgKytpKSB7CiAgICAgICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBsZXQg
dGhlIHNodWZmbGVyIGRvIGJveGluZyBmb3IgdXMsIGJ1dCBpdCdzIG5vdCBzdXBlciBjbGVhciB0
aGF0IHRoaXMKQEAgLTYyMjYsOSArNjE0NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5j
b21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKIAotICAgICAgICAgICAg
ICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OkZUTENhbGxlcik7Ci0gICAgICAgICAgICAg
ICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6VGFpbENhbGwpOwotCiAgICAgICAgICAgICAg
ICAgLy8gWWVzLCB0aGlzIGlzIHJlYWxseSBuZWNlc3NhcnkuIFlvdSBjb3VsZCB0aHJvdyBhbiBl
eGNlcHRpb24gaW4gYSBob3N0IGNhbGwgb24gdGhlCiAgICAgICAgICAgICAgICAgLy8gc2xvdyBw
YXRoLiBUaGF0J2xsIHJvdXRlIHVzIHRvIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoKSwgd2hpY2gg
dW53aW5kcyBzdGFydGluZwogICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIGNhbGwgc2l0ZSBp
bmRleCBvZiBvdXIgZnJhbWUuIEJhZCB0aGluZ3MgaGFwcGVuIGlmIGl0J3Mgbm90IHNldC4KQEAg
LTYyMzcsOSArNjE1Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7
Ci0gICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJndW1lbnRzSW5SZWdpc3RlcnMgPSB0cnVl
OwogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IHN0YXRlLT5qaXRDb2Rl
LT5jb21tb24uZnJhbWVSZWdpc3RlckNvdW50OwotICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZVJlZywgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihHUFJJbmZvOjpyZWdUMCwgRGF0YUZvcm1hdEpTKTsKIAogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkp
OwpAQCAtNjI1MCw3ICs2MTY0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlUmVnLCB0YXJnZXRU
b0NoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJ
bmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CkBAIC02MjYxLDE5ICs2MTc1LDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKIAogICAgICAg
ICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNsb3dQYXRoU2h1ZmZsZXIoaml0LCBzaHVmZmxl
RGF0YSk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxlci5zZXRDYWxsZWVKU1ZhbHVl
UmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogICAgICAgICAgICAgICAgIHNsb3dQ
YXRoU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAKLSAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKIAogICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsK
IAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
VGFpbENhbGwsIGFyZ3VtZW50c0xvY2F0aW9uRm9yKG51bUFyZ3MpLCBjb2RlT3JpZ2luLCBjYWxs
ZWVSZWcpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5r
SW5mbzo6VGFpbENhbGwsIGNvZGVPcmlnaW4sIEdQUkluZm86OnJlZ1QwKTsKIAogICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIudm0oKS5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
ZW50cnlGb3IoY2FsbExpbmtJbmZvLT5hcmd1bWVudHNMb2NhdGlvbigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25z
KApAQCAtNjM2Myw3ICs2Mjc4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgICAgICAgICAgICAgQXJn
dW1lbnRzTG9jYXRpb24gYXJndW1lbnRzTG9jYXRpb24gPSBTdGFja0FyZ3M7CiAKICAgICAgICAg
ICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lz
dGVycygpOwogICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNl
dDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CkBAIC02NTEzLDcgKzY0MjcsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAg
ICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIEFTU0VS
VCghdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6cmVnVDIpKTsKLSAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKQEAgLTY1MjEsNyAr
NjQzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIGFyZ3VtZW50c0xvY2F0aW9uLCBub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBHUFJJ
bmZvOjpyZWdUMCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCks
CkBAIC02NTMwLDcgKzY0NDQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0Nh
bGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRKSVRD
YWxsVGh1bmtFbnRyeVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuZW50cnlGb3IoU3RhY2tB
cmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjYzMSwxNSAr
NjU0NSwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5z
Y2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwogCi0g
ICAgICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6RlRMQ2FsbGVyKTsKLSAg
ICAgICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpDYWxsVmFyYXJncyk7Ci0g
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygp
KSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAKICAgICAgICAgICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJ
bmZvKCk7Ci0gICAgICAgICAgICAgICAgQXJndW1lbnRzTG9jYXRpb24gYXJndW1lbnRzTG9jYXRp
b24gPSBTdGFja0FyZ3M7CiAgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CiAKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJ
bmRleCA9IDE7CkBAIC02ODAwLDcgKzY3MTAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAg
ICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8p
LCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKGlzVGFpbENhbGwpCkBAIC02ODA4LDcgKzY3MTgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNh
bGxUeXBlLCBhcmd1bWVudHNMb2NhdGlvbiwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5
cGUsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTY4MTcs
NyArNjcyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldEpJVENhbGxUaHVua0Vu
dHJ5U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5lbnRyeUZvcihTdGFja0FyZ3MpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCkBAIC02ODg2LDE2ICs2Nzk2LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4
Y2VwdGlvbnMgPSBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcykt
Pmp1bXBzKGppdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5k
ZXgpOwotCi0gICAgICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6RlRMQ2Fs
bGVyKTsKLSAgICAgICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpDYWxsRXZh
bCk7Ci0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRl
eC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5j
b2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBTdGFja0FyZ3MsIG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBH
UFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggMDJiZmZlNDBkMzIzNDllYjNkNzA1ZmVhMGZh
OTljYjE0NmMzYTZmNC4uOWEzOTFlMzRiZjM0OGM0NTZkNzVkOTQyNmVhNDAzZmE5OTYwZDQ3MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKQEAgLTcxLDExICs3
MSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJc
biIpOwogICAgIAotICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZB
cmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJH
VU1FTlRfUkVHSVNURVJTCi0gICAgICAgIGlmIChhcmd1bWVudCA8IE5VTUJFUl9PRl9KU19GVU5D
VElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpCi0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgorICAg
IGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50
LS07KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gZXhlYy0+cih2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCk7
CiAgICAgICAgIEpTVmFsdWUgcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVzLmFyZ3VtZW50KGFy
Z3VtZW50KTsKICAgICAgICAgaWYgKHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUg
fHwgIWFyZ3VtZW50KQpAQCAtMTAzLDEyICs5OSw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgK
ICAgICB9CiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGVudHJ5Q29kZUJsb2NrKTsKLQot
I2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICB2b2lkKiBy
ZXN1bHQgPSBlbnRyeUNvZGUtPmFkZHJlc3NGb3JDYWxsKFJlZ2lzdGVyQXJnc0FyaXR5Q2hlY2tO
b3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSNlbHNlCi0gICAgdm9pZCogcmVzdWx0
ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbChTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWly
ZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0jZW5kaWYKKyAgICAKKyAgICB2b2lkKiByZXN1bHQg
PSBlbnRyeUNvZGUtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBk
YXRhTG9nKCIgICAgRW50cnkgd2lsbCBzdWNjZWVkLCBnb2luZyB0byBhZGRyZXNzIiwgUmF3UG9p
bnRlcihyZXN1bHQpLCAiXG4iKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmNwcAppbmRleCA2MmU2NGQ3NDQzYTRiMGEwMWNjN2M0MzgzNTZlMDRlZTMwYTMzYjE4Li5i
ZjIwOWIwNGM5NDRkOThlMWQ4YmVkNjFlMWQ4NTAxODdhNGJjMjcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC04OSwxNiArODksNiBAQCB2b2lkIE91dHB1dDo6
YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCiAgICAgbV9ibG9jayA9IGJsb2NrOwogfQogCi1M
VmFsdWUgT3V0cHV0Ojphcmd1bWVudFJlZ2lzdGVyKFJlZyByZWcpCi17Ci0gICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCByZWcp
OwotfQotCi1MVmFsdWUgT3V0cHV0Ojphcmd1bWVudFJlZ2lzdGVySW50MzIoUmVnIHJlZykKLXsK
LSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHJlZywgSW50MzIpOwotfQotCiBMVmFsdWUgT3V0cHV0OjpmcmFtZVBvaW50ZXIo
KQogewogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpGcmFtZVBvaW50ZXIsIG9yaWdpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCmluZGV4IGQxNDA3MmVhMjJlNmFlNzgzNTFiNGZjYWFjMjk1ODNkMmVlYWZkZjMuLmRhZWE3
ZDA1NzM5ZmE2NjY1YTI4MmI1YTI3NDdlYzE1NjU1MDk2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaApAQCAtOTgsOCArOTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRP
cmlnaW4oREZHOjpOb2RlKiBub2RlKSB7IG1fb3JpZ2luID0gbm9kZTsgfQogICAgIEIzOjpPcmln
aW4gb3JpZ2luKCkgeyByZXR1cm4gQjM6Ok9yaWdpbihtX29yaWdpbik7IH0KIAotICAgIExWYWx1
ZSBhcmd1bWVudFJlZ2lzdGVyKFJlZyByZWcpOwotICAgIExWYWx1ZSBhcmd1bWVudFJlZ2lzdGVy
SW50MzIoUmVnIHJlZyk7CiAgICAgTFZhbHVlIGZyYW1lUG9pbnRlcigpOwogCiAgICAgQjM6OlNs
b3RCYXNlVmFsdWUqIGxvY2tlZFN0YWNrU2xvdChzaXplX3QgYnl0ZXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCmluZGV4IDg0
ZTc0ODFlNmE5NmVmNWU1ZjdiZjE2NDQ3Njk3NTQ0ZDg4NzRmNjUuLmIyMDI4MjQ1MzhjNzUyNTY3
ZmNlYzVkODk4Zjg1YjE2MjA5ZjBlOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKQEAgLTI5NywyNCArMjk3LDE2IEBAIHZv
aWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiwgRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAg
ICAgYm9vbCBmb3VuZEZyYW1lID0gYWR2YW5jZUluZGV4SW5Mb2dUbyhjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpKTsKICAgICAgICAgICAg
IGJvb2wgaXNUYWlsRGVsZXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgSlNTY29wZSogc2NvcGUg
PSBudWxscHRyOwotICAgICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPndhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMoKSkgewotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
PnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc2NvcGUg
PSBjYWxsRnJhbWUtPnNjb3BlKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGUtPmluaGVyaXRzKEpTU2Nv
cGU6OmluZm8oKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jayAm
JiBjb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSAmJiBjb2RlQmxv
Y2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZSA9
IGNhbGxGcmFtZS0+c2NvcGUoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlLT5pbmhlcml0cyhKU1Njb3BlOjpp
bmZvKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRGcmFtZSkgewotICAgICAgICAg
ICAgICAgIGlmICghc2NvcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgc2NvcGUgPSBtX2xvZ1tp
bmRleEluTG9nXS5zY29wZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGUtPmluaGVyaXRzKEpTU2NvcGU6
OmluZm8oKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGhpc1Zh
bHVlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IG1fbG9n
W2luZGV4SW5Mb2ddLnRoaXNWYWx1ZTsKKyAgICAgICAgICAgICAgICBzY29wZSA9IG1fbG9nW2lu
ZGV4SW5Mb2ddLnNjb3BlOworICAgICAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGUtPmluaGVyaXRzKEpTU2NvcGU6OmluZm8oKSkp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9QdXNoLmFwcGVuZChGcmFtZShqc0Nhc3Q8
SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSksIGNhbGxGcmFtZSwgaXNUYWlsRGVsZXRlZCwg
dGhpc1ZhbHVlLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKSkp
OworICAgICAgICAgICAgdG9QdXNoLmFwcGVuZChGcmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNp
dG9yLT5jYWxsZWUoKSksIGNhbGxGcmFtZSwgaXNUYWlsRGVsZXRlZCwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSwgc2NvcGUsIGNvZGVCbG9jaywgY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkpKTsK
IAogICAgICAgICAgICAgaWYgKGluZGV4SW5Mb2cgPCBsb2dDdXJzb3JJbmRleAogICAgICAgICAg
ICAgICAgIC8vIFRoaXMgY29uZGl0aW9uIHByb3RlY3RzIHVzIGZyb20gdGhlIGNhc2Ugd2hlcmUg
YWR2YW5jZUluZGV4SW5Mb2dUbyBkaWRuJ3QgZmluZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IGM3MDBhMGVlNTY2YjdhNGI0NDRkNmEwNTFm
ZGE2MTdiNWNkYTNmYzAuLjRiNGNkOGNjZjdiNzQ1MzM3Y2FjMGI4OGQ1MGQ2NzUzMTU3MDkxMzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAg
LTYxNiwxMyArNjE2LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKQogCiB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbChDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFy
Q2FsbCgpOwogICAgIGFkZExpbmtUYXNrKAogICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgICAgIEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0ZvcigmbGlua0J1ZmZlci52bSgpLCAqaW5mbyk7Ci0g
ICAgICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFs
VGh1bmsuY29kZVJlZigpLCBsaW5rQnVmZmVyLnZtKCksIG51bGxwdHIsIHRydWUpKTsKLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh2aXJ0dWFsVGh1
bmsuZW50cnlGb3IoU3RhY2tBcmdzKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0ZvcigmbGlua0J1ZmZlci52bSgpLCAqaW5m
byk7CisgICAgICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2
aXJ0dWFsVGh1bmssIGxpbmtCdWZmZXIudm0oKSwgbnVsbHB0ciwgdHJ1ZSkpOworICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHZpcnR1YWxUaHVuay5j
b2RlKCkpKTsKICAgICAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCmluZGV4IDZhYTA5OTUxNmNlNTM0MDgzMjljMDc5ZjU1NTY5MmUxM2Rm
M2I4YmQuLjMzMThmZjgxZjYzMTcxZGNjNWRlZTlhZDYwM2FhOWZhOTA0MzNkYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNDE0LDg5ICs0MTQs
NiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBlbnVtIFNwaWxsUmVnaXN0ZXJUeXBl
IHsgU3BpbGxBbGwsIFNwaWxsRXhhY3RseSB9OwotCi0gICAgdm9pZCBzcGlsbEFyZ3VtZW50UmVn
aXN0ZXJzVG9GcmFtZUJlZm9yZVByb2xvZ3VlKHVuc2lnbmVkIG1pbmltdW1BcmdzVG9TcGlsbCA9
IDAsIFNwaWxsUmVnaXN0ZXJUeXBlIHNwaWxsVHlwZSA9IFNwaWxsQWxsKQotICAgIHsKLSNpZiBO
VU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgICAgIEp1bXBMaXN0
IGRvbmVTdG9yaW5nQXJnczsKLQotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZv
cmVQcm9sb2d1ZShhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCksIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdDb3VudFJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JB
cmd1bWVudENvdW50KCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVBy
b2xvZ3VlKGFyZ0NvdW50UmVnLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKLQotICAg
ICAgICB1bnNpZ25lZCBhcmdJbmRleCA9IDA7Ci0gICAgICAgIC8vIEFsd2F5cyBzcGlsbCAidGhp
cyIKLSAgICAgICAgbWluaW11bUFyZ3NUb1NwaWxsID0gc3RkOjptYXgobWluaW11bUFyZ3NUb1Nw
aWxsLCAxVSk7Ci0KLSAgICAgICAgZm9yICg7IGFyZ0luZGV4IDwgbWluaW11bUFyZ3NUb1NwaWxs
ICYmIGFyZ0luZGV4IDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUzsg
YXJnSW5kZXgrKykKLSAgICAgICAgICAgIGVtaXRQdXRBcmd1bWVudFRvQ2FsbEZyYW1lQmVmb3Jl
UHJvbG9ndWUoYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpLCBh
cmdJbmRleCk7Ci0KLSAgICAgICAgaWYgKHNwaWxsVHlwZSA9PSBTcGlsbEFsbCkgewotICAgICAg
ICAgICAgLy8gU3BpbGwgZXh0cmEgYXJncyBwYXNzZWQgdG8gZnVuY3Rpb24KLSAgICAgICAgICAg
IGZvciAoOyBhcmdJbmRleCA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RF
UlM7IGFyZ0luZGV4KyspIHsKLSAgICAgICAgICAgICAgICBkb25lU3RvcmluZ0FyZ3MuYXBwZW5k
KGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIGFyZ0NvdW50UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFyZ0luZGV4KSkpOwotICAgICAgICAgICAgICAgIGVt
aXRQdXRBcmd1bWVudFRvQ2FsbEZyYW1lQmVmb3JlUHJvbG9ndWUoYXJndW1lbnRSZWdpc3RlckZv
ckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpLCBhcmdJbmRleCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBkb25lU3RvcmluZ0FyZ3MubGluayh0aGlzKTsKLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShtaW5pbXVtQXJnc1RvU3BpbGwpOwotICAgICAgICBVTlVTRURf
UEFSQU0oc3BpbGxUeXBlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQgc3BpbGxBcmd1bWVu
dFJlZ2lzdGVyc1RvRnJhbWUodW5zaWduZWQgbWluaW11bUFyZ3NUb1NwaWxsID0gMCwgU3BpbGxS
ZWdpc3RlclR5cGUgc3BpbGxUeXBlID0gU3BpbGxBbGwpCi0gICAgewotI2lmIE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICAgICAgSnVtcExpc3QgZG9uZVN0b3Jp
bmdBcmdzOwotCi0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihhcmd1bWVudFJlZ2lz
dGVyRm9yQ2FsbGVlKCksIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgICAgIEdQUlJlZyBh
cmdDb3VudFJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50KCk7Ci0gICAgICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihhcmdDb3VudFJlZywgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBhcmdJbmRleCA9IDA7Ci0g
ICAgICAgIC8vIEFsd2F5cyBzcGlsbCAidGhpcyIKLSAgICAgICAgbWluaW11bUFyZ3NUb1NwaWxs
ID0gc3RkOjptYXgobWluaW11bUFyZ3NUb1NwaWxsLCAxVSk7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKDsgYXJnSW5kZXggPCBtaW5pbXVtQXJnc1RvU3BpbGwgJiYgYXJnSW5kZXggPCBOVU1CRVJf
T0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdJbmRleCsrKQotICAgICAgICAg
ICAgZW1pdFB1dEFyZ3VtZW50VG9DYWxsRnJhbWUoYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9u
QXJndW1lbnQoYXJnSW5kZXgpLCBhcmdJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc3Bp
bGxUeXBlID09IFNwaWxsQWxsKSB7Ci0gICAgICAgICAgICAvLyBTcGlsbCBleHRyYSBhcmdzIHBh
c3NlZCB0byBmdW5jdGlvbgotICAgICAgICAgICAgZm9yICg7IGFyZ0luZGV4IDwgTlVNQkVSX09G
X0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJnSW5kZXgrKykgewotICAgICAgICAg
ICAgICAgIGRvbmVTdG9yaW5nQXJncy5hcHBlbmQoYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93T3JFcXVhbCwgYXJnQ291bnRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYXJn
SW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dEFyZ3VtZW50VG9DYWxsRnJhbWUoYXJn
dW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpLCBhcmdJbmRleCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvbmVTdG9yaW5nQXJn
cy5saW5rKHRoaXMpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG1pbmltdW1BcmdzVG9T
cGlsbCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcGlsbFR5cGUpOwotI2VuZGlmCi0gICAgfQot
ICAgIAotICAgIHZvaWQgZmlsbEFyZ3VtZW50UmVnaXN0ZXJzRnJvbUZyYW1lQmVmb3JlUHJvbG9n
dWUoKQotICAgIHsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJT
Ci0gICAgICAgIEp1bXBMaXN0IGRvbmVMb2FkaW5nQXJnczsKLQotICAgICAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgYXJn
dW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKTsKLSAgICAgICAgR1BSUmVnIGFyZ0NvdW50UmVnID0g
YXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAgZW1pdEdldFBheWxv
YWRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCwgYXJnQ291bnRSZWcpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JF
R0lTVEVSUzsgYXJnSW5kZXgrKykgewotICAgICAgICAgICAgaWYgKGFyZ0luZGV4KSAvLyBBbHdh
eXMgbG9hZCAidGhpcyIKLSAgICAgICAgICAgICAgICBkb25lTG9hZGluZ0FyZ3MuYXBwZW5kKGJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIGFyZ0NvdW50UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFyZ0luZGV4KSkpOwotICAgICAgICAgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVBcmd1bWVudEJlZm9yZVByb2xvZ3VlKGFyZ0luZGV4LCBhcmd1bWVudFJlZ2lz
dGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBkb25lTG9hZGluZ0FyZ3MubGluayh0aGlzKTsKLSNlbmRpZgotICAgIH0KLQogI2lm
IENQVShYODZfNjQpIHx8IENQVShYODYpCiAgICAgc3RhdGljIHNpemVfdCBwcm9sb2d1ZVN0YWNr
UG9pbnRlckRlbHRhKCkKICAgICB7CkBAIC03MDcsMzEgKzYyNCw2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3Vl
U3RhY2tQb2ludGVyRGVsdGEoKSkpOwogICAgIH0KLQotICAgIHZvaWQgZW1pdFB1dEFyZ3VtZW50
VG9DYWxsRnJhbWVCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgdW5zaWduZWQgYXJndW1lbnQp
Ci0gICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgYXJndW1lbnQpICogc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVs
dGEoKSkpOwotICAgIH0KLQotICAgIHZvaWQgZW1pdFB1dEFyZ3VtZW50VG9DYWxsRnJhbWUoR1BS
UmVnIGZyb20sIHVuc2lnbmVkIGFyZ3VtZW50KQotICAgIHsKLSAgICAgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKGZyb20sIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3VtZW50
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJv
bG9ndWUoY29uc3QgaW50IGVudHJ5LCBHUFJSZWcgdG8pCi0gICAgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSksIHRv
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUFyZ3VtZW50QmVm
b3JlUHJvbG9ndWUodW5zaWduZWQgYXJndW1lbnQsIEdQUlJlZyB0bykKLSAgICB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpLCB0byk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgZW1pdEdldFBheWxvYWRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9n
dWUoY29uc3QgaW50IGVudHJ5LCBHUFJSZWcgdG8pCi0gICAgewotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHRvKTsK
LSAgICB9CiAjZWxzZQogICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJl
Zm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkpCiAgICAgewpAQCAtMTc2OCwxNCAr
MTY2MCw3IEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgd2FuZ3NJbnQ2
NEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CiAjZW5kaWYKLQot
I2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICB2b2lkIGluY3JlbWVudENvdW50ZXIoVk06OlZN
Q291bnRlclR5cGUgY291bnRlclR5cGUpCi0gICAgewotICAgICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mQ291bnRlcihjb3VudGVyVHlw
ZSkpKTsKLSAgICB9Ci0jZW5kaWYKLQorICAgIAogcHJvdGVjdGVkOgogICAgIFZNKiBtX3ZtOwog
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC0xNzg0LDEyICsxNjY5LDYgQEAgcHJvdGVj
dGVkOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4+IG1fZGVjb2RlZENvZGVNYXBzOwogfTsKIAotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykK
LSNkZWZpbmUgaW5jcmVtZW50Q291bnRlcihqaXQsIGNvdW50ZXJUeXBlKSAoaml0KS0+aW5jcmVt
ZW50Q291bnRlcihjb3VudGVyVHlwZSkKLSNlbHNlCi0jZGVmaW5lIGluY3JlbWVudENvdW50ZXIo
aml0LCBjb3VudGVyVHlwZSkgKCh2b2lkKTApCi0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWNoZWRSZWNvdmVyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
Y2hlZFJlY292ZXJ5LmNwcAppbmRleCA2ZGJlZjVlNDEyYjU3NmRiZDdlMWExYzNmYjBmNmYxMzRl
MGJhM2Y2Li5mNGFhY2M2YzgwZWU1NTA5MDg0Nzc4NTM2ZWM3YjA4NmMxODgyMzAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhY2hlZFJlY292ZXJ5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhY2hlZFJlY292ZXJ5LmNwcApAQCAtMzAsMjYgKzMw
LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgQ2FjaGVkUmVjb3Zlcnk6OmFkZFRhcmdl
dEpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKQotewotICAgIEFTU0VSVChtX3dh
bnRlZEZQUiA9PSBJbnZhbGlkRlBSUmVnKTsKLSAgICBzaXplX3QgZXhpc3RpbmcgPSBtX2dwclRh
cmdldHMuZmluZChqc1ZhbHVlUmVncyk7Ci0gICAgaWYgKGV4aXN0aW5nID09IFdURjo6bm90Rm91
bmQpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAobV9ncHJUYXJnZXRzLnNpemUo
KSA+IDAgJiYgbV9yZWNvdmVyeS5pc1NldCgpICYmIG1fcmVjb3ZlcnkuaXNJbkdQUigpKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB3ZSBhcmUgcmVjb3ZlcmluZyB0byB0aGUgc2FtZSBHUFIsIG1ha2Ug
dGhhdCBHUFIgdGhlIGZpcnN0IHRhcmdldC4KLSAgICAgICAgICAgIEdQUlJlZyBzb3VyY2VHUFIg
PSBtX3JlY292ZXJ5LmdwcigpOwotICAgICAgICAgICAgaWYgKGpzVmFsdWVSZWdzLmdwcigpID09
IHNvdXJjZUdQUikgewotICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgY3VycmVudCBmaXJz
dCBHUFIgYmVsb3cuCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncyht
X2dwclRhcmdldHNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgICAgIG1fZ3ByVGFyZ2V0c1swXSA9
IEpTVmFsdWVSZWdzKHNvdXJjZUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRp
ZgotICAgICAgICBtX2dwclRhcmdldHMuYXBwZW5kKGpzVmFsdWVSZWdzKTsKLSAgICB9Ci19Ci0K
IC8vIFdlIHByZWZlciBsb2FkaW5nIGRvdWJsZXMgYW5kIHVuZGV0ZXJtaW5lZCBKU1ZhbHVlcyBp
bnRvIEZQUnMKIC8vIGJlY2F1c2UgaXQgd291bGQgb3RoZXJ3aXNlIHVzZSB1cCBHUFJzLiAgVHdv
IGluIEpTVkFMVUUzMl82NC4KIGJvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUigpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhY2hlZFJlY292ZXJ5
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhY2hlZFJlY292ZXJ5LmgKaW5kZXggNDRl
Mzg4ZDJiYmMwNmQ1ZWFlYzIxNTZmNzU3Y2JkZGM2MzI1NTkxYi4uZjYyN2FjOTAxNTdhNDBjYjRh
YjRiNWFiZThiMGUzN2YzOTE2ODkyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWNoZWRSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fj
aGVkUmVjb3ZlcnkuaApAQCAtNTAsNyArNTAsNiBAQCBwdWJsaWM6CiAgICAgQ2FjaGVkUmVjb3Zl
cnkmIG9wZXJhdG9yPShDYWNoZWRSZWNvdmVyeSYmKSA9IGRlbGV0ZTsKIAogICAgIGNvbnN0IFZl
Y3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDE+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRzOyB9Ci0gICAgY29uc3QgVmVjdG9yPEpTVmFsdWVSZWdzLCAxPiYgZ3ByVGFyZ2V0cygpIGNv
bnN0IHsgcmV0dXJuIG1fZ3ByVGFyZ2V0czsgfQogCiAgICAgdm9pZCBhZGRUYXJnZXQoVmlydHVh
bFJlZ2lzdGVyIHJlZykKICAgICB7CkBAIC02OSwxMSArNjgsMTUgQEAgcHVibGljOgogICAgICAg
ICBtX3RhcmdldHMuY2xlYXIoKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFRhcmdldEpTVmFsdWVS
ZWdzKEpTVmFsdWVSZWdzKTsKKyAgICB2b2lkIHNldFdhbnRlZEpTVmFsdWVSZWdzKEpTVmFsdWVS
ZWdzIGpzVmFsdWVSZWdzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fd2FudGVkRlBSID09IElu
dmFsaWRGUFJSZWcpOworICAgICAgICBtX3dhbnRlZEpTVmFsdWVSZWdzID0ganNWYWx1ZVJlZ3M7
CisgICAgfQogCiAgICAgdm9pZCBzZXRXYW50ZWRGUFIoRlBSUmVnIGZwcikKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2dwclRhcmdldHMuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFtX3dh
bnRlZEpTVmFsdWVSZWdzKTsKICAgICAgICAgbV93YW50ZWRGUFIgPSBmcHI7CiAgICAgfQogCkBA
IC0xMTYsMjAgKzExOSwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFJlY292ZXJ5KFZhbHVl
UmVjb3ZlcnkgcmVjb3ZlcnkpIHsgbV9yZWNvdmVyeSA9IHJlY292ZXJ5OyB9CiAKLSAgICBKU1Zh
bHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9n
cHJUYXJnZXRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncygpOwot
Ci0gICAgICAgIHJldHVybiBtX2dwclRhcmdldHNbMF07Ci0gICAgfQorICAgIEpTVmFsdWVSZWdz
IHdhbnRlZEpTVmFsdWVSZWdzKCkgY29uc3QgeyByZXR1cm4gbV93YW50ZWRKU1ZhbHVlUmVnczsg
fQogCiAgICAgRlBSUmVnIHdhbnRlZEZQUigpIGNvbnN0IHsgcmV0dXJuIG1fd2FudGVkRlBSOyB9
CiBwcml2YXRlOgogICAgIFZhbHVlUmVjb3ZlcnkgbV9yZWNvdmVyeTsKKyAgICBKU1ZhbHVlUmVn
cyBtX3dhbnRlZEpTVmFsdWVSZWdzOwogICAgIEZQUlJlZyBtX3dhbnRlZEZQUiB7IEludmFsaWRG
UFJSZWcgfTsKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAxPiBtX3RhcmdldHM7Ci0gICAg
VmVjdG9yPEpTVmFsdWVSZWdzLCAxPiBtX2dwclRhcmdldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURh
dGEuaAppbmRleCAzM2Q5ZWJjZGU5Mjk2MTgyNmY4NjgwZDliODFlZDBhY2ZiYTI0ODE5Li5hOTg3
ZWFiOWY4YzE5YzNmYTdhOGEyOTU3YjM1Yjc0YThlZWI2MjFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCkBAIC0zOSw3ICszOSw2IEBA
IHB1YmxpYzoKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKICAgICBWZWN0b3I8VmFsdWVSZWNv
dmVyeT4gYXJnczsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJvb2wgYXJndW1lbnRzSW5SZWdp
c3RlcnMgeyBmYWxzZSB9OwogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVy
czsKICAgICBHUFJSZWcgdGFnVHlwZU51bWJlciB7IEludmFsaWRHUFJSZWcgfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA2MWJk
MTI4N2Q4MWRiOTRiZjNjNzFlM2ZkMmQzNDgwYTQwNWM3ZTYyLi43MjA5Zjg5ZjVjNmY2NjBmYjcx
Nzc5ZTkwODRkYTEyZWFkMTIxY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcApAQCAtNDIsOSArNDIsNiBAQCBDYWxsRnJhbWVTaHVmZmxl
cjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNo
dWZmbGVEYQogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUo
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50
Q291bnRUb0FsaWduRnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAsIG1fYXJndW1lbnRzSW5SZWdpc3RlcnMoZGF0YS5hcmd1bWVudHNJblJlZ2lzdGVycykK
LSNlbmRpZgogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxp
Z25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0Ojph
bGxSZWdpc3RlcnMoKSkKIHsKQEAgLTU3LDIxICs1NCwxMSBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6
Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZm
bGVEYQogICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKIAogICAgIEFTU0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2so
KSB8fCBkYXRhLmNhbGxlZS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgaWYgKGRhdGEuYXJndW1lbnRzSW5SZWdpc3RlcnMpCi0gICAgICAgIGFk
ZE5ldyhKU1ZhbHVlUmVncyhhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkpLCBkYXRhLmNhbGxl
ZSk7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgZGF0YS5jYWxsZWUpOwotICAgIAorICAgIGFkZE5ldyhWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgZGF0YS5jYWxsZWUpOworCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
QVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRhLmFyZ3NbaV0udmlydHVh
bFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAo
ZGF0YS5hcmd1bWVudHNJblJlZ2lzdGVycyAmJiBpIDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FS
R1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgICAgIGFkZE5ldyhKU1ZhbHVlUmVncyhhcmd1bWVu
dFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChpKSksIGRhdGEuYXJnc1tpXSk7Ci0gICAgICAg
IGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgYWRkTmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpLCBkYXRhLmFyZ3NbaV0pOworICAgICAgICBhZGROZXcodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSksIGRhdGEuYXJnc1tpXSk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTE5OCwxMyArMTg1LDggQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQotICAgICAg
ICBpZiAobmV3Q2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgaWYgKG5ld0NhY2hlZFJlY292ZXJ5
KQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgICAgICAiLCByZWcsICIgPC0gIiwgbmV3Q2Fj
aGVkUmVjb3ZlcnktPnJlY292ZXJ5KCkpOwotICAgICAgICAgICAgaWYgKG5ld0NhY2hlZFJlY292
ZXJ5LT5ncHJUYXJnZXRzKCkuc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgbmV3Q2FjaGVkUmVjb3ZlcnktPmdwclRhcmdldHMoKS5zaXplKCk7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIG5ld0NhY2hlZFJlY292ZXJ5
LT5ncHJUYXJnZXRzKClbaV0uZ3ByKCksICIgPC0gIiwgbmV3Q2FjaGVkUmVjb3ZlcnktPnJlY292
ZXJ5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgb3V0LnBy
aW50KCJcbiIpOwogICAgIH0KQEAgLTUxNCw3ICs0OTYsNyBAQCBib29sIENhbGxGcmFtZVNodWZm
bGVyOjp0cnlXcml0ZXMoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQogICAgIEFTU0VS
VChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKQogICAgICAgICB8fCBj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICBpZiAodmVyYm9z
ZSAmJiBjYWNoZWRSZWNvdmVyeS50YXJnZXRzKCkuc2l6ZSgpKQorICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nKCIgICAqIFN0b3JpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWNoZWRSZWNvdmVyeS50YXJnZXRzKCku
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGNhY2hlZFJl
Y292ZXJ5LnRhcmdldHMoKVtpXSB9OwpAQCAtNTIzLDkgKzUwNSw5IEBAIGJvb2wgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnRyeVdyaXRlcyhDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCiAgICAg
ICAgICAgICBkYXRhTG9nKCFpID8gIiBpbnRvICIgOiAiLCBhbmQgIiwgIk5FVyAiLCB0YXJnZXQp
OwogICAgICAgICBlbWl0U3RvcmUoY2FjaGVkUmVjb3ZlcnksIGFkZHJlc3NGb3JOZXcodGFyZ2V0
KSk7CiAgICAgICAgIHNldE5ldyh0YXJnZXQsIG51bGxwdHIpOwotICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQorICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgIGNhY2hlZFJlY292ZXJ5LmNsZWFyVGFyZ2V0cygp
OwogICAgIGlmICghY2FjaGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKSAmJiBjYWNoZWRS
ZWNvdmVyeS53YW50ZWRGUFIoKSA9PSBJbnZhbGlkRlBSUmVnKQogICAgICAgICBjbGVhckNhY2hl
ZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOwpAQCAtNjI0LDcgKzYwNiw3IEBA
IHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVBbnkoKQogewogICAgIEFTU0VSVCghaXNV
bmRlY2lkZWQoKSk7CiAKLSAgICBpbml0RGFuZ2VyRnJvbnRpZXIoKTsKKyAgICB1cGRhdGVEYW5n
ZXJGcm9udGllcigpOwogCiAgICAgLy8gRmlyc3QsIHdlIHRyeSB0byBzdG9yZSBhbnkgdmFsdWUg
dGhhdCBnb2VzIGFib3ZlIHRoZSBkYW5nZXIKICAgICAvLyBmcm9udGllci4gVGhpcyB3aWxsIG5l
dmVyIHVzZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB3ZSBhcmUgb25seQpAQCAtNzIwLDkgKzcwMiwx
MyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlQW55KCkKICAgICAgICAgQVNTRVJU
X1VOVVNFRCh3cml0ZXNPSywgd3JpdGVzT0spOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZhbGlkR1BSUmVnICYmIG1fbmV3UmVnaXN0
ZXJzW21fdGFnVHlwZU51bWJlcl0pCisgICAgICAgIHJlbGVhc2VHUFIobV90YWdUeXBlTnVtYmVy
KTsKKyNlbmRpZgorCiAgICAgLy8gSGFuZGxlIDIpIGJ5IGxvYWRpbmcgYWxsIHJlZ2lzdGVycy4g
V2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKICAgICAvLyB3cml0ZXMsIHNpbmNlIHRoZXkgaGF2ZSBi
ZWVuIHRha2VuIGNhcmUgb2YgYWJvdmUuCi0gICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgbV90YWdU
eXBlTnVtYmVyIHRvIHJlbWFpbiBsb2NrZWQgdG8gYm94IHdhbnRlZCByZWdpc3RlcnMuCiAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIiAgTG9hZGluZyB3YW50ZWQgcmVnaXN0ZXJz
IGludG8gcmVnaXN0ZXJzXG4iKTsKICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJl
ZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewpAQCAtNzU2LDIxICs3NDIsMTIg
QEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUFueSgpCiAKICAgICAvLyBXZSBuZWVk
IHRvIGhhbmRsZSA0KSBmaXJzdCBiZWNhdXNlIGl0IGltcGxpZXMgcmVsZWFzaW5nCiAgICAgLy8g
bV9uZXdGcmFtZUJhc2UsIHdoaWNoIGNvdWxkIGJlIGEgd2FudGVkIHJlZ2lzdGVyLgotICAgIC8v
IE5vdGUgdGhhdCB3ZSBkZWxheSBzZXR0aW5nIHRoZSBhcmd1bWVudCBjb3VudCByZWdpc3RlciBh
cyBpdCBuZWVkcyB0byBiZSByZWxlYXNlZCBpbiBzdGVwIDMuCiAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgIGRhdGFMb2coIiAgICogU3RvcmluZyB0aGUgYXJndW1lbnQgY291bnQgaW50byAiLCBW
aXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50IH0sICJcbiIpOwot
CiAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLAogICAg
ICAgICBhZGRyZXNzRm9yTmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQgfSkud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgaWYgKCFtX2FyZ3VtZW50c0luUmVnaXN0ZXJzKSB7Ci0jZW5kaWYKLSAgICAgICAgbV9q
aXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFyZ0NvdW50KCkpLAotICAg
ICAgICAgICAgYWRkcmVzc0Zvck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50IH0pLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgfQotI2VuZGlmCisgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKGFyZ0NvdW50KCkpLAorICAgICAgICBhZGRyZXNzRm9yTmV3KFZpcnR1YWxS
ZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgfSkud2l0aE9mZnNldChQYXls
b2FkT2Zmc2V0KSk7CiAKICAgICBpZiAoIWlzU2xvd1BhdGgoKSkgewogICAgICAgICBBU1NFUlQo
bV9uZXdGcmFtZUJhc2UgIT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
QEAgLTc5MCwyMyArNzY3LDYgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUFueSgp
CiAKICAgICAgICAgZW1pdERpc3BsYWNlKCpjYWNoZWRSZWNvdmVyeSk7CiAgICAgfQotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAvLyBGb3IgcmVjb3ZlcmllcyB3aXRoIG11bHRpcGxlIHJlZ2lz
dGVyIHRhcmdldHMsIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaXJzdCB0YXJnZXQgdG8gdGhl
Ci0gICAgLy8gcmVtYWluaW5nIHRhcmdldHMuCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJz
dCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKLSAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OwotICAg
ICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5IHx8IGNhY2hlZFJlY292ZXJ5LT5ncHJUYXJnZXRzKCku
c2l6ZSgpIDwgMikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdQUlJlZyBzb3Vy
Y2VHUFIgPSBjYWNoZWRSZWNvdmVyeS0+Z3ByVGFyZ2V0cygpWzBdLmdwcigpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IGNhY2hlZFJlY292ZXJ5LT5ncHJUYXJnZXRzKCkuc2l6ZSgp
OyBpKyspCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNvdXJjZUdQUiwgY2FjaGVkUmVjb3Zlcnkt
PmdwclRhcmdldHMoKVtpXS5ncHIoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fYXJndW1lbnRzSW5S
ZWdpc3RlcnMpCi0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihhcmdDb3VudCgpKSwgYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKSk7Ci0jZW5k
aWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmgKaW5kZXggYTI5ZTQyYWUyNDkyNmFmZjI0N2ZjYTYwNGVmZGQ0
ZTc2YjBjMjIxMi4uZjA5MThmY2VjOTJhMTk3N2VmMmI2YTVkZjQzZWEyMzUwM2ExNzk4NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaApAQCAtOTYs
NTcgKzk2LDE3IEBAIHB1YmxpYzoKICAgICAvLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3
aGVyZSB0aGUKICAgICAvLyBhcmd1bWVudHMvY2FsbGVlL2NhbGxlZS1zYXZlIHJlZ2lzdGVycyBh
cmUgYnkgdGFraW5nIGludG8KICAgICAvLyBhY2NvdW50IGFueSBzcGlsbGluZyB0aGF0IGFjcXVp
cmVHUFIoKSBjb3VsZCBoYXZlIGRvbmUuCi0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc25hcHNo
b3QoQXJndW1lbnRzTG9jYXRpb24gYXJndW1lbnRzTG9jYXRpb24pIGNvbnN0CisgICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc25hcHNob3QoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlz
VW5kZWNpZGVkKCkpOwogCiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAg
ICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgZGF0YS5hcmd1bWVudHNJblJlZ2lzdGVycyA9IGFyZ3VtZW50c0xvY2F0aW9uICE9IFN0
YWNrQXJnczsKLSNlbmRpZgotICAgICAgICBpZiAoYXJndW1lbnRzTG9jYXRpb24gPT0gU3RhY2tB
cmdzKQotICAgICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIHsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIFJlZyByZWcgeyBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkgfTsKLSAgICAg
ICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3Jl
Z10gfTsKLSAgICAgICAgICAgIGRhdGEuY2FsbGVlID0gY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lz
dGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRh
LmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwotCi0gICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5
PiByZWdpc3RlckFyZ1JlY292ZXJpZXM7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgLy8g
RmluZCBjYWNoZWQgcmVjb3ZlcmllcyBmb3IgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycy4KLSAgICAg
ICAgLy8gV2UgZG8gdGhpcyBoZXJlLCBiZWNhdXNlIGEgY2FjaGVkIHJlY292ZXJ5IG1heSBiZSB0
aGUgc291cmNlIGZvciBtdWx0aXBsZQotICAgICAgICAvLyBhcmd1bWVudCByZWdpc3RlcnMsIGJ1
dCBpdCBpcyBvbmx5IHN0b3JlZCBpbiBvbmUgbV9uZXdSZWdpc3RlciBpbmRleC4KLSAgICAgICAg
aWYgKGRhdGEuYXJndW1lbnRzSW5SZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1h
eEFyZ3VtZW50UmVnaXN0ZXIgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYXJnQ291
bnQoKSksIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpOwotICAgICAg
ICAgICAgcmVnaXN0ZXJBcmdSZWNvdmVyaWVzLnJlc2l6ZShtYXhBcmd1bWVudFJlZ2lzdGVyKTsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4QXJndW1lbnRSZWdpc3Rlcjsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgUmVnIHJlZyB7IGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5j
dGlvbkFyZ3VtZW50KGkpIH07Ci0gICAgICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hl
ZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OwotICAgICAgICAgICAgICAgIGlmIChj
YWNoZWRSZWNvdmVyeSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8ganNWYWx1ZVJl
ZyA6IGNhY2hlZFJlY292ZXJ5LT5ncHJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZWdpc3RlckFyZ1JlY292ZXJpZXNbanNGdW5jdGlvbkFyZ3VtZW50Rm9yQXJndW1lbnRSZWdp
c3Rlcihqc1ZhbHVlUmVnLmdwcigpKV0gPSBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAg
ICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNMb2NhdGlvbiA9PSBTdGFja0FyZ3MgfHwgaSA+PSBOVU1C
RVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKQotICAgICAgICAgICAgICAgIGRh
dGEuYXJnc1tpXSA9IGdldE5ldyh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSktPnJlY292
ZXJ5KCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBSZWcgcmVnIHsgYXJn
dW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoaSkgfTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJBcmdSZWNvdmVyaWVzW2ldKTsKLSAgICAgICAgICAgICAgICBkYXRhLmFy
Z3NbaV0gPSByZWdpc3RlckFyZ1JlY292ZXJpZXNbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCisgICAg
ICAgICAgICBkYXRhLmFyZ3NbaV0gPSBnZXROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkpLT5yZWNvdmVyeSgpOwogICAgICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJl
ZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewotICAgICAgICAgICAgaWYgKHJl
Zy5pc0dQUigpICYmIGFyZ3VtZW50c0xvY2F0aW9uICE9IFN0YWNrQXJncwotICAgICAgICAgICAg
ICAgICYmIEdQUkluZm86OnRvQXJndW1lbnRJbmRleChyZWcuZ3ByKCkpIDwgYXJndW1lbnRSZWdp
c3RlckluZGV4Rm9ySlNGdW5jdGlvbkFyZ3VtZW50KGFyZ0NvdW50KCkpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zl
cnkgeyBtX25ld1JlZ2lzdGVyc1tyZWddIH07CiAgICAgICAgICAgICBpZiAoIWNhY2hlZFJlY292
ZXJ5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDE2LDkgKzM3Niw2IEBAIHByaXZh
dGU6CiAKICAgICBpbnQgbV9hbGlnbmVkT2xkRnJhbWVTaXplOwogICAgIGludCBtX2FsaWduZWRO
ZXdGcmFtZVNpemU7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib29sIG1fYXJndW1lbnRzSW5S
ZWdpc3RlcnM7Ci0jZW5kaWYKIAogICAgIC8vIFRoaXMgaXMgdGhlIGRpc3RhbmNlLCBpbiBzbG90
cywgYmV0d2VlbiB0aGUgYmFzZSBvZiB0aGUgbmV3CiAgICAgLy8gZnJhbWUgYW5kIHRoZSBiYXNl
IG9mIHRoZSBvbGQgZnJhbWUuIEl0IGNvdWxkIGJlIG5lZ2F0aXZlIHdoZW4KQEAgLTQ2MCwyMiAr
NDE3LDE1IEBAIHByaXZhdGU6CiAgICAgYm9vbCB0cnlBY3F1aXJlVGFnVHlwZU51bWJlcigpOwog
I2VuZGlmCiAKLSAgICAvLyBUaGlzIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3Zl
cnkgZm9yIHRoZSB2YWx1ZSB0aGF0Ci0gICAgLy8gc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0
aGF0IHJlZ2lzdGVyLiBJbiBzb21lIGNhc2VzIHRoZXJlCi0gICAgLy8gYXJlIHJlY292ZXJpZXMg
dGhhdCBoYXZlIG11bHRpcGxlIHRhcmdldHMuIEZvciB0aG9zZSByZWNvdmVyaWVzLAotICAgIC8v
IG9ubHkgdGhlIGZpcnN0IHRhcmdldCByZWdpc3RlciBpbiB0aGUgbWFwIGhhcyB0aGUgcmVjb3Zl
cnkuCi0gICAgLy8gV2Ugb3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxl
IHRhcmdldHMgZm9yIG9uZQotICAgIC8vIHJlY292ZXJ5IHdoZXJlIG9uZSBvZiB0aG9zZSB0YXJn
ZXRzIGlzIGFsc28gdGhlIHNvdXJjZSByZWdpc3Rlci4KLSAgICAvLyBSZXN0b3JpbmcgdGhlIGZp
cnN0IHRhcmdldCBiZWNvbWVzIGEgbm9wIGFuZCBzaW1wbGlmaWVzIHRoZSBsb2dpYwotICAgIC8v
IG9mIHJlc3RvcmluZyB0aGUgcmVtYWluaW5nIHRhcmdldHMuCisgICAgLy8gVGhpcyBzdG9yZXMs
IGZvciBlYWNoIHJlZ2lzdGVyLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3ZlcnkKKyAgICAv
LyBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0IHJlZ2lz
dGVyLiBUaGUKKyAgICAvLyBvbmx5IHJlZ2lzdGVycyB0aGF0IGhhdmUgYSB0YXJnZXQgcmVjb3Zl
cnkgd2lsbCBiZSBjYWxsZWUtc2F2ZQorICAgIC8vIHJlZ2lzdGVycywgYXMgd2VsbCBhcyBwb3Nz
aWJseSBvbmUgSlNWYWx1ZVJlZ3MgZm9yIGhvbGRpbmcgdGhlCisgICAgLy8gY2FsbGVlLgogICAg
IC8vCiAgICAgLy8gT25jZSB0aGUgY29ycmVjdCB2YWx1ZSBoYXMgYmVlbiBwdXQgaW50byB0aGUg
cmVnaXN0ZXJzLCBhbmQKICAgICAvLyBjb250cmFyeSB0byB3aGF0IHdlIGRvIHdpdGggbV9uZXdG
cmFtZSwgd2Uga2VlcCB0aGUgZW50cnkgaW4KICAgICAvLyBtX25ld1JlZ2lzdGVycyB0byBzaW1w
bGlmeSBzcGlsbGluZy4KLSAgICAvLwotICAgIC8vIElmIGEgcmVjb3ZlcnkgaGFzIG11bHRpcGxl
IHRhcmdldCByZWdpc3RlcnMsIHdlIGNvcHkgdGhlIHZhbHVlCi0gICAgLy8gZnJvbSB0aGUgZmly
c3QgdGFyZ2V0IHJlZ2lzdGVyIHRvIHRoZSByZW1haW5pbmcgdGFyZ2V0IHJlZ2lzdGVycwotICAg
IC8vIGF0IHRoZSBlbmQgb2YgdGhlIHNodWZmbGluZyBwcm9jZXNzLgogICAgIFJlZ2lzdGVyTWFw
PENhY2hlZFJlY292ZXJ5Kj4gbV9uZXdSZWdpc3RlcnM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGVja0Z1bmN0b3I+CkBAIC02OTEsMTMgKzY0MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIEFT
U0VSVChqc1ZhbHVlUmVncyAmJiAhZ2V0TmV3KGpzVmFsdWVSZWdzKSk7CiAgICAgICAgIENhY2hl
ZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpT
VmFsdWVSZWdzKCkpIHsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS5pc0luR1BSKCkgJiYganNW
YWx1ZVJlZ3MuZ3ByKCkgPT0gcmVjb3ZlcnkuZ3ByKCkpIHsKLSAgICAgICAgICAgICAgICBtX25l
d1JlZ2lzdGVyc1tjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKS5ncHIoKV0gPSBu
dWxscHRyOwotICAgICAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLmdwcigp
XSA9IGNhY2hlZFJlY292ZXJ5OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLmdwcigpXSA9IGNhY2hlZFJlY292ZXJ5
OworICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpCisgICAg
ICAgICAgICBtX25ld1JlZ2lzdGVyc1tjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3Mo
KS5ncHIoKV0gPSBudWxscHRyOworICAgICAgICBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5n
cHIoKV0gPSBjYWNoZWRSZWNvdmVyeTsKICNlbHNlCiAgICAgICAgIGlmIChKU1ZhbHVlUmVncyBv
bGRSZWdzIHsgY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkgfSkgewogICAgICAg
ICAgICAgaWYgKG9sZFJlZ3MucGF5bG9hZEdQUigpKQpAQCAtNzEwLDcgKzY1Niw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmIChqc1ZhbHVlUmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQog
ICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MudGFnR1BSKCldID0gY2FjaGVk
UmVjb3Zlcnk7CiAjZW5kaWYKLSAgICAgICAgY2FjaGVkUmVjb3ZlcnktPmFkZFRhcmdldEpTVmFs
dWVSZWdzKGpzVmFsdWVSZWdzKTsKKyAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS0+d2Fu
dGVkSlNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIGNhY2hlZFJlY292ZXJ5LT5zZXRXYW50ZWRKU1Zh
bHVlUmVncyhqc1ZhbHVlUmVncyk7CiAgICAgfQogCiAgICAgdm9pZCBhZGROZXcoRlBSUmVnIGZw
ciwgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKQEAgLTgwOCwyMyArNzU1LDEzIEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiByZWcgPD0gZGFuZ2VyRnJvbnRpZXIoKTsKICAgICB9CiAKLSAgICB2
b2lkIGluaXREYW5nZXJGcm9udGllcigpCi0gICAgewotICAgICAgICBmaW5kRGFuZ2VyRnJvbnRp
ZXJGcm9tKGxhc3ROZXcoKSk7Ci0gICAgfQotCiAgICAgdm9pZCB1cGRhdGVEYW5nZXJGcm9udGll
cigpCiAgICAgewotICAgICAgICBmaW5kRGFuZ2VyRnJvbnRpZXJGcm9tKG1fZGFuZ2VyRnJvbnRp
ZXIgLSAxKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmREYW5nZXJGcm9udGllckZyb20oVmlydHVh
bFJlZ2lzdGVyIG5leHRSZWcpCi0gICAgewogICAgICAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkp
OwogCiAgICAgICAgIG1fZGFuZ2VyRnJvbnRpZXIgPSBmaXJzdE5ldygpIC0gMTsKLSAgICAgICAg
Zm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gbmV4dFJlZzsgcmVnID49IGZpcnN0TmV3KCk7IHJl
ZyAtPSAxKSB7Ci0gICAgICAgICAgICBpZiAoIWlzVmFsaWRPbGQobmV3QXNPbGQocmVnKSkgfHwg
IWdldE9sZChuZXdBc09sZChyZWcpKSkKKyAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gbGFzdE5ldygpOyByZWcgPj0gZmlyc3ROZXcoKTsgcmVnIC09IDEpIHsKKyAgICAgICAgICAg
IGlmICghZ2V0TmV3KHJlZykgfHwgIWlzVmFsaWRPbGQobmV3QXNPbGQocmVnKSkgfHwgIWdldE9s
ZChuZXdBc09sZChyZWcpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
ICAgbV9kYW5nZXJGcm9udGllciA9IHJlZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCmluZGV4IDg2YTBkZGVjMjgyYmQ1NDQyMzcwNzM2
MDVmYzljOWQ0MDg3MDM4NzQuLjJlZjZlZDExMTUzYTQ1NGVhNDgxYWY1YTBkNjk5YzdmZDQwOGZh
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
cjY0LmNwcApAQCAtMzIzLDggKzMyMyw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRE
aXNwbGFjZShDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRlZFJlZy5ncHIoKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRlZFJlZy5mcHIoKSk7Ci0gICAgICAgIERhdGFG
b3JtYXQgZm9ybWF0ID0gY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMgfHwgZm9ybWF0ID09
IERhdGFGb3JtYXRDZWxsKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTKTsKICAgICAgICAgdXBkYXRl
UmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksCiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblJl
Z2lzdGVyKHdhbnRlZFJlZywgRGF0YUZvcm1hdEpTKSk7CiAgICAgfSBlbHNlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HUFJJbmZvLmgKaW5kZXggODQxMzY3MzI4N2I4OGQ3YzU3NTA3N2UyZGNlYWI2
YzFiYmM2YTA5ZS4uM2Q2YTRjNmNlMjQ0ZjI0ZTM3NjVmYWY2NWE3NGE4N2IwNTgzYTZhYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKQEAgLTY5LDggKzY5LDggQEAgcHVibGljOgog
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQUlJl
ZzsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2dwciAh
PSBJbnZhbGlkR1BSUmVnOyB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0oSlNWYWx1ZVJlZ3Mgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IG90aGVyLm1fZ3ByOyB9Ci0gICAgYm9vbCBvcGVy
YXRvciE9KEpTVmFsdWVSZWdzIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShKU1ZhbHVlUmVncyBvdGhlcikgeyByZXR1cm4gbV9n
cHIgPT0gb3RoZXIubV9ncHI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3Ro
ZXIpIHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgCiAgICAgR1BSUmVnIGdwcigp
IGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9CiAgICAgR1BSUmVnIHRhZ0dQUigpIGNvbnN0IHsgcmV0
dXJuIEludmFsaWRHUFJSZWc7IH0KQEAgLTMzMSw3ICszMzEsNiBAQCBwcml2YXRlOgogCiAjaWYg
Q1BVKFg4NikKICNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyAwdQotI2RlZmlu
ZSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTIDB1CiAjZGVmaW5lIE5V
TUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTIDB1CiAKIGNsYXNzIEdQUkluZm8gewpAQCAt
MzU0LDcgKzM1Myw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50
R1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgYXJndW1lbnRHUFIzID0gWDg2UmVnaXN0ZXJzOjplYng7IC8vIHJlZ1QzCiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyBub25BcmdHUFIwID0gWDg2UmVnaXN0ZXJzOjplc2k7IC8vIHJlZ1Q0Ci0g
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIxID0gWDg2UmVnaXN0ZXJzOjplZGk7IC8v
IHJlZ1Q1CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lz
dGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVH
UFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVjeDsKQEAgLTM4MSwx
NCArMzc5LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IHN0YXRpYyB1bnNpZ25lZCB0b0FyZ3VtZW50SW5kZXgoR1BSUmVnIHJlZykKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChyZWcgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnQ+KHJlZykgPCA4KTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4
Rm9yQXJndW1lbnRSZWdpc3Rlcls4XSA9IHsgMiwgMCwgMSwgMywgSW52YWxpZEluZGV4LCBJbnZh
bGlkSW5kZXgsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4IH07Ci0gICAgICAgIHJldHVybiBp
bmRleEZvckFyZ3VtZW50UmVnaXN0ZXJbcmVnXTsKLSAgICB9Ci0KICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZGVidWdOYW1lKEdQUlJlZyByZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnICE9
IEludmFsaWRHUFJSZWcpOwpAQCAtNDA5LDExICszOTksOSBAQCBwdWJsaWM6CiAjaWYgIU9TKFdJ
TkRPV1MpCiAjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNnUKICNkZWZpbmUg
TlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgNXUKLSNkZWZpbmUgTlVNQkVSX09GX0pT
X0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyAoTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVS
UyAtIDJ1KQogI2Vsc2UKICNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0dQog
I2RlZmluZSBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA3dQotI2RlZmluZSBOVU1C
RVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTIDB1CiAjZW5kaWYKIAogY2xhc3Mg
R1BSSW5mbyB7CkBAIC00NzYsNyArNDY0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgYXJndW1lbnRHUFIzID0gWDg2UmVnaXN0ZXJzOjpyOTsgLy8gcmVnVDMKICNlbmRpZgog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMCA9IFg4NlJlZ2lzdGVyczo6cjEwOyAv
LyByZWdUNSAocmVnVDQgb24gV2luZG93cykKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFy
Z0dQUjEgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8g
cmVnVDEgb3IgcmVnVDIKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJl
dHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6cjEwOyAvLyByZWdUNSAocmVnVDQgb24gV2luZG93cykK
QEAgLTUyMSwxOCArNTA4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5kZXhGb3JSZWdp
c3RlcltyZWddOwogICAgIH0KIAotICAgIHN0YXRpYyB1bnNpZ25lZCB0b0FyZ3VtZW50SW5kZXgo
R1BSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZWcgIT0gSW52YWxpZEdQUlJlZyk7
Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHJlZykgPCAxNik7Ci0jaWYgIU9TKFdJ
TkRPV1MpCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEZvckFyZ3VtZW50UmVn
aXN0ZXJbMTZdID0geyBJbnZhbGlkSW5kZXgsIDMsIDIsIEludmFsaWRJbmRleCwgSW52YWxpZElu
ZGV4LCBJbnZhbGlkSW5kZXgsIDEsIDAsIDQsIDUsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4
LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgg
fTsKLSNlbHNlCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEZvckFyZ3VtZW50
UmVnaXN0ZXJbMTZdID0geyBJbnZhbGlkSW5kZXgsIDAsIDEsIEludmFsaWRJbmRleCwgSW52YWxp
ZEluZGV4LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCAyLCAzLCBJ
bnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgsIElu
dmFsaWRJbmRleCwgSW52YWxpZEluZGV4IH07Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGluZGV4
Rm9yQXJndW1lbnRSZWdpc3RlcltyZWddOwotICAgIH0KLSAgICAKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZGVidWdOYW1lKEdQUlJlZyByZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnICE9
IEludmFsaWRHUFJSZWcpOwpAQCAtNTYzLDcgKzUzOCw2IEBAIHB1YmxpYzoKIAogI2lmIENQVShB
Uk0pCiAjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKLSNkZWZpbmUgTlVN
QkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyAwdQogI2RlZmluZSBOVU1CRVJf
T0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyAwdQogCiBjbGFzcyBHUFJJbmZvIHsKQEAgLTYyNywx
NSArNjAxLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IHN0YXRpYyB1bnNpZ25lZCB0b0FyZ3VtZW50SW5kZXgoR1BSUmVnIHJlZykKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChyZWcgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnQ+KHJlZykgPCAxNik7Ci0gICAgICAgIGlmIChyZWcgPiBhcmd1bWVudEdQUjMpCi0g
ICAgICAgICAgICByZXR1cm4gSW52YWxpZEluZGV4OwotICAgICAgICByZXR1cm4gKHVuc2lnbmVk
KXJlZzsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFtZShHUFJS
ZWcgcmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKQEAg
LTY1Niw3ICs2MjEsNiBAQCBwdWJsaWM6CiAKICNpZiBDUFUoQVJNNjQpCiAjZGVmaW5lIE5VTUJF
Ul9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgOHUKLSNkZWZpbmUgTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUyAoTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyAtIDJ1KQog
Ly8gQ2FsbGVlIFNhdmVzIGluY2x1ZGVzIHgxOS4ueDI4IGFuZCBGUCByZWdpc3RlcnMgcTguLnEx
NQogI2RlZmluZSBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyAxOHUKIApAQCAtNzM0
LDcgKzY5OCw2IEBAIHB1YmxpYzoKICAgICBDT01QSUxFX0FTU0VSVChBUk02NFJlZ2lzdGVyczo6
cTEzID09IDEzLCBxMTNfaXNfMTMpOwogICAgIENPTVBJTEVfQVNTRVJUKEFSTTY0UmVnaXN0ZXJz
OjpxMTQgPT0gMTQsIHExNF9pc18xNCk7CiAgICAgQ09NUElMRV9BU1NFUlQoQVJNNjRSZWdpc3Rl
cnM6OnExNSA9PSAxNSwgcTE1X2lzXzE1KTsKLQogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rl
cih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiAoR1BSUmVnKWluZGV4OwpA
QCAtNzUyLDE0ICs3MTUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0b1JlZ2lzdGVyKGlu
ZGV4KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgdG9Bcmd1bWVudEluZGV4KEdQUlJl
ZyByZWcpCi0gICAgewotICAgICAgICBBU1NFUlQocmVnICE9IEludmFsaWRHUFJSZWcpOwotICAg
ICAgICBpZiAocmVnID4gYXJndW1lbnRHUFI3KQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRJ
bmRleDsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZClyZWc7Ci0gICAgfQotCiAgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGRlYnVnTmFtZShHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgQVNTRVJU
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKQEAgLTc5MSw3ICs3NDYsNiBAQCBwdWJsaWM6CiAKICNp
ZiBDUFUoTUlQUykKICNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0dQotI2Rl
ZmluZSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTIDB1CiAjZGVmaW5l
IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTIDB1CiAKIGNsYXNzIEdQUkluZm8gewpA
QCAtODE5LDcgKzc3Myw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3Vt
ZW50R1BSMiA9IE1JUFNSZWdpc3RlcnM6OmEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJn
dW1lbnRHUFIzID0gTUlQU1JlZ2lzdGVyczo6YTM7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBu
b25BcmdHUFIwID0gcmVnVDQ7Ci0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIxID0g
cmVnVDU7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IHJlZ1QwOwog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gcmVnVDE7CiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSByZWdUMjsKQEAgLTg3
Miw3ICs4MjUsNiBAQCBwdWJsaWM6CiAKICNpZiBDUFUoU0g0KQogI2RlZmluZSBOVU1CRVJfT0Zf
QVJHVU1FTlRfUkVHSVNURVJTIDR1Ci0jZGVmaW5lIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdV
TUVOVF9SRUdJU1RFUlMgMHUKICNkZWZpbmUgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgMHUKIAogY2xhc3MgR1BSSW5mbyB7CkBAIC05MDMsNyArODU1LDYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1lbnRHUFIyID0gU0g0UmVnaXN0ZXJzOjpyNjsgLy8g
cmVnVDIKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50R1BSMyA9IFNINFJlZ2lzdGVy
czo6cjc7IC8vIHJlZ1QzCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIwID0gcmVn
VDQ7Ci0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIxID0gcmVnVDU7CiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IHJlZ1QwOwogICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gcmVnVDE7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSByZWdUMjsKQEAgLTk0MCw3MyArODkxLDYgQEAg
cHVibGljOgogCiAjZW5kaWYgLy8gQ1BVKFNINCkKIAotaW5saW5lIEdQUlJlZyBhcmd1bWVudFJl
Z2lzdGVyRm9yKHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgpCi17Ci0jaWYgTlVNQkVSX09GX0FSR1VN
RU5UX1JFR0lTVEVSUwotICAgIGlmIChhcmd1bWVudEluZGV4ID49IE5VTUJFUl9PRl9BUkdVTUVO
VF9SRUdJU1RFUlMpCi0gICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotICAgIHJldHVybiBH
UFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRJbmRleCk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShhcmd1bWVudEluZGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotI2VuZGlmCi19Ci0KLWlubGluZSBHUFJS
ZWcgYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpCi17Ci0jaWYgTlVNQkVSX09GX0FSR1VNRU5U
X1JFR0lTVEVSUwotICAgIHJldHVybiBhcmd1bWVudFJlZ2lzdGVyRm9yKDApOwotI2Vsc2UKLSAg
ICByZXR1cm4gR1BSSW5mbzo6cmVnVDA7Ci0jZW5kaWYKLX0KLQotaW5saW5lIEdQUlJlZyBhcmd1
bWVudFJlZ2lzdGVyRm9yQXJndW1lbnRDb3VudCgpCi17Ci0gICAgcmV0dXJuIGFyZ3VtZW50UmVn
aXN0ZXJGb3IoMSk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBhcmd1bWVudFJlZ2lzdGVySW5kZXhG
b3JKU0Z1bmN0aW9uQXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQpCi17Ci0gICAgcmV0dXJuIGFy
Z3VtZW50ICsgMjsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGpzRnVuY3Rpb25Bcmd1bWVudEZvckFy
Z3VtZW50UmVnaXN0ZXJJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSNpZiBOVU1CRVJfT0ZfSlNf
RlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTID4gMAotICAgIEFTU0VSVChpbmRleCA+PSAyKTsK
LSAgICByZXR1cm4gaW5kZXggLSAyOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYK
LX0KLQotaW5saW5lIHVuc2lnbmVkIGpzRnVuY3Rpb25Bcmd1bWVudEZvckFyZ3VtZW50UmVnaXN0
ZXIoR1BSUmVnIGdwcikKLXsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVH
SVNURVJTID4gMAotICAgIHVuc2lnbmVkIGFyZ3VtZW50UmVnaXN0ZXJJbmRleCA9IEdQUkluZm86
OnRvQXJndW1lbnRJbmRleChncHIpOwotICAgIEFTU0VSVChhcmd1bWVudFJlZ2lzdGVySW5kZXgg
IT0gR1BSSW5mbzo6SW52YWxpZEluZGV4KTsKLSAgICByZXR1cm4ganNGdW5jdGlvbkFyZ3VtZW50
Rm9yQXJndW1lbnRSZWdpc3RlckluZGV4KGFyZ3VtZW50UmVnaXN0ZXJJbmRleCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShncHIpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotaW5saW5lIEdQUlJlZyBhcmd1bWVudFJlZ2lz
dGVyRm9yRnVuY3Rpb25Bcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQotewotICAgIHJl
dHVybiBhcmd1bWVudFJlZ2lzdGVyRm9yKGFyZ3VtZW50UmVnaXN0ZXJJbmRleEZvckpTRnVuY3Rp
b25Bcmd1bWVudChhcmd1bWVudEluZGV4KSk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBudW1iZXJP
ZlJlZ2lzdGVyQXJndW1lbnRzRm9yKHVuc2lnbmVkIGFyZ3VtZW50Q291bnQpCi17Ci0gICAgcmV0
dXJuIHN0ZDo6bWluKGFyZ3VtZW50Q291bnQsIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVO
VF9SRUdJU1RFUlMpOwotfQotCiAvLyBUaGUgYmFzZWxpbmUgSklUIHVzZXMgImFjY3VtdWxhdG9y
IiBzdHlsZSBleGVjdXRpb24gd2l0aCByZWdUMCAoZm9yIDY0LWJpdCkKIC8vIGFuZCByZWdUMCAr
IHJlZ1QxIChmb3IgMzItYml0KSBzZXJ2aW5nIGFzIHRoZSBhY2N1bXVsYXRvciByZWdpc3Rlcihz
KSBmb3IKIC8vIHBhc3NpbmcgcmVzdWx0cyBvZiBvbmUgb3Bjb2RlIHRvIHRoZSBuZXh0LiBIZW5j
ZToKQEAgLTEwMjMsOCArOTA3LDYgQEAgaW5saW5lIEpTVmFsdWVSZWdzIGV4dHJhY3RSZXN1bHQo
SlNWYWx1ZVJlZ3MgcmVzdWx0KSB7IHJldHVybiByZXN1bHQ7IH0KICNlbmRpZgogaW5saW5lIE5v
UmVzdWx0VGFnIGV4dHJhY3RSZXN1bHQoTm9SZXN1bHRUYWcpIHsgcmV0dXJuIE5vUmVzdWx0OyB9
CiAKLSNlbHNlIC8vIENMT09QCi0jZGVmaW5lIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVO
VF9SRUdJU1RFUlMgMHUKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCBlN2NmZGMyOGVmNjJiNjNhZTdiNmM3
M2ZmMTg0OGZjZjBhNTI1YTAyLi5jMmFjZmIzNTk5MmJiMGRlOTA3ZGU2M2I3M2FhZDQ3YzQ1NWIx
NmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02Niw2ICs2NiwxNCBAQCB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyIG5ldwogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAKK0pJ
VDo6Q29kZVJlZiBKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3Rp
b24gZnVuYykKK3sKKyAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIENv
ZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKTsK
KyAgICBKSVQgaml0KHZtLCAwKTsKKyAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbCh2bSwgZnVuYyk7Cit9CisKIEpJVDo6SklUKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAgICAgOiBKU0ludGVyZmFjZUpJVCh2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRl
cnByZXRlcih2bS0+aW50ZXJwcmV0ZXIpCkBAIC01NzEsMjAgKzU3OSw2IEBAIHZvaWQgSklUOjpj
b21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIGlm
IChtX3JhbmRvbUdlbmVyYXRvci5nZXRVaW50MzIoKSAmIDEpCiAgICAgICAgIG5vcCgpOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzcGlsbEFyZ3VtZW50UmVnaXN0ZXJzVG9GcmFtZUJlZm9y
ZVByb2xvZ3VlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKSk7Ci0gICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6UmVnQXJnc05vQXJpdHkpOwot
I2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICBKdW1wIGNvbnRpbnVlU3RhY2tFbnRyeSA9IGp1
bXAoKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgbV9zdGFja0FyZ3NBcml0eU9LRW50cnkgPSBsYWJl
bCgpOwotICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06OlN0YWNrQXJnc05vQXJpdHkpOwot
Ci0jaWYgVVNFKEpTVkFMVUU2NCkgJiYgRU5BQkxFKFZNX0NPVU5URVJTKQotICAgIGNvbnRpbnVl
U3RhY2tFbnRyeS5saW5rKHRoaXMpOwotI2VuZGlmCi0KICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOwogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKIApAQCAtNjQxLDIxICs2MzUsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBjYWxsT3Bl
cmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKIAogICAgIGlmIChtX2NvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKLSAgICAgICAgbV9yZWdpc3RlckFyZ3NXaXRoQXJp
dHlDaGVjayA9IGxhYmVsKCk7Ci0KLSAgICAgICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6
UmVnQXJnc0FyaXR5KTsKLQotICAgICAgICBzcGlsbEFyZ3VtZW50UmVnaXN0ZXJzVG9GcmFtZUJl
Zm9yZVByb2xvZ3VlKCk7Ci0KLSNpZiBFTkFCTEUoVk1fQ09VTlRFUlMpCi0gICAgICAgIEp1bXAg
Y29udGludWVTdGFja0FyaXR5RW50cnkgPSBqdW1wKCk7Ci0jZW5kaWYKLQotICAgICAgICBtX3N0
YWNrQXJnc1dpdGhBcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgaW5jcmVtZW50Q291bnRl
cih0aGlzLCBWTTo6U3RhY2tBcmdzQXJpdHkpOwotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAg
ICAgICAgY29udGludWVTdGFja0FyaXR5RW50cnkubGluayh0aGlzKTsKLSNlbmRpZgorICAgICAg
ICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwogICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDAp
LCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29k
ZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwpAQCAtNjYzLDggKzY0Myw2IEBAIHZv
aWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSwgcmVnVDEpOwogICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0
aGlzKTsKIAotICAgICAgICBpbmNyZW1lbnRDb3VudGVyKHRoaXMsIFZNOjpBcml0eUZpeHVwUmVx
dWlyZWQpOwotCiAgICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSAwOwogCiAgICAgICAgIGlmICht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTgwMCwxNCArNzc4LDkgQEAgQ29tcGls
YXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICB9CiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENv
ZGVNYXAoaml0Q29kZU1hcEVuY29kZXIuZmluaXNoKCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHN0YWNrRW50cnlBcml0eU9LUHRyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX3N0
YWNrQXJnc0FyaXR5T0tFbnRyeSk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJl
Z2lzdGVyRW50cnlXaXRoQXJpdHlDaGVja1B0cjsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
c3RhY2tFbnRyeVdpdGhBcml0eUNoZWNrUHRyOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKLSAgICAgICAgcmVnaXN0ZXJFbnRyeVdpdGhBcml0eUNo
ZWNrUHRyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX3JlZ2lzdGVyQXJnc1dpdGhBcml0eUNo
ZWNrKTsKLSAgICAgICAgc3RhY2tFbnRyeVdpdGhBcml0eUNoZWNrUHRyID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZihtX3N0YWNrQXJnc1dpdGhBcml0eUNoZWNrKTsKLSAgICB9CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIGlmIChtX2NvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIHdpdGhBcml0eUNoZWNrID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOwogCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpKSB7CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKHBhdGNoQnVmZmVy
KTsKQEAgLTgzMSwyMCArODA0LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2luc3RydWN0aW9ucy5zaXplKCkpKTsKIAogICAg
IG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwotICAgIEpJ
VEVudHJ5UG9pbnRzIGVudHJ5cG9pbnRzKHJlc3VsdC5jb2RlKCksIHJlZ2lzdGVyRW50cnlXaXRo
QXJpdHlDaGVja1B0ciwgcmVnaXN0ZXJFbnRyeVdpdGhBcml0eUNoZWNrUHRyLCBzdGFja0VudHJ5
QXJpdHlPS1B0ciwgc3RhY2tFbnRyeVdpdGhBcml0eUNoZWNrUHRyKTsKLQotICAgIHVuc2lnbmVk
IG51bVBhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBhcmdDb3VudCA9IDE7IGFyZ0NvdW50IDw9
IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlM7IGFyZ0NvdW50KyspIHsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5OwotICAgICAgICBpZiAoYXJnQ291
bnQgPT0gbnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgIGVudHJ5ID0gcmVzdWx0LmNvZGUoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW50cnkgPSByZWdpc3RlckVudHJ5V2l0aEFyaXR5
Q2hlY2tQdHI7Ci0gICAgICAgIGVudHJ5cG9pbnRzLnNldEVudHJ5Rm9yKEpJVEVudHJ5UG9pbnRz
OjpyZWdpc3RlckVudHJ5VHlwZUZvckFyZ3VtZW50Q291bnQoYXJnQ291bnQpLCBlbnRyeSk7Ci0g
ICAgfQotCiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5l
dyBEaXJlY3RKSVRDb2RlKEpJVEVudHJ5UG9pbnRzV2l0aFJlZihyZXN1bHQsIGVudHJ5cG9pbnRz
KSwgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RK
SVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkpOwog
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNv
ZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGMzODEwMjYxZDg2YzA3ZTE2YWU3MzMwMWUzYzJiMGM4
MzFjMTk2MzEuLmU2YWEwMjMzZTg3ZmIyMTJjMWIxYjg2MWZlMjI5NjRhMDhjODQ3NWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNJ
bnRlcmZhY2VKSVQuaCIKLSNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVk
ZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAKQEAg
LTI0NywxNSArMjQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0
ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJh
eU1vZGUpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEpJVEVudHJ5UG9pbnRzV2l0aFJl
ZiBjb21waWxlTmF0aXZlQ2FsbEVudHJ5UG9pbnRzKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVu
YykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCF2bS0+Y2FuVXNlSklUKCkpIHsKLSAgICAg
ICAgICAgICAgICBDb2RlUmVmIG5hdGl2ZUNhbGxSZWYgPSBDb2RlUmVmOjpjcmVhdGVMTEludENv
ZGVSZWYobGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihuYXRpdmVDYWxsUmVmLCBuYXRpdmVDYWxsUmVmLmNv
ZGUoKSwgbmF0aXZlQ2FsbFJlZi5jb2RlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
SklUIGppdCh2bSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlSklU
RW50cnlOYXRpdmVDYWxsKHZtLCBmdW5jKTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgQ29k
ZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChWTSosIE5hdGl2ZUZ1bmN0aW9uKTsKIAogICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwogICAg
ICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKQEAgLTI3
NSw3ICsyNjYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFy
cmF5TW9kZSk7CiAKLSAgICAgICAgSklURW50cnlQb2ludHNXaXRoUmVmIHByaXZhdGVDb21waWxl
SklURW50cnlOYXRpdmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rpb24pOworICAgICAgICBMYWJlbCBw
cml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2Up
OworICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChWTSosIE5hdGl2
ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5n
dGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICAvLyBBZGQgYSBj
YWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAgLTk1
NywxMCArOTQ5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlJ
ZEluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleDsKICAgICAg
ICAgdW5zaWduZWQgbV9jYWxsTGlua0luZm9JbmRleDsKLQotICAgICAgICBMYWJlbCBtX3N0YWNr
QXJnc0FyaXR5T0tFbnRyeTsKLSAgICAgICAgTGFiZWwgbV9zdGFja0FyZ3NXaXRoQXJpdHlDaGVj
azsKLSAgICAgICAgTGFiZWwgbV9yZWdpc3RlckFyZ3NXaXRoQXJpdHlDaGVjazsKKyAgICAgICAg
CisgICAgICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExp
bmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGlz
YXNzZW1ibGVyPiBtX2Rpc2Fzc2VtYmxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCmluZGV4IDdhNjJkODBhZDY0YzU2Y2RjYmViNWQ0Y2Y0NGI3ZGZlNzFmMTY5ZTQuLjY0ZWQw
ODc2OTY4NzI3MTdhMDM5MGFmNWUzY2IxMWUwMmE2NzJmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcApAQCAtOTEsOCArOTEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKE9wY29kZUlEIG9wY29kZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBD
YQogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QxLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6QmFz
ZWxpbmVDYWxsZXIpOwotICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06OkNhbGxWYXJhcmdz
KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCkBAIC0xMDAsOSArOTgsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1Qx
LCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGluY3JlbWVudENvdW50
ZXIodGhpcywgVk06OkJhc2VsaW5lQ2FsbGVyKTsKLSAgICBpbmNyZW1lbnRDb3VudGVyKHRoaXMs
IFZNOjpDYWxsRXZhbCk7Ci0KICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogCkBAIC0xMTgsNyArMTEzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBTdGFj
a0FyZ3MsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKKyAgICBpbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQp
LCByZWdUMCk7CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE1OSwxNCArMTU0LDEyIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChv
cF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyks
IGNhbGxfYW5kX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19vcGNvZGVzX211c3RfYmVfc2Ft
ZV9sZW5ndGgpOwogCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBBcmd1
bWVudHNMb2NhdGlvbiBhcmd1bWVudHNMb2NhdGlvbiA9IFN0YWNrQXJnczsKLQogICAgIGlmIChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRk
Q2FsbExpbmtJbmZvKCk7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24s
IGluZm8pOwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGluc3RydWN0
aW9uWzNdLnUudW5zaWduZWRWYWx1ZTsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kOwogCiAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewpAQCAtMTc4LDI1ICsxNzEsMTUgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
dW5zaWduZWQgY2EKICAgICAgICAgfQogICAgIAogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAg
IGlmIChhcmd1bWVudHNMb2NhdGlvbiAhPSBTdGFja0FyZ3MpIHsKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQo
KSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWdpc3RlckFyZ3MgPSBzdGQ6Om1pbihhcmdDb3Vu
dCwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZyA9IDA7IGFyZyA8IHJlZ2lzdGVyQXJnczsgYXJnKyspCi0gICAg
ICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmcpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGFyZ3VtZW50UmVnaXN0ZXJGb3JG
dW5jdGlvbkFyZ3VtZW50KGFyZykpOwotICAgICAgICB9CiAgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgfSAvLyBT
UCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJn
dW1lbnRDb3VudCBpbml0aWFsaXplZC4KLQotICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06
OkJhc2VsaW5lQ2FsbGVyKTsKICAgICAKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IGlu
c3RydWN0aW9uIC0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZU9mZnNldCkuYml0cygp
OwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKLSAgICBHUFJSZWcgY2FsbGVl
UmVnaXN0ZXIgPSBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCk7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnaXN0ZXIpOwotICAgIHN0b3JlNjQoY2FsbGVl
UmVnaXN0ZXIsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDAp
OyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwo
aW5zdHJ1Y3Rpb24pOwpAQCAtMjA0LDE4ICsxODcsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
Y2EKICAgICB9CiAKICAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
azsKLSAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBjYWxs
ZWVSZWdpc3RlciwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0cigw
KSk7CisgICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVn
VDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKIAogICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbklu
Zm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGFyZ3VtZW50c0xvY2F0aW9uLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBjYWxsZWVSZWdpc3Rlcik7CisgICAgaW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
azsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mbyA9IGluZm87CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsKSB7Ci0gICAg
ICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06OlRhaWxDYWxsKTsKLQogICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKICAgICAgICAgc2h1ZmZsZURhdGEudGFnVHlw
ZU51bWJlciA9IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcjsKICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtTG9jYWxzID0KQEAgLTIyOCw3ICsyMDksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBjYQogICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihjYWxsZWVSZWdpc3RlciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwogICAgICAgICBpbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRo
aXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTI2NSwxMCArMjQ2LDkg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJRCwgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWMKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbzsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgbm9uQXJnR1BSMCk7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZv
KSwgcmVnVDIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldEpJVENhbGxUaHVu
a0VudHJ5U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5lbnRyeUZvcihjYWxsTGlua0luZm8t
PmFyZ3VtZW50c0xvY2F0aW9uKCkpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykg
ewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAppbmRleCBlNjFiY2QyNDM4
NWI5MmI1M2ZmNGI5M2M5MTllMmJiZjI3NWMyY2RlLi41NzNiMDYyM2I0NmE5OWUyZGIxZWIwMjk3
NmRiZDc0MWZlODM1YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBTdGFj
a0FyZ3MsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKKyAgICBpbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQp
LCByZWdUMCk7CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKQEAgLTIxMSwxMiArMjExLDEy
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJl
Z2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoaW5mbyksIG5vbkFyZ0dQUjApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihpbmZvKSwgcmVnVDIpOwogCiAgICAgZW1pdExvYWQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBy
ZWdUMSwgcmVnVDApOwotICAgIEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0ZvcihtX3ZtLCAqaW5mbyk7Ci0gICAgaW5mby0+c2V0U2xv
d1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLmNvZGVSZWYoKSwgKm1fdm0s
IG51bGxwdHIsIHRydWUpKTsKLSAgICBlbWl0TmFrZWRDYWxsKHZpcnR1YWxUaHVuay5lbnRyeUZv
cihTdGFja0FyZ3MpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0g
dmlydHVhbFRodW5rRm9yKG1fdm0sICppbmZvKTsKKyAgICBpbmZvLT5zZXRTbG93U3R1YihjcmVh
dGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssICptX3ZtLCBudWxscHRyLCB0cnVlKSk7Cisg
ICAgZW1pdE5ha2VkQ2FsbCh2aXJ0dWFsVGh1bmsuY29kZSgpKTsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2EKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CiAKICAgICBBU1NFUlQo
bV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAg
aW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBTdGFj
a0FyZ3MsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKKyAgICBpbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvID0gaW5mbzsKQEAgLTMxNywxMyArMzE3LDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAot
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm87Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIG5vbkFyZ0dQUjApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsK
IAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0
aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuZW50cnlGb3IoY2FsbExpbmtJbmZvLT5hcmd1bWVudHNMb2NhdGlv
bigpKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxs
UmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAppbmRleCA2NTM0ODlhNWYzNWM1OTgwNWJlZWI2OGFhODI1ZGJhZDM3YzEw
ZTUwLi45YzkyNTUyMDk0ODc2ZGU3YWI5NTA2MTRjN2NiMWI1N2ExYjM1OTYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKQEAgLTc1LDkgKzc1LDkgQEAgSlNWYWx1ZSBKSVRD
b2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lKQogCiAg
ICAgaWYgKCFmdW5jdGlvbiB8fCAhcHJvdG9DYWxsRnJhbWUtPm5lZWRBcml0eUNoZWNrKCkpIHsK
ICAgICAgICAgQVNTRVJUKCFwcm90b0NhbGxGcmFtZS0+bmVlZEFyaXR5Q2hlY2soKSk7Ci0gICAg
ICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxsKFN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RS
ZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgZW50cnlBZGRyZXNzID0gZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UKLSAgICAgICAgZW50cnlBZGRyZXNzID0gYWRk
cmVzc0ZvckNhbGwoU3RhY2tBcmdzTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KHZtRW50cnlUb0phdmFTY3JpcHQoZW50cnlBZGRyZXNzLCB2bSwgcHJvdG9DYWxsRnJhbWUpKTsK
ICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCkgPyBqc051bGwoKSA6IHJlc3VsdDsKIH0KQEAg
LTE2Miw5ICsxNjIsOSBAQCBEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVFR5cGUgaml0
VHlwZSkKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRFbnRyeVBvaW50
c1dpdGhSZWYgZW50cmllcywgSklUVHlwZSBqaXRUeXBlKQotICAgIDogSklUQ29kZVdpdGhDb2Rl
UmVmKGVudHJpZXMuY29kZVJlZigpLCBqaXRUeXBlKQotICAgICwgbV9lbnRyeVBvaW50cyhlbnRy
aWVzKQorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRDb2RlOjpDb2RlUmVmIHJlZiwg
SklUQ29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQorICAgIDog
SklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKKyAgICAsIG1fd2l0aEFyaXR5Q2hlY2so
d2l0aEFyaXR5Q2hlY2spCiB7CiB9CiAKQEAgLTE3MiwxNiArMTcyLDI1IEBAIERpcmVjdEpJVENv
ZGU6On5EaXJlY3RKSVRDb2RlKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFs
aXplRW50cnlQb2ludHMoSklURW50cnlQb2ludHNXaXRoUmVmIGVudHJpZXMpCit2b2lkIERpcmVj
dEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKEpJVENvZGU6OkNvZGVSZWYgcmVmLCBKSVRDb2Rl
OjpDb2RlUHRyIHdpdGhBcml0eUNoZWNrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7
Ci0gICAgbV9yZWYgPSBlbnRyaWVzLmNvZGVSZWYoKTsKLSAgICBtX2VudHJ5UG9pbnRzID0gZW50
cmllczsKKyAgICBtX3JlZiA9IHJlZjsKKyAgICBtX3dpdGhBcml0eUNoZWNrID0gd2l0aEFyaXR5
Q2hlY2s7CiB9CiAKLUpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNh
bGwoRW50cnlQb2ludFR5cGUgdHlwZSkKK0pJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6
YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7Ci0gICAgcmV0dXJuIG1fZW50
cnlQb2ludHMuZW50cnlGb3IodHlwZSk7CisgICAgc3dpdGNoIChhcml0eSkgeworICAgIGNhc2Ug
QXJpdHlDaGVja05vdFJlcXVpcmVkOgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Cisg
ICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7CisgICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgIHJldHVybiBt
X3dpdGhBcml0eUNoZWNrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBDb2RlUHRyKCk7CiB9CiAKIE5hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENv
ZGUoSklUVHlwZSBqaXRUeXBlKQpAQCAtMjA0LDcgKzIxMyw3IEBAIHZvaWQgTmF0aXZlSklUQ29k
ZTo6aW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpCiAgICAgbV9yZWYgPSByZWY7CiB9CiAK
LUpJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoRW50cnlQb2lu
dFR5cGUpCitKSVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFy
aXR5Q2hlY2tNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9yZWYpOwogICAgIHJldHVy
biBtX3JlZi5jb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCmluZGV4IDljZDVj
ZmUyM2FmMTMxZTg2NTgzYzAyNTNkNjRjYmJhODc3NWFkZGYuLjc1YzcwYzdmN2M4MmE0ODk0ZTkw
MTU5YWJhOWJjZjAwYTc0YTI0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBA
IC0yNSwxMCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0eUNoZWNr
TW9kZS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
ICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJKSVRFbnRyeVBvaW50cy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgpAQCAtMTczLDggKzE3Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGppdENvZGUtPmppdFR5cGUoKTsKICAgICB9CiAgICAgCi0gICAgdmly
dHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKEVudHJ5UG9pbnRUeXBlKSA9IDA7CisgICAgdmly
dHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsK
KyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsgcmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNz
QXRPZmZzZXQoMCk7IH0KICAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6
ZV90IG9mZnNldCkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCogcG9p
bnRlckludG9Db2RlKSA9IDA7CiAgICAgCkBAIC0yMjMsMTUgKzIyNCwxNSBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiBwdWJs
aWM6CiAgICAgRGlyZWN0SklUQ29kZShKSVRUeXBlKTsKLSAgICBEaXJlY3RKSVRDb2RlKEpJVEVu
dHJ5UG9pbnRzV2l0aFJlZiwgSklUVHlwZSk7CisgICAgRGlyZWN0SklUQ29kZShDb2RlUmVmLCBD
b2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKICAgICB2aXJ0dWFsIH5EaXJlY3RKSVRD
b2RlKCk7CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplRW50cnlQb2ludHMoSklURW50cnlQb2lu
dHNXaXRoUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYsIENvZGVQdHIg
d2l0aEFyaXR5Q2hlY2spOwogCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChFbnRyeVBvaW50
VHlwZSkgb3ZlcnJpZGU7CisgICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgSklURW50cnlQb2ludHMgbV9lbnRyeVBvaW50
czsKKyAgICBDb2RlUHRyIG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCiBjbGFzcyBOYXRpdmVKSVRD
b2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CkBAIC0yNDIsNyArMjQzLDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZik7CiAKLSAgICBD
b2RlUHRyIGFkZHJlc3NGb3JDYWxsKEVudHJ5UG9pbnRUeXBlKSBvdmVycmlkZTsKKyAgICBDb2Rl
UHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
bnRyeVBvaW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFbnRyeVBvaW50cy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTMzNDRmYWY5YjgxMWM5MGVlNGM2Mzdm
NWU1ZDk5ZWU4N2Y4NzI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURW50cnlQb2ludHMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNz
IFZNOwotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwotCi1lbnVtIEFyZ3VtZW50c0xvY2F0
aW9uIDogdW5zaWduZWQgewotICAgIFN0YWNrQXJncyA9IDAsCi0jaWYgTlVNQkVSX09GX0pTX0ZV
TkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyA+PSA0Ci0gICAgUmVnaXN0ZXJBcmdzMUluUmVnaXN0
ZXJzLAotICAgIFJlZ2lzdGVyQXJnczJJblJlZ2lzdGVycywKLSAgICBSZWdpc3RlckFyZ3MzSW5S
ZWdpc3RlcnMsCi0gICAgUmVnaXN0ZXJBcmdzNEluUmVnaXN0ZXJzLAotI2lmIE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMgPT0gNgotICAgIFJlZ2lzdGVyQXJnczVJblJl
Z2lzdGVycywKLSAgICBSZWdpc3RlckFyZ3M2SW5SZWdpc3RlcnMsCi0jZW5kaWYKLSAgICBSZWdp
c3RlckFyZ3NXaXRoRXh0cmFPblN0YWNrCi0jZW5kaWYKLX07Ci0KLS8vIFRoaXMgZW51bSBuZWVk
cyB0byBoYXZlIHRoZSBzYW1lIGVudW1lcmF0b3Igb3JkZXJpbmcgYXMgQXJndW1lbnRzTG9jYXRp
b24uCi1lbnVtIFRodW5rRW50cnlQb2ludFR5cGUgOiB1bnNpZ25lZCB7Ci0gICAgU3RhY2tBcmdz
RW50cnkgPSAwLAotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMg
Pj0gNAotICAgIFJlZ2lzdGVyMUFyZ0VudHJ5LAotICAgIFJlZ2lzdGVyMkFyZ3NFbnRyeSwKLSAg
ICBSZWdpc3RlcjNBcmdzRW50cnksCi0gICAgUmVnaXN0ZXI0QXJnc0VudHJ5LAotI2lmIE5VTUJF
Ul9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMgPT0gNgotICAgIFJlZ2lzdGVyNUFy
Z3NFbnRyeSwKLSAgICBSZWdpc3RlcjZBcmdzRW50cnksCi0jZW5kaWYKLSNlbmRpZgotICAgIFRo
dW5rRW50cnlQb2ludFR5cGVDb3VudAotfTsKLQotZW51bSBFbnRyeVBvaW50VHlwZSB7Ci0gICAg
U3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkLAotICAgIFN0YWNrQXJnc011c3RDaGVja0Fy
aXR5LAotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICBS
ZWdpc3RlckFyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQsCi0gICAgUmVnaXN0ZXJBcmdzUG9zc2li
bGVFeHRyYUFyZ3MsCi0gICAgUmVnaXN0ZXJBcmdzTXVzdENoZWNrQXJpdHksCi0jaWYgTlVNQkVS
X09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyA+PSA0Ci0gICAgUmVnaXN0ZXJBcmdz
MSwKLSAgICBSZWdpc3RlckFyZ3MyLAotICAgIFJlZ2lzdGVyQXJnczMsCi0gICAgUmVnaXN0ZXJB
cmdzNCwKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTID09IDYK
LSAgICBSZWdpc3RlckFyZ3M1LAotICAgIFJlZ2lzdGVyQXJnczYsCi0jZW5kaWYKLSNlbmRpZgot
I2VuZGlmCi0gICAgTnVtYmVyT2ZFbnRyeVBvaW50VHlwZXMKLX07Ci0KLWNsYXNzIEpJVEVudHJ5
UG9pbnRzIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2Rl
UHRyOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkVudHJ5VHlwZXMgPSBFbnRy
eVBvaW50VHlwZTo6TnVtYmVyT2ZFbnRyeVBvaW50VHlwZXM7Ci0KLSAgICBKSVRFbnRyeVBvaW50
cygpCi0gICAgewotICAgICAgICBjbGVhckVudHJpZXMoKTsKLSAgICB9Ci0KLSAgICBKSVRFbnRy
eVBvaW50cyhDb2RlUHRyIHJlZ2lzdGVyQXJnc05vQ2hlY2tSZXF1aXJlZEVudHJ5LCBDb2RlUHRy
IHJlZ2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdzRW50cnksCi0gICAgICAgIENvZGVQdHIgcmVn
aXN0ZXJBcmdzQ2hlY2tBcml0eUVudHJ5LCBDb2RlUHRyIHN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RS
ZXF1aXJlZEVudHJ5LAotICAgICAgICBDb2RlUHRyIHN0YWNrQXJnc0NoZWNrQXJpdHlFbnRyeSkK
LSAgICB7Ci0gICAgICAgIG1fZW50cnlQb2ludHNbU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVp
cmVkXSA9IHN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZEVudHJ5OwotICAgICAgICBtX2Vu
dHJ5UG9pbnRzW1N0YWNrQXJnc011c3RDaGVja0FyaXR5XSA9IHN0YWNrQXJnc0NoZWNrQXJpdHlF
bnRyeTsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAg
ICAgIG1fZW50cnlQb2ludHNbUmVnaXN0ZXJBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkXSA9IHJl
Z2lzdGVyQXJnc05vQ2hlY2tSZXF1aXJlZEVudHJ5OwotICAgICAgICBtX2VudHJ5UG9pbnRzW1Jl
Z2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdzXSA9IHJlZ2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFB
cmdzRW50cnk7Ci0gICAgICAgIG1fZW50cnlQb2ludHNbUmVnaXN0ZXJBcmdzTXVzdENoZWNrQXJp
dHldID0gcmVnaXN0ZXJBcmdzQ2hlY2tBcml0eUVudHJ5OwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDw9IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlM7IGkg
KyspCi0gICAgICAgICAgICBtX2VudHJ5UG9pbnRzW3JlZ2lzdGVyRW50cnlUeXBlRm9yQXJndW1l
bnRDb3VudChpKV0gPSByZWdpc3RlckFyZ3NDaGVja0FyaXR5RW50cnk7Ci0jZWxzZQotICAgICAg
ICBVTlVTRURfUEFSQU0ocmVnaXN0ZXJBcmdzTm9DaGVja1JlcXVpcmVkRW50cnkpOwotICAgICAg
ICBVTlVTRURfUEFSQU0ocmVnaXN0ZXJBcmdzUG9zc2libGVFeHRyYUFyZ3NFbnRyeSk7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTShyZWdpc3RlckFyZ3NDaGVja0FyaXR5RW50cnkpOwotI2VuZGlmCi0K
LSAgICB9Ci0KLSAgICBDb2RlUHRyIGVudHJ5Rm9yKEVudHJ5UG9pbnRUeXBlIHR5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9lbnRyeVBvaW50c1t0eXBlXTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldEVudHJ5Rm9yKEVudHJ5UG9pbnRUeXBlIHR5cGUsIENvZGVQdHIgZW50cnkpCi0gICAgewot
ICAgICAgICBBU1NFUlQodHlwZSA8IE51bWJlck9mRW50cnlQb2ludFR5cGVzKTsKLSAgICAgICAg
bV9lbnRyeVBvaW50c1t0eXBlXSA9IGVudHJ5OwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZFbnRyeUZvcihFbnRyeVBvaW50VHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG9mZnNldG9mKEpJVEVudHJ5UG9pbnRzLCBtX2VudHJ5UG9pbnRzW3R5cGVdKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgRW50cnlQb2ludFR5cGUgcmVnaXN0ZXJFbnRyeVR5cGVGb3JBcmd1
bWVudENvdW50KHVuc2lnbmVkIGFyZ0NvdW50KQotICAgIHsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVO
Q1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgICAgIEFTU0VSVChhcmdDb3VudCk7Ci0gICAg
ICAgIHVuc2lnbmVkIHJlZ2lzdGVyQXJnQ291bnQgPSBudW1iZXJPZlJlZ2lzdGVyQXJndW1lbnRz
Rm9yKGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKCFyZWdpc3RlckFyZ0NvdW50IHx8IHJlZ2lzdGVy
QXJnQ291bnQgIT0gYXJnQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gUmVnaXN0ZXJBcmdzTXVz
dENoZWNrQXJpdHk7Ci0KLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVudHJ5UG9pbnRUeXBl
PihSZWdpc3RlckFyZ3MxICsgcmVnaXN0ZXJBcmdDb3VudCAtIDEpOwotI2Vsc2UKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGFyZ0NvdW50KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIFN0YWNrQXJnc011c3RDaGVja0FyaXR5OwotI2VuZGlmCi0g
ICAgfQotCi0gICAgc3RhdGljIEVudHJ5UG9pbnRUeXBlIHJlZ2lzdGVyRW50cnlUeXBlRm9yQXJn
dW1lbnRUeXBlKEFyZ3VtZW50c0xvY2F0aW9uIHR5cGUpCi0gICAgewotI2lmIE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICAgICAgQVNTRVJUKHR5cGUgIT0gU3Rh
Y2tBcmdzKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gUmVnaXN0ZXJBcmdzV2l0aEV4dHJhT25TdGFj
aykKLSAgICAgICAgICAgIHJldHVybiBSZWdpc3RlckFyZ3NNdXN0Q2hlY2tBcml0eTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbnRyeVBvaW50VHlwZT4oUmVnaXN0ZXJB
cmdzMSArIHR5cGUgLSBSZWdpc3RlckFyZ3MxSW5SZWdpc3RlcnMpOwotI2Vsc2UKLSAgICAgICAg
VU5VU0VEX1BBUkFNKHR5cGUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gU3RhY2tBcmdzTXVzdENoZWNrQXJpdHk7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICB2b2lkIGNsZWFyRW50cmllcygpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1iZXJPZkVudHJ5VHlwZXM7IGktLTspCi0gICAgICAgICAgICBtX2VudHJ5UG9pbnRz
W2ldID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAgfQotCi0gICAgSklURW50cnlQb2lu
dHMmIG9wZXJhdG9yPShjb25zdCBKSVRFbnRyeVBvaW50cyYgb3RoZXIpCi0gICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkVudHJ5VHlwZXM7IGktLTspCi0gICAgICAgICAg
ICBtX2VudHJ5UG9pbnRzW2ldID0gb3RoZXIubV9lbnRyeVBvaW50c1tpXTsKLQotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotCi1wcml2YXRlOgotCi0gICAgQ29kZVB0ciBtX2VudHJ5UG9p
bnRzW251bWJlck9mRW50cnlUeXBlc107Ci19OwotCi1jbGFzcyBKSVRFbnRyeVBvaW50c1dpdGhS
ZWYgOiBwdWJsaWMgSklURW50cnlQb2ludHMgewotcHVibGljOgotICAgIHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7Ci0KLSAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYoKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYoY29uc3QgSklURW50cnlQ
b2ludHNXaXRoUmVmJiBvdGhlcikKLSAgICAgICAgOiBKSVRFbnRyeVBvaW50cyhvdGhlcikKLSAg
ICAgICAgLCBtX2NvZGVSZWYob3RoZXIubV9jb2RlUmVmKQotICAgIHsKLSAgICB9Ci0KLSAgICBK
SVRFbnRyeVBvaW50c1dpdGhSZWYoQ29kZVJlZiBjb2RlUmVmLCBjb25zdCBKSVRFbnRyeVBvaW50
cyYgb3RoZXIpCi0gICAgICAgIDogSklURW50cnlQb2ludHMob3RoZXIpCi0gICAgICAgICwgbV9j
b2RlUmVmKGNvZGVSZWYpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBKSVRFbnRyeVBvaW50c1dp
dGhSZWYoQ29kZVJlZiBjb2RlUmVmLCBDb2RlUHRyIHN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1
aXJlZEVudHJ5LAotICAgICAgICBDb2RlUHRyIHN0YWNrQXJnc0NoZWNrQXJpdHlFbnRyeSkKLSAg
ICAgICAgOiBKSVRFbnRyeVBvaW50cyhDb2RlUHRyKCksIENvZGVQdHIoKSwgQ29kZVB0cigpLCBz
dGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWRFbnRyeSwgc3RhY2tBcmdzQ2hlY2tBcml0eUVu
dHJ5KQotICAgICAgICAsIG1fY29kZVJlZihjb2RlUmVmKQotICAgIHsKLSAgICB9Ci0KLSAgICBK
SVRFbnRyeVBvaW50c1dpdGhSZWYoQ29kZVJlZiBjb2RlUmVmLCBDb2RlUHRyIHJlZ2lzdGVyQXJn
c05vQ2hlY2tzUmVxdWlyZWRFbnRyeSwKLSAgICAgICAgQ29kZVB0ciByZWdpc3RlckFyZ3NQb3Nz
aWJsZUV4dHJhQXJnc0VudHJ5LCBDb2RlUHRyIHJlZ2lzdGVyQXJnc0NoZWNrQXJpdHlFbnRyeSwK
LSAgICAgICAgQ29kZVB0ciBzdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWRFbnRyeSwgQ29k
ZVB0ciBzdGFja0FyZ3NDaGVja0FyaXR5RW50cnkpCi0gICAgICAgIDogSklURW50cnlQb2ludHMo
cmVnaXN0ZXJBcmdzTm9DaGVja3NSZXF1aXJlZEVudHJ5LCByZWdpc3RlckFyZ3NQb3NzaWJsZUV4
dHJhQXJnc0VudHJ5LAotICAgICAgICAgICAgcmVnaXN0ZXJBcmdzQ2hlY2tBcml0eUVudHJ5LCBz
dGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWRFbnRyeSwKLSAgICAgICAgICAgIHN0YWNrQXJn
c0NoZWNrQXJpdHlFbnRyeSkKLSAgICAgICAgLCBtX2NvZGVSZWYoY29kZVJlZikKLSAgICB7Ci0g
ICAgfQotCi0gICAgQ29kZVJlZiBjb2RlUmVmKCkgeyByZXR1cm4gbV9jb2RlUmVmOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgQ29kZVJlZiBtX2NvZGVSZWY7Ci19OwotCi1pbmxpbmUgQXJndW1lbnRzTG9j
YXRpb24gYXJndW1lbnRzTG9jYXRpb25Gb3IodW5zaWduZWQgYXJndW1lbnRDb3VudCkKLXsKLSNp
ZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgaWYgKCFhcmd1
bWVudENvdW50KQotICAgICAgICByZXR1cm4gU3RhY2tBcmdzOwotICAgIAotICAgIGFyZ3VtZW50
Q291bnQgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJT
ICsgMSwgYXJndW1lbnRDb3VudCk7Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFyZ3Vt
ZW50c0xvY2F0aW9uPihBcmd1bWVudHNMb2NhdGlvbjo6UmVnaXN0ZXJBcmdzMUluUmVnaXN0ZXJz
ICsgYXJndW1lbnRDb3VudCAtIDEpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRD
b3VudCk7Ci0gICAgcmV0dXJuIFN0YWNrQXJnczsKLSNlbmRpZgotfQotCi1pbmxpbmUgRW50cnlQ
b2ludFR5cGUgcmVnaXN0ZXJFbnRyeVBvaW50VHlwZUZvcih1bnNpZ25lZCBhcmd1bWVudENvdW50
KQotewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICBp
ZiAoIWFyZ3VtZW50Q291bnQgfHwgYXJndW1lbnRDb3VudCA+IE5VTUJFUl9PRl9KU19GVU5DVElP
Tl9BUkdVTUVOVF9SRUdJU1RFUlMpCi0gICAgICAgIHJldHVybiBSZWdpc3RlckFyZ3NNdXN0Q2hl
Y2tBcml0eTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RW50cnlQb2ludFR5cGU+KEVu
dHJ5UG9pbnRUeXBlOjpSZWdpc3RlckFyZ3MxICsgYXJndW1lbnRDb3VudCAtIDEpOwotI2Vsc2UK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFVOVVNFRF9QQVJBTShhcmd1
bWVudENvdW50KTsKLSAgICByZXR1cm4gU3RhY2tBcmdzTXVzdENoZWNrQXJpdHk7Ci0jZW5kaWYK
LX0KLQotaW5saW5lIEVudHJ5UG9pbnRUeXBlIGVudHJ5UG9pbnRUeXBlRm9yKEFyZ3VtZW50c0xv
Y2F0aW9uIGFyZ3VtZW50TG9jYXRpb24pCi17Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FS
R1VNRU5UX1JFR0lTVEVSUwotICAgIGlmIChhcmd1bWVudExvY2F0aW9uID09IFN0YWNrQXJncykK
LSAgICAgICAgcmV0dXJuIFN0YWNrQXJnc011c3RDaGVja0FyaXR5OwotICAgIAotICAgIGlmIChh
cmd1bWVudExvY2F0aW9uID09IFJlZ2lzdGVyQXJnc1dpdGhFeHRyYU9uU3RhY2spCi0gICAgICAg
IHJldHVybiBSZWdpc3RlckFyZ3NNdXN0Q2hlY2tBcml0eTsKLSAgICAKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RW50cnlQb2ludFR5cGU+KEVudHJ5UG9pbnRUeXBlOjpSZWdpc3RlckFyZ3MxICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3VtZW50TG9jYXRpb24gLSBSZWdpc3RlckFyZ3MxSW5S
ZWdpc3RlcnMpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50TG9jYXRpb24pOwot
ICAgIHJldHVybiBTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eTsKLSNlbmRpZgotfQotCi1pbmxpbmUg
VGh1bmtFbnRyeVBvaW50VHlwZSB0aHVua0VudHJ5UG9pbnRUeXBlRm9yKEFyZ3VtZW50c0xvY2F0
aW9uIGFyZ3VtZW50TG9jYXRpb24pCi17Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VN
RU5UX1JFR0lTVEVSUwotICAgIHVuc2lnbmVkIGFyZ3VtZW50TG9jYXRpb25JbmRleCA9IHN0ZDo6
bWluKFJlZ2lzdGVyQXJnc1dpdGhFeHRyYU9uU3RhY2sgLSAxLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oYXJndW1lbnRMb2NhdGlvbikpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHVua0VudHJ5
UG9pbnRUeXBlPihhcmd1bWVudExvY2F0aW9uSW5kZXgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oYXJndW1lbnRMb2NhdGlvbik7Ci0gICAgcmV0dXJuIFN0YWNrQXJnc0VudHJ5OwotI2VuZGlm
Ci19Ci0KLWlubGluZSBUaHVua0VudHJ5UG9pbnRUeXBlIHRodW5rRW50cnlQb2ludFR5cGVGb3Io
dW5zaWduZWQgYXJndW1lbnRDb3VudCkKLXsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJH
VU1FTlRfUkVHSVNURVJTCi0gICAgYXJndW1lbnRDb3VudCA9IG51bWJlck9mUmVnaXN0ZXJBcmd1
bWVudHNGb3IoYXJndW1lbnRDb3VudCk7Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRo
dW5rRW50cnlQb2ludFR5cGU+KFRodW5rRW50cnlQb2ludFR5cGU6OlJlZ2lzdGVyMUFyZ0VudHJ5
ICsgYXJndW1lbnRDb3VudCAtIDEpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRD
b3VudCk7Ci0gICAgcmV0dXJuIFN0YWNrQXJnc0VudHJ5OwotI2VuZGlmCi19Ci0KLWNsYXNzIEpJ
VEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIENvZGVSZWY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mRW50cnlU
eXBlcyA9IFRodW5rRW50cnlQb2ludFR5cGU6OlRodW5rRW50cnlQb2ludFR5cGVDb3VudDsKLQot
ICAgIEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmKCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYoQ29kZVJlZiBjb2RlUmVmKQotICAg
ICAgICA6IG1fY29kZVJlZihjb2RlUmVmKQotICAgIHsKLSAgICB9Ci0KLSAgICBKSVRKU0NhbGxU
aHVua0VudHJ5UG9pbnRzV2l0aFJlZihjb25zdCBKSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0
aFJlZiYgb3RoZXIpCi0gICAgICAgIDogbV9jb2RlUmVmKG90aGVyLm1fY29kZVJlZikKLSAgICB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkVudHJ5VHlwZXM7IGkr
KykKLSAgICAgICAgICAgIG1fZW50cnlQb2ludHNbaV0gPSBvdGhlci5tX2VudHJ5UG9pbnRzW2ld
OwotICAgIH0KLQotICAgIENvZGVQdHIgZW50cnlGb3IoVGh1bmtFbnRyeVBvaW50VHlwZSB0eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZW50cnlQb2ludHNbdHlwZV07Ci0gICAgfQotCi0g
ICAgQ29kZVB0ciBlbnRyeUZvcihBcmd1bWVudHNMb2NhdGlvbiBhcmd1bWVudHNMb2NhdGlvbikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlbnRyeUZvcih0aHVua0VudHJ5UG9pbnRUeXBlRm9yKGFy
Z3VtZW50c0xvY2F0aW9uKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFbnRyeUZvcihUaHVua0Vu
dHJ5UG9pbnRUeXBlIHR5cGUsIENvZGVQdHIgZW50cnkpCi0gICAgewotICAgICAgICBtX2VudHJ5
UG9pbnRzW3R5cGVdID0gZW50cnk7Ci0gICAgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkVudHJ5Rm9yKFRodW5rRW50cnlQb2ludFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBvZmZzZXRvZihKSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZiwgbV9lbnRyeVBv
aW50c1t0eXBlXSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckVudHJpZXMoKQotICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZFbnRyeVR5cGVzOyBpLS07KQotICAgICAg
ICAgICAgbV9lbnRyeVBvaW50c1tpXSA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgIH0K
LQotICAgIENvZGVSZWYgY29kZVJlZigpIHsgcmV0dXJuIG1fY29kZVJlZjsgfQotCi0gICAgSklU
SlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYmIG9wZXJhdG9yPShjb25zdCBKSVRKU0NhbGxU
aHVua0VudHJ5UG9pbnRzV2l0aFJlZiYgb3RoZXIpCi0gICAgewotICAgICAgICBtX2NvZGVSZWYg
PSBvdGhlci5tX2NvZGVSZWY7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mRW50
cnlUeXBlczsgaS0tOykKLSAgICAgICAgICAgIG1fZW50cnlQb2ludHNbaV0gPSBvdGhlci5tX2Vu
dHJ5UG9pbnRzW2ldOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBDb2RlUmVmIG1fY29kZVJlZjsKLSAgICBDb2RlUHRyIG1fZW50cnlQb2lu
dHNbbnVtYmVyT2ZFbnRyeVR5cGVzXTsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAxNTczYWZkNDYyOThlN2Ji
YmU2OThkOWM2ZDVlODc0MDgzZDA1MDQ3Li41NjcyZmEwNTA0ZWIzNDAyOTJiYWM2ZTViY2MzNWNl
YTk0NzA1Mjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAg
LTQ5LDkgKzQ5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1K
SVRFbnRyeVBvaW50c1dpdGhSZWYgSklUOjpwcml2YXRlQ29tcGlsZUpJVEVudHJ5TmF0aXZlQ2Fs
bChWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIHZt
LT5nZXRKSVRFbnRyeVN0dWIobmF0aXZlQ2FsbEdlbmVyYXRvcik7CisgICAgcmV0dXJuIHZtLT5n
ZXRDVElTdHViKG5hdGl2ZUNhbGxHZW5lcmF0b3IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
b3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBjNmQyZDkwZWI3NmE4NWUyNmM3MzRi
OThmMWE5Yzk2ZDZkNGJkNTAwLi41YjA3MWFkNWM3Mzk1ZTFhZjFmYjM5YTNmZmIyOTBlNGVjNmNm
ZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CkBAIC00Niw3ICs0Niw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KSVRFbnRyeVBvaW50c1dp
dGhSZWYgSklUOjpwcml2YXRlQ29tcGlsZUpJVEVudHJ5TmF0aXZlQ2FsbChWTSogdm0sIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmMpCitKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2
ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogewogICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhYmxlIHRvIGxvZyBTaGFkb3dDaGlja2VuIHByb2xvZ3VlIHBhY2tldHMuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTY4OQpAQCAt
MTI5LDkgKzEyOSw3IEBAIEpJVEVudHJ5UG9pbnRzV2l0aFJlZiBKSVQ6OnByaXZhdGVDb21waWxl
SklURW50cnlOYXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3RpCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CiAKICAgICBwYXRjaEJ1
ZmZlci5saW5rKG5hdGl2ZUNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmMpKTsKLSAgICBKSVQ6OkNvZGVS
ZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiSklUIENUSSBuYXRpdmUg
Y2FsbCIpKTsKLSAgICAKLSAgICByZXR1cm4gSklURW50cnlQb2ludHNXaXRoUmVmKGNvZGVSZWYs
IGNvZGVSZWYuY29kZSgpLCBjb2RlUmVmLmNvZGUoKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICgiSklUIENUSSBuYXRpdmUgY2FsbCIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA3YWE2ZDZjNjNlZGQzNGVl
NjgwMThkNzE3MmI4NTNhODgwNTliOWRkLi40NDczNWQ1MWYwNTFhNDIzMjhmNDhiZDU5NzllN2Nj
ZTRhYzNkMzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKQEAgLTg5MCwxNCArODkwLDEwIEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpCiAgICAgSlNT
Y29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjb2RlUHRyLCBjb2RlUHRyRm9yTGlua2luZzsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgU3RhY2tBcmdzTXVzdENoZWNrQXJpdHkpOwotI2lm
IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICAgICAgaWYgKGNh
bGxMaW5rSW5mby0+YXJndW1lbnRzSW5SZWdpc3RlcnMoKSkKLSAgICAgICAgICAgIGNvZGVQdHJG
b3JMaW5raW5nID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBSZWdpc3RlckFyZ3NN
dXN0Q2hlY2tBcml0eSk7Ci0jZW5kaWYKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKQEAgLTkxOCw0MSArOTE0LDE3IEBAIFNs
b3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ2FsbExpCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrID0gKmNv
ZGVCbG9ja1Nsb3Q7Ci0gICAgICAgIEVudHJ5UG9pbnRUeXBlIGVudHJ5VHlwZTsKLSAgICAgICAg
c2l6ZV90IGNhbGxlckFyZ3VtZW50Q291bnQgPSBleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpOwotICAgICAgICBzaXplX3QgY2FsbGVlQXJndW1lbnRDb3VudCA9IHN0YXRp
Y19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgICAgICBpZiAo
Y2FsbGVyQXJndW1lbnRDb3VudCA8IGNhbGxlZUFyZ3VtZW50Q291bnQgfHwgY2FsbExpbmtJbmZv
LT5pc1ZhcmFyZ3MoKSkgewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJ
U1RFUlMKLSAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmFyZ3VtZW50c0luUmVnaXN0ZXJz
KCkpIHsKLSAgICAgICAgICAgICAgICBjb2RlUHRyRm9yTGlua2luZyA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBKSVRFbnRyeVBvaW50czo6cmVnaXN0ZXJFbnRyeVR5
cGVGb3JBcmd1bWVudENvdW50KGNhbGxlckFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvZGVQdHJGb3JMaW5raW5nKQotICAgICAgICAgICAgICAgICAgICBjb2RlUHRyRm9y
TGlua2luZyA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBSZWdpc3Rl
ckFyZ3NNdXN0Q2hlY2tBcml0eSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAg
IGVudHJ5VHlwZSA9IFN0YWNrQXJnc011c3RDaGVja0FyaXR5OwotICAgICAgICAgICAgKHZvaWQp
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBlbnRyeVBvaW50VHlwZUZv
cihjYWxsTGlua0luZm8tPmFyZ3VtZW50c0xvY2F0aW9uKCkpKTsKLSNpZiBOVU1CRVJfT0ZfSlNf
RlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgICAgIH0gZWxzZSBpZiAoY2FsbExpbmtJ
bmZvLT5hcmd1bWVudHNJblJlZ2lzdGVycygpKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbGVyQXJn
dW1lbnRDb3VudCA9PSBjYWxsZWVBcmd1bWVudENvdW50IHx8IGNhbGxlZUFyZ3VtZW50Q291bnQg
Pj0gTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgICAg
ICAgICBjb2RlUHRyRm9yTGlua2luZyA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cihraW5kLCBSZWdpc3RlckFyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQpOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29kZVB0ckZvckxpbmtpbmcgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgSklURW50cnlQb2ludHM6OnJlZ2lzdGVyRW50cnlU
eXBlRm9yQXJndW1lbnRDb3VudChjYWxsZXJBcmd1bWVudENvdW50KSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjb2RlUHRyRm9yTGlua2luZykKLSAgICAgICAgICAgICAgICAgICAgY29kZVB0ckZv
ckxpbmtpbmcgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgUmVnaXN0
ZXJBcmdzUG9zc2libGVFeHRyYUFyZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8g
IFByZXBvcHVsYXRlIHRoZSBlbnRyeSBwb2ludHMgdGhlIHZpcnR1YWwgdGh1bmsgbWlnaHQgdXNl
LgotICAgICAgICAgICAgKHZvaWQpIGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihr
aW5kLCBlbnRyeVBvaW50VHlwZUZvcihjYWxsTGlua0luZm8tPmFyZ3VtZW50c0xvY2F0aW9uKCkp
KTsKLQotICAgICAgICAgICAgZW50cnlUeXBlID0gU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVp
cmVkOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZW50cnlUeXBlID0gU3Rh
Y2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkOwotICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGVudHJ5VHlwZSk7CisgICAgICAgIEFyaXR5
Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICBhcml0eSA9
IE11c3RDaGVja0FyaXR5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcml0eSA9IEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7CiAgICAgfQogICAgIGlmICghY2FsbExpbmtJbmZv
LT5zZWVuT25jZSgpKQogICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNl
Ci0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBj
YWxsZWUsIGNvZGVQdHJGb3JMaW5raW5nID8gY29kZVB0ckZvckxpbmtpbmcgOiBjb2RlUHRyKTsK
KyAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNh
bGxlZSwgY29kZVB0cik7CiAgICAgCiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKIH0KQEAgLTk4NywxMSArOTU5LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxpbmtEaXJlY3RDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvKiBjYWxsTGkKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0jaWYg
TlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgICAgICBjb2RlUHRy
ID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBjYWxsTGlua0luZm8tPmFyZ3VtZW50
c0luUmVnaXN0ZXJzKCkgPyBSZWdpc3RlckFyZ3NNdXN0Q2hlY2tBcml0eSA6IFN0YWNrQXJnc011
c3RDaGVja0FyaXR5KTsKLSNlbHNlCi0gICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Ioa2luZCwgU3RhY2tBcmdzTXVzdENoZWNrQXJpdHkpOwotI2VuZGlmCisgICAgICAgIGNv
ZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsK
ICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIApAQCAt
MTAwMywyOSArOTcxLDEzIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0
Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExpCiAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgRW50cnlQb2ludFR5cGUgZW50cnlUeXBlOworICAgICAg
ICBBcml0eUNoZWNrTW9kZSBhcml0eTsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRTdGFja1Ns
b3RzID0gY2FsbExpbmtJbmZvLT5tYXhOdW1Bcmd1bWVudHMoKTsKLSAgICAgICAgc2l6ZV90IGNv
ZGVCbG9ja1BhcmFtZXRlckNvdW50ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSk7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lT
VEVSUwotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLT5hcmd1bWVudHNJblJlZ2lzdGVycygpKSB7
Ci0gICAgICAgICAgICAvLyBUaGlzIGxvZ2ljIGNvdWxkIHByb2JhYmx5IGJlIHNpbXBsaWZpZWQh
Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRTdGFja1Nsb3RzIDwgY29kZUJsb2NrUGFyYW1ldGVy
Q291bnQpCi0gICAgICAgICAgICAgICAgZW50cnlUeXBlID0gZW50cnlQb2ludFR5cGVGb3IoY2Fs
bExpbmtJbmZvLT5hcmd1bWVudHNMb2NhdGlvbigpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFy
Z3VtZW50U3RhY2tTbG90cyA+IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RF
UlMpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2NrUGFyYW1ldGVyQ291bnQgPCBOVU1C
RVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKQotICAgICAgICAgICAgICAgICAg
ICBlbnRyeVR5cGUgPSBSZWdpc3RlckFyZ3NQb3NzaWJsZUV4dHJhQXJnczsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5VHlwZSA9IFJlZ2lzdGVyQXJnc0Fy
aXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IGVudHJ5VHlwZSA9IHJlZ2lzdGVyRW50cnlQb2ludFR5cGVGb3IoYXJndW1lbnRTdGFja1Nsb3Rz
KTsKLSAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudFN0YWNrU2xvdHMgPCBjb2RlQmxvY2tQYXJh
bWV0ZXJDb3VudCkKLSNlbHNlCi0gICAgICAgIGlmIChhcmd1bWVudFN0YWNrU2xvdHMgPCBjb2Rl
QmxvY2tQYXJhbWV0ZXJDb3VudCkKLSNlbmRpZgotICAgICAgICAgICAgZW50cnlUeXBlID0gU3Rh
Y2tBcmdzTXVzdENoZWNrQXJpdHk7CisgICAgICAgIGlmIChhcmd1bWVudFN0YWNrU2xvdHMgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAg
ICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVu
dHJ5VHlwZSA9IFN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBlbnRyeVR5cGUpOwor
ICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwogICAg
IH0KICAgICAKICAgICBsaW5rRGlyZWN0Rm9yKGV4ZWMsICpjYWxsTGlua0luZm8sIGNvZGVCbG9j
aywgY29kZVB0cik7CkBAIC0xMDY4LDE3ICsxMDIwLDggQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgfQotI2lmIE5VTUJF
Ul9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICBpZiAoY2FsbExpbmtJbmZv
LT5hcmd1bWVudHNJblJlZ2lzdGVycygpKSB7Ci0gICAgICAgIC8vIFB1bGwgaW50byB0aGUgY2Fj
aGUgdGhlIGFyaXR5IGNoZWNrIHJlZ2lzdGVyIGVudHJ5IGlmIHRoZSBjYWxsZXIgd2FudHMgYSBy
ZWdpc3RlciBlbnRyeS4KLSAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHVzZWQgYnkgdGhlIGdlbmVy
aWMgdmlydHVhbCBjYWxsIHRodW5rLgotICAgICAgICAodm9pZCkgZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBSZWdpc3RlckFyZ3NNdXN0Q2hlY2tBcml0eSk7Ci0gICAgICAgICh2b2lk
KSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGVudHJ5UG9pbnRUeXBlRm9yKGNhbGxM
aW5rSW5mby0+YXJndW1lbnRzTG9jYXRpb24oKSkpOwotCi0gICAgfQotI2VuZGlmCiAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5k
LCBTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAg
a2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6
VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IDY0YjZkODE1YmE2YzMwN2FjYjYxOTU1YWVh
YzczZDgxZjEwMWZkZDYuLjQwYzEyY2VjOTRlMDFhMDg0MDRmN2I2ZDk2NzIxZjEwNTFmNDgzMTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKQEAgLTQ0LDIyICs0NCwx
OCBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhS
ZWYgSklUVGh1bmtzOjpqaXRFbnRyeU5hdGl2ZUNhbGwoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIEpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSogdm0pCiB7Ci0gICAgaWYgKCF2bS0+
Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG5hdGl2ZUNhbGxT
dHViID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfbmF0
aXZlX2NhbGxfdHJhbXBvbGluZSk7Ci0gICAgICAgIHJldHVybiBKSVRFbnRyeVBvaW50c1dpdGhS
ZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYobmF0aXZl
Q2FsbFN0dWIpLCBuYXRpdmVDYWxsU3R1YiwgbmF0aXZlQ2FsbFN0dWIpOwotICAgIH0KLSAgICBy
ZXR1cm4gaml0RW50cnlTdHViKHZtLCBuYXRpdmVDYWxsR2VuZXJhdG9yKTsKKyAgICBpZiAoIXZt
LT5jYW5Vc2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlTExJbnRDb2RlUHRyKGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUpOworICAgIHJldHVy
biBjdGlTdHViKHZtLCBuYXRpdmVDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLUpJVEVudHJ5
UG9pbnRzV2l0aFJlZiBKSVRUaHVua3M6OmppdEVudHJ5TmF0aXZlQ29uc3RydWN0KFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSog
dm0pCiB7Ci0gICAgaWYgKCF2bS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIG5hdGl2ZUNvbnN0cnVjdFN0dWIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNy
ZWF0ZUxMSW50Q29kZVB0cihsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUpOwotICAg
ICAgICByZXR1cm4gSklURW50cnlQb2ludHNXaXRoUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKG5hdGl2ZUNvbnN0cnVjdFN0dWIpLCBuYXRpdmVDb25z
dHJ1Y3RTdHViLCBuYXRpdmVDb25zdHJ1Y3RTdHViKTsKLSAgICB9Ci0gICAgcmV0dXJuIGppdEVu
dHJ5U3R1Yih2bSwgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKTsKKyAgICBpZiAoIXZtLT5jYW5V
c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJ
bnRDb2RlUHRyKGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7CisgICAgcmV0dXJu
IGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSogdm0pCkBA
IC04NiwzMCArODIsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHVi
KFZNKiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogICAgIHJldHVybiBlbnRyeS5pdGVy
YXRvci0+dmFsdWU7CiB9CiAKLUpJVEVudHJ5UG9pbnRzV2l0aFJlZiBKSVRUaHVua3M6OmppdEVu
dHJ5U3R1YihWTSogdm0sIEpJVEVudHJ5R2VuZXJhdG9yIGdlbmVyYXRvcikKLXsKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgIEpJVEVudHJ5U3R1Yk1hcDo6QWRkUmVzdWx0IGVu
dHJ5ID0gbV9qaXRFbnRyeVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgSklURW50cnlQb2ludHNXaXRo
UmVmKCkpOwotICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KSB7Ci0gICAgICAgIC8vIENvbXBpbGF0
aW9uIHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlzdGluZyBlbnRyaWVzLgotICAgICAgICBB
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52
YWx1ZSA9IGdlbmVyYXRvcih2bSk7Ci0gICAgfQotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+
dmFsdWU7Ci19Ci0KLUpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIEpJVFRodW5rczo6
aml0Q2FsbFRodW5rRW50cnlTdHViKFZNKiB2bSwgSklUQ2FsbFRodW5rRW50cnlHZW5lcmF0b3Ig
Z2VuZXJhdG9yKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgSklUQ2Fs
bFRodW5rRW50cnlTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2ppdENhbGxUaHVua0VudHJ5
U3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBKSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZigp
KTsKLSAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAvLyBDb21waWxhdGlvbiB0
aHJlYWQgY2FuIG9ubHkgcmV0cmlldmUgZXhpc3RpbmcgZW50cmllcy4KLSAgICAgICAgQVNTRVJU
KCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUg
PSBnZW5lcmF0b3Iodm0pOwotICAgIH0KLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVl
OwotfQotCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwg
dm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJsZSA9IGpzQ2FzdDxOYXRpdmVFeGVj
dXRhYmxlKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKQEAgLTEyMSw3ICs5Myw3IEBAIE5hdGl2
ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSogdm0sIE5hdGl2ZUZ1
bmN0aW9uIGZ1bmN0aW9uLCBOCiAgICAgcmV0dXJuIGhvc3RGdW5jdGlvblN0dWIodm0sIGZ1bmN0
aW9uLCBjb25zdHJ1Y3RvciwgbnVsbHB0ciwgTm9JbnRyaW5zaWMsIG51bGxwdHIsIG5hbWUpOwog
fQogCi1OYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0qIHZt
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIEpJ
VEVudHJ5R2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYywgY29uc3QgRE9N
SklUOjpTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorTmF0aXZlRXhl
Y3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNKiB2bSwgTmF0aXZlRnVuY3Rp
b24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBz
aWduYXR1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRp
b25UaHJlYWQoKSk7ICAgIAogICAgIEFTU0VSVCh2bS0+Y2FuVXNlSklUKCkpOwpAQCAtMTMxLDE5
ICsxMDMsMTkgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHVi
KFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE4KIAogICAgIFJlZlB0cjxKSVRDb2Rl
PiBmb3JDYWxsOwogICAgIGlmIChnZW5lcmF0b3IpIHsKLSAgICAgICAgSklURW50cnlQb2ludHNX
aXRoUmVmIGVudHJ5ID0gZ2VuZXJhdG9yKHZtKTsKLSAgICAgICAgZm9yQ2FsbCA9IGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKGVudHJ5LCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBlbnRyeSA9IGdlbmVyYXRvcih2bSk7CisgICAgICAg
IGZvckNhbGwgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShlbnRyeSwgZW50cnkuY29kZSgp
LCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGZvckNhbGwg
PSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShKSVQ6OmNvbXBpbGVOYXRpdmVDYWxsRW50cnlQ
b2ludHModm0sIGZ1bmN0aW9uKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOworICAgICAgICBm
b3JDYWxsID0gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoSklUOjpjb21waWxlQ1RJTmF0aXZl
Q2FsbCh2bSwgZnVuY3Rpb24pLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgCi0gICAg
UmVmUHRyPEpJVENvZGU+IGZvckNvbnN0cnVjdCA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2Rl
KGppdEVudHJ5TmF0aXZlQ29uc3RydWN0KHZtKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwor
ICAgIFJlZlB0cjxKSVRDb2RlPiBmb3JDb25zdHJ1Y3QgPSBhZG9wdFJlZihuZXcgTmF0aXZlSklU
Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlO
YXRpdmVDb25zdHJ1Y3Qodm0pKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAgIAogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpj
cmVhdGUoKnZtLCBmb3JDYWxsLCBmdW5jdGlvbiwgZm9yQ29uc3RydWN0LCBjb25zdHJ1Y3Rvciwg
aW50cmluc2ljLCBzaWduYXR1cmUsIG5hbWUpOwogICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0aW9u
U3R1Yk1hcCwgc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwgbmFtZSksIFdl
YWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhpcykpOwogICAgIHJldHVy
biBuYXRpdmVFeGVjdXRhYmxlOwogfQogCi1OYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhv
c3RGdW5jdGlvblN0dWIoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgSklURW50cnlH
ZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5h
bWUpCitOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0qIHZt
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRy
aW5zaWMgaW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIGhvc3RG
dW5jdGlvblN0dWIodm0sIGZ1bmN0aW9uLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvciwg
Z2VuZXJhdG9yLCBpbnRyaW5zaWMsIG51bGxwdHIsIG5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUVGh1bmtzLmgKaW5kZXggYjU5M2JiMzA5OTNiYjdhNDFjZjQ0YjkyYmVlN2M3ZDdk
OTRkNGI4MS4uYWRkY2YyMzBjMzQ1ZDQyNzFiNjM3ZjA4Yjk0YzQxNmEzZWQxODJhNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNs
dWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkludHJpbnNpYy5oIgotI2luY2x1ZGUgIkpJVEVu
dHJ5UG9pbnRzLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVk
ZSAiVGh1bmtHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXZWFrLmgiCkBAIC01MywxOCArNTIsMTYg
QEAgcHVibGljOgogICAgIEpJVFRodW5rcygpOwogICAgIHZpcnR1YWwgfkpJVFRodW5rcygpOwog
Ci0gICAgSklURW50cnlQb2ludHNXaXRoUmVmIGppdEVudHJ5TmF0aXZlQ2FsbChWTSopOwotICAg
IEpJVEVudHJ5UG9pbnRzV2l0aFJlZiBqaXRFbnRyeU5hdGl2ZUNvbnN0cnVjdChWTSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDYWxsKFZNKik7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNvbnN0cnVjdChWTSopOwogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdGlOYXRpdmVUYWlsQ2FsbChWTSopOyAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7ICAgIAogCiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7Ci0gICAg
SklURW50cnlQb2ludHNXaXRoUmVmIGppdEVudHJ5U3R1YihWTSosIEpJVEVudHJ5R2VuZXJhdG9y
KTsKLSAgICBKSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZiBqaXRDYWxsVGh1bmtFbnRy
eVN0dWIoVk0qLCBKSVRDYWxsVGh1bmtFbnRyeUdlbmVyYXRvcik7CiAKICAgICBOYXRpdmVFeGVj
dXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0
aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IsIEpJVEVudHJ5R2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6
U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBo
b3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIEpJVEVudHJ5R2VuZXJhdG9yLCBJ
bnRyaW5zaWMsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9z
dEZ1bmN0aW9uU3R1YihWTSosIE5hdGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1
Y3RvciwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUq
LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlv
blN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwog
CkBAIC03MywxMCArNzAsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxU
aHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBDVElTdHViTWFwOwogICAgIENU
SVN0dWJNYXAgbV9jdGlTdHViTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxKSVRFbnRyeUdlbmVy
YXRvciwgSklURW50cnlQb2ludHNXaXRoUmVmPiBKSVRFbnRyeVN0dWJNYXA7Ci0gICAgSklURW50
cnlTdHViTWFwIG1faml0RW50cnlTdHViTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxKSVRDYWxs
VGh1bmtFbnRyeUdlbmVyYXRvciwgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWY+IEpJ
VENhbGxUaHVua0VudHJ5U3R1Yk1hcDsKLSAgICBKSVRDYWxsVGh1bmtFbnRyeVN0dWJNYXAgbV9q
aXRDYWxsVGh1bmtFbnRyeVN0dWJNYXA7CiAKICAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8TmF0aXZl
RnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+IEhvc3RGdW5jdGlvbktleTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDE3NmEwNTM3ODBi
YmY1ZGU1ZjY2ZjI3Nzg2ZWMxYjRlZDdmY2Y4NjguLmRjMGNjMWE0ZmYyZTg2MjFkMTM4YWE2NjQ4
ZGIwMzQxZGE4ZGVkMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmgKQEAgLTYzLDcgKzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXAgZW1p
dEp1bXBJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmTnVt
YmVyKFJlZ2lzdGVySUQpOwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZOb3ROdW1iZXIoUmVnaXN0
ZXJJRCk7Ci0gICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludDMyKFJlZ2lzdGVySUQgcmVnKTsK
ICAgICAgICAgdm9pZCBlbWl0VGFnSW50KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
OwogI2VuZGlmCiAKQEAgLTE2NCwxNyArMTYzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8sIGRzdCwgdGFnTWFza1JlZ2lzdGVyKTsKICAg
ICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0SnVtcElmTm90SW50MzIoUmVnaXN0ZXJJRCByZWcpCi0gICAgewotICAgICAgICBKdW1w
IHJlc3VsdCA9IGJyYW5jaDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0g
ICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZywgcmVnKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKICAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBkc3QpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEludDMyKGRzdCk7Cisg
ICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoNjQoQmVsb3csIGRzdCwgdGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKKyAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIoZHN0LCBkc3QpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAKaW5kZXggMzdlYjRjYzk1ZjczNDJjYTllMWQzMTU4
YjBlM2ZlODQxNjAxZDNlNy4uNzIxYTRlYWViNTc4MGFmNjQ2MWMzYWJkYTJlZmExMTFmYjcwMmE3
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAKQEAgLTE1OSwy
MCArMTU5LDYgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMo
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0Ojphcmd1
bWVudFJlZ2lzdGVycygpCi17Ci0gICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1lbnRJbmRl
eCA8IE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlM7IGFyZ3VtZW50SW5kZXgrKykgewotICAg
ICAgICBHUFJSZWcgYXJndW1lbnRSZWcgPSBhcmd1bWVudFJlZ2lzdGVyRm9yKGFyZ3VtZW50SW5k
ZXgpOwotCi0gICAgICAgIGlmIChhcmd1bWVudFJlZyAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAg
ICAgICAgcmVzdWx0LnNldChhcmd1bWVudFJlZyk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQogUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpCiB7CiAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlclNldC5oCmluZGV4IDhkMTI1MTYzNjQ0MGQwYzNmODY3NDNkNTk0MWIwZmI0MDQ2
ZWI5NDEuLjAzNTkwNjZlMzMyZWEwNTZjYWFiZDY1NzdkYjk5NjNhMjI1NzY1MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKQEAgLTQ5LDcgKzQ5LDYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBSZWdpc3RlclNldCBydW50aW1lUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGlj
IFJlZ2lzdGVyU2V0IHNwZWNpYWxSZWdpc3RlcnMoKTsgLy8gVGhlIHVuaW9uIG9mIHN0YWNrLCBy
ZXNlcnZlZCBoYXJkd2FyZSwgYW5kIHJ1bnRpbWUgcmVnaXN0ZXJzLgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgc3Rh
dGljIFJlZ2lzdGVyU2V0IGFyZ3VtZW50UmVnaXN0ZXJzKCk7IC8vIFJlZ2lzdGVycyB1c2VkIHRv
IHBhc3MgYXJndW1lbnRzIHdoZW4gbWFraW5nIEpTIENhbGxzCiAgICAgc3RhdGljIFJlZ2lzdGVy
U2V0IHZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOyAvLyBDYWxsZWUgc2F2ZSByZWdpc3RlcnMgdGhh
dCBtaWdodCBiZSBzYXZlZCBhbmQgdXNlZCBieSBhbnkgdGllci4KICAgICBzdGF0aWMgUmVnaXN0
ZXJTZXQgbGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsgLy8gUmVnaXN0ZXJzIHNh
dmVkIGFuZCB1c2VkIGJ5IHRoZSBMTEludC4KICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgZGZnQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOyAvLyBSZWdpc3RlcnMgc2F2ZWQgYW5kIHVzZWQgYnkgdGhlIERG
RyBKSVQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCAyODVmNjA0NGE3
MjY5OWRhYmI1MTRlNjQ0MWVlZmI3YzNiYTRlNTU3Li5kNGY5OGY4ODgzNTFlYzU1NTM3NmJmMDZm
MTNjMzU1MTFjMjYxZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAg
LTU0MCwyMSArNTQwLDIxIEBAIHZvaWQgcmVwYXRjaEluKAogICAgICAgICBmdGxUaHVua0F3YXJl
UmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0
aW9uKCksIG9wZXJhdGlvbkluKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhS
ZWYgdGh1bmtFbnRyeVBvaW50cykKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQogewot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbCh0aHVua0VudHJ5UG9pbnRzLmVudHJ5Rm9y
KGNhbGxMaW5rSW5mby5hcmd1bWVudHNMb2NhdGlvbigpKSkpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2Rl
TG9jYXRpb25MYWJlbChjb2RlUmVmLmNvZGUoKSkpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xv
d0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBKSVRDYWxsVGh1bmtFbnRy
eUdlbmVyYXRvciBnZW5lcmF0b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSogdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0g
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0tPmdldEpJVENhbGxUaHVua0VudHJ5
U3R1YihnZW5lcmF0b3IpKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+
Z2V0Q1RJU3R1YihnZW5lcmF0b3IpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0q
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBKSVRKU0NhbGxUaHVua0Vu
dHJ5UG9pbnRzV2l0aFJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxM
aW5rSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1
YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihjcmVh
dGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmsuY29kZVJlZigpLCAqdm0sIG51bGxwdHIsIHRy
dWUpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUo
dmlydHVhbFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNX
ZWJBc3NlbWJseVRvSlNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIGNhbGxlZSkKQEAgLTY0NCw3ICs2
NDQsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0lu
Zm8pOwogfQogCi1zdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIGNvZGVSZWYpCitz
dGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQogewogICAgIGlmIChjYWxsTGlua0luZm8u
aXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKQEAg
LTY3MSw3ICs2NzEsNyBAQCB2b2lkIHVubGlua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAg
ZGF0YUxvZygiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigp
LCAiXG4iKTsKICAgICAKLSAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRK
SVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikpOworICAgIHJldmVy
dENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikpOwogfQogCiB2b2lkIGxpbmtWaXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCkBAIC02ODMsOSArNjgzLDkgQEAgdm9pZCBsaW5rVmlydHVh
bEZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogICAgIGlm
IChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0
YUxvZygiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBj
YWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpLCAiXG4iKTsKIAotICAgIEpJVEpTQ2FsbFRodW5rRW50
cnlQb2ludHNXaXRoUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNhbGxM
aW5rSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1
YWxUaHVua0Zvcigmdm0sIGNhbGxMaW5rSW5mbyk7CiAgICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxM
aW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3Jl
YXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLmNvZGVSZWYoKSwgdm0sIG51bGxwdHIsIHRy
dWUpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUo
dmlydHVhbFRodW5rLCB2bSwgbnVsbHB0ciwgdHJ1ZSkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAt
NzQwLDcgKzc0MCw2IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgY2FsbExp
bmtJbmZvLnNldEhhc1NlZW5DbG9zdXJlKCk7CiAgICAgCiAgICAgVmVjdG9yPFBvbHltb3JwaGlj
Q2FsbENhc2U+IGNhbGxDYXNlczsKLSAgICBzaXplX3QgY2FsbGVyQXJndW1lbnRDb3VudCA9IGV4
ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7CiAgICAgCiAgICAgLy8gRmlndXJlIG91
dCB3aGF0IG91ciBjYXNlcyBhcmUuCiAgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlz
dCkgewpAQCAtNzUyLDcgKzc1MSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAg
ICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwogICAgICAgICAgICAgLy8gSWYgd2UgY2Fubm90IGhhbmRs
ZSBhIGNhbGxlZSwgZWl0aGVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIENvZGVCbG9jayBvciBi
ZWNhdXNlIGFyaXR5IG1pc21hdGNoLAogICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgaXQncyBi
ZXR0ZXIgZm9yIHRoaXMgd2hvbGUgdGhpbmcgdG8gYmUgYSB2aXJ0dWFsIGNhbGwuCi0gICAgICAg
ICAgICBpZiAoIWNvZGVCbG9jayB8fCBjYWxsZXJBcmd1bWVudENvdW50IDwgc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFy
YXJncygpKSB7CisgICAgICAgICAgICBpZiAoIWNvZGVCbG9jayB8fCBleGVjLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAg
ICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2FsbExpbmtJbmZvKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CkBAIC03NzYsMTAgKzc3NSw3IEBAIHZvaWQgbGlua1BvbHlt
b3JwaGljQ2FsbCgKICAgICB9CiAgICAgCiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxlZUdQUigpKTsKLQotICAgIGlmIChjYWxsTGlu
a0luZm8uYXJndW1lbnRzSW5SZWdpc3RlcnMoKSkKLSAgICAgICAgQVNTRVJUKGNhbGxlZUdQUiA9
PSBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkpOwotCisgICAgCiAgICAgQ0NhbGxIZWxwZXJz
IHN0dWJKaXQoJnZtLCBjYWxsZXJDb2RlQmxvY2spOwogICAgIAogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd1BhdGg7CkBAIC04MDEsOCArNzk3LDYgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKICAgICAgICAgaWYgKGZyYW1lU2h1
ZmZsZXIpCiAgICAgICAgICAgICBzY3JhdGNoR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQ
UigpOwotICAgICAgICBlbHNlIGlmIChjYWxsTGlua0luZm8uYXJndW1lbnRzSW5SZWdpc3RlcnMo
KSkKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpub25BcmdHUFIwOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKGNhbGxlZUdQUik7CiAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBm
dW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KQEAgLTg2OCwy
MyArODYyLDEzIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICBHUFJSZWcgZmFzdENv
dW50c0Jhc2VHUFI7CiAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCiAgICAgICAgIGZhc3RDb3VudHNC
YXNlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOwotICAgIGVsc2UgaWYgKGNhbGxM
aW5rSW5mby5hcmd1bWVudHNJblJlZ2lzdGVycygpKQotI2lmIENQVShBUk02NCkKLSAgICAgICAg
ZmFzdENvdW50c0Jhc2VHUFIgPSBHUFJJbmZvOjpub25BcmdHUFIxOwotI2Vsc2UKLSAgICAgICAg
ZmFzdENvdW50c0Jhc2VHUFIgPSBHUFJJbmZvOjpyZWdUMDsKLSNlbmRpZgogICAgIGVsc2Ugewog
ICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9CiAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86
OnJlZ1QzKTsKICAgICB9Ci0gICAgaWYgKGZhc3RDb3VudHMpCi0gICAgICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3Vu
dHNCYXNlR1BSKTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGZhc3RDb3VudHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7CiAgICAgaWYgKCFmcmFtZVNo
dWZmbGVyICYmIGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpCiAgICAgICAgIHN0dWJKaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwotCi0gICAgaW5jcmVtZW50Q291bnRlcigmc3R1YkppdCwg
Vk06OlBvbHltb3JwaGljQ2FsbCk7Ci0KICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNv
bXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOwogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKICAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFk
dmFuY2Uoc3R1YkppdCkpIHsKQEAgLTg5MywzMiArODc3LDggQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogICAgICAgICBDYWxsVmFyaWFudCB2YXJpYW50ID0gY2FsbENhc2VzW2Nhc2VJbmRl
eF0udmFyaWFudCgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJs
ZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLQotICAgICAgICBFbnRyeVBvaW50VHlwZSBlbnRy
eVR5cGUgPSBTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQ7Ci0jaWYgTlVNQkVSX09GX0pT
X0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmFy
Z3VtZW50c0luUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbENhc2VzW2Nhc2VJbmRleF0uY29kZUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAoY29k
ZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGNhbGxlZUFyZ3VtZW50Q291bnQgPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY2FsbGVlQXJndW1lbnRDb3VudCA9PSBjYWxsZXJBcmd1bWVudENvdW50IHx8
IGNhbGxlZUFyZ3VtZW50Q291bnQgPj0gTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JF
R0lTVEVSUykKLSAgICAgICAgICAgICAgICAgICAgZW50cnlUeXBlID0gUmVnaXN0ZXJBcmdzQXJp
dHlDaGVja05vdFJlcXVpcmVkOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBFbnRyeVBvaW50VHlwZSBlbnRyeUZvckFyZ0NvdW50ID0gSklURW50cnlQb2ludHM6
OnJlZ2lzdGVyRW50cnlUeXBlRm9yQXJndW1lbnRDb3VudChjYWxsZXJBcmd1bWVudENvdW50KTsK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPQotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENv
ZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKGVudHJ5Rm9yQXJnQ291bnQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoY29kZVB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5VHlw
ZSA9IGVudHJ5Rm9yQXJnQ291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVudHJ5VHlwZSA9IFJlZ2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdz
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IGVudHJ5VHlwZSA9IFJlZ2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdzOwotICAgICAgICB9Ci0j
ZW5kaWYKLQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9Ci0gICAgICAg
ICAgICB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRk
cmVzc0ZvckNhbGwoZW50cnlUeXBlKTsKLSAgICAgICAgQVNTRVJUKGNvZGVQdHIpOworICAgICAg
ICAgICAgdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFk
ZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoZmFzdENvdW50cykgewogICAgICAgICAgICAgc3R1YkppdC5hZGQzMigKQEAgLTkyNiw3ICs4
ODYsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWlu
dDMyX3QpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKLSAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90
KGNhbGxMaW5rSW5mby5hcmd1bWVudHNMb2NhdGlvbigpKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihzdHViSml0LCBmcmFtZVNodWZmbGVyLT5z
bmFwc2hvdCgpKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNhbGxzW2Nhc2VJ
bmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
Y2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewogICAgICAgICAgICAgc3R1YkppdC5wcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCk7CkBAIC05NDcsMTkgKzkwNywxOSBAQCB2b2lkIGxpbmtQb2x5bW9y
cGhpY0NhbGwoCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgZnJhbWVTaHVmZmxlci0+
c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwKSk7CiAjZWxzZQotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmFyZ3VtZW50c0xvY2F0
aW9uKCkgPT0gU3RhY2tBcmdzKQotICAgICAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVl
SlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKSk7Cisg
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQ
UkluZm86OnJlZ1QwKSk7CiAjZW5kaWYKICAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZv
clNsb3dQYXRoKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BS
SW5mbzo6cmVnVDEpOwogI2VuZGlmCiAgICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSAgICBzdHViSml0LnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vbkFyZ0dQUjEpOwotCi0gICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgCisg
ICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdU
NCk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAg
ICAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgc3R1YkppdCwgb3duZXIsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC05ODAsNyArOTQwLDcgQEAgdm9pZCBsaW5rUG9seW1v
cnBoaWNDYWxsKAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVs
QXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFi
ZWwodm0uZ2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dl
bmVyYXRvcikuZW50cnlGb3IoY2FsbExpbmtJbmZvLmFyZ3VtZW50c0xvY2F0aW9uKCkpKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHVi
KGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAgICAg
YXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAppbmRleCA0OWYwMDc3YzMwNTE4YTEyOTI2MDYy
ZDU5ZWRkZmI2MDRmZWZiYmJkLi4wNWY0MWY0ZGM5Mjc1MzJhOGRjMjUyMzVmYzVhMzY0NzhhNGVh
Y2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1
bmtKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtK
SVQuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJKSVQu
aCIKLSNpbmNsdWRlICJKSVRFbnRyeVBvaW50cy5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAg
LTM4LDQzICszNywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTcGVjaWFsaXplZFRo
dW5rSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgVGhpc0FyZ3VtZW50ID0gLTE7Ci0gICAgICAgIGVudW0gQXJnTG9jYXRp
b24geyBPblN0YWNrLCBJblJlZ2lzdGVycyB9OwotCi0gICAgICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQoVk0qIHZtLCBpbnQgZXhwZWN0ZWRBcmdDb3VudCwgQXNzZW1ibHlIZWxwZXJzOjpTcGlsbFJl
Z2lzdGVyVHlwZSBzcGlsbFR5cGUgPSBBc3NlbWJseUhlbHBlcnM6OlNwaWxsRXhhY3RseSwgQXJn
TG9jYXRpb24gYXJnTG9jYXRpb24gPSBPblN0YWNrKQorICAgICAgICBTcGVjaWFsaXplZFRodW5r
SklUKFZNKiB2bSwgaW50IGV4cGVjdGVkQXJnQ291bnQpCiAgICAgICAgICAgICA6IEpTSW50ZXJm
YWNlSklUKHZtKQogICAgICAgICB7Ci0jaWYgIU5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVO
VF9SRUdJU1RFUlMKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzcGlsbFR5cGUpOwotICAgICAg
ICAgICAgVU5VU0VEX1BBUkFNKGFyZ0xvY2F0aW9uKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAo
YXJnTG9jYXRpb24gPT0gSW5SZWdpc3RlcnMpIHsKLSAgICAgICAgICAgICAgICBtX3N0YWNrQXJn
dW1lbnRzRW50cnkgPSBsYWJlbCgpOwotICAgICAgICAgICAgICAgIGZpbGxBcmd1bWVudFJlZ2lz
dGVyc0Zyb21GcmFtZUJlZm9yZVByb2xvZ3VlKCk7Ci0gICAgICAgICAgICAgICAgbV9yZWdpc3Rl
ckFyZ3VtZW50c0VudHJ5ID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Q
cm9sb2d1ZSgpOwotICAgICAgICAgICAgICAgIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVn
aXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBl
Y3RlZCBudW1iZXIgb2YgYXJndW1lbnRzCi0gICAgICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50KCks
IFRydXN0ZWRJbW0zMihleHBlY3RlZEFyZ0NvdW50ICsgMSkpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgc3BpbGxBcmd1bWVudFJlZ2lzdGVyc1RvRnJhbWVCZWZvcmVQ
cm9sb2d1ZShleHBlY3RlZEFyZ0NvdW50ICsgMSwgc3BpbGxUeXBlKTsKLSAgICAgICAgICAgICAg
ICBtX3N0YWNrQXJndW1lbnRzRW50cnkgPSBsYWJlbCgpOwotI2VuZGlmCi0gICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgICAgICAgICBlbWl0U2F2ZVRoZW5N
YXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQg
d2UgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cwotICAgICAgICAgICAgICAg
IG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRBcmdDb3VudCArIDEp
KSk7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgICAg
ICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
KyAgICAgICAgICAgIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7CisgICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBhcmd1
bWVudHMKKyAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBUcnVzdGVkSW1tMzIoZXhw
ZWN0ZWRBcmdDb3VudCArIDEpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4cGxp
Y2l0IFNwZWNpYWxpemVkVGh1bmtKSVQoVk0qIHZtKQogICAgICAgICAgICAgOiBKU0ludGVyZmFj
ZUpJVCh2bSkKICAgICAgICAgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzcGls
bEFyZ3VtZW50UmVnaXN0ZXJzVG9GcmFtZUJlZm9yZVByb2xvZ3VlKCk7Ci0gICAgICAgICAgICBt
X3N0YWNrQXJndW1lbnRzRW50cnkgPSBMYWJlbCgpOwotI2VuZGlmCiAgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICAgICAgZW1pdFNhdmVUaGVuTWF0ZXJpYWxpemVU
YWdSZWdpc3RlcnMoKTsKICAgICAgICAgfQpAQCAtMTIwLDI2ICs5NCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIGxvYWRJbnQzMkFyZ3VtZW50KGFyZ3VtZW50LCBkc3QsIGNvbnZl
cnNpb25GYWlsZWQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoY29udmVyc2lvbkZh
aWxlZCk7CiAgICAgICAgIH0KLQotICAgICAgICB2b2lkIGNoZWNrSlNTdHJpbmdBcmd1bWVudChW
TSYgdm0sIFJlZ2lzdGVySUQgYXJndW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmFp
bHVyZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwoYXJndW1lbnQpKTsKLSAgICAgICAgICAg
IG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwKLSAgICAgICAgICAg
ICAgICBBZGRyZXNzKGFyZ3VtZW50LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAg
ICAgICAgICAgICAgIHZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFwcGVuZEZhaWx1cmUoY29uc3QgSnVtcCYgZmFpbHVyZSkKICAg
ICAgICAgewogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZmFpbHVyZSk7CiAgICAgICAg
IH0KLQotICAgICAgICB2b2lkIGxpbmtGYWlsdXJlSGVyZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZmFpbHVyZXMubGluayh0aGlzKTsKLSAgICAgICAgICAgIG1fZmFpbHVyZXMuY2xlYXIo
KTsKLSAgICAgICAgfQotCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCByZXR1cm5K
U1ZhbHVlKFJlZ2lzdGVySUQgc3JjKQogICAgICAgICB7CkBAIC0yMDUsMjkgKzE2NCwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYgZmluYWxpemUoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGZhbGxiYWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2ssIGNvbnN0
IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykK
ICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2Fs
bHNbaV0uc2Vjb25kKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHN0YWNr
RW50cnk7Ci0gICAgICAgICAgICBpZiAobV9zdGFja0FyZ3VtZW50c0VudHJ5LmlzU2V0KCkpCi0g
ICAgICAgICAgICAgICAgc3RhY2tFbnRyeSA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9zdGFj
a0FyZ3VtZW50c0VudHJ5KTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdp
c3RlckVudHJ5OwotICAgICAgICAgICAgaWYgKG1fcmVnaXN0ZXJBcmd1bWVudHNFbnRyeS5pc1Nl
dCgpKQotICAgICAgICAgICAgICAgIHJlZ2lzdGVyRW50cnkgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fcmVnaXN0ZXJBcmd1bWVudHNFbnRyeSk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBlbnRyeSA9IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3BlY2lhbGl6
ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKSk7Ci0KLSAgICAgICAgICAgIGlmIChtX3N0YWNr
QXJndW1lbnRzRW50cnkuaXNTZXQoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX3JlZ2lzdGVy
QXJndW1lbnRzRW50cnkuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpJVEVu
dHJ5UG9pbnRzV2l0aFJlZihlbnRyeSwgcmVnaXN0ZXJFbnRyeSwgcmVnaXN0ZXJFbnRyeSwgcmVn
aXN0ZXJFbnRyeSwgc3RhY2tFbnRyeSwgc3RhY2tFbnRyeSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihlbnRyeSwgZW50cnkuY29kZSgpLCBlbnRyeS5jb2Rl
KCksIGVudHJ5LmNvZGUoKSwgc3RhY2tFbnRyeSwgc3RhY2tFbnRyeSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJldHVybiBKSVRFbnRyeVBvaW50c1dpdGhSZWYoZW50cnksIGVudHJ5
LmNvZGUoKSwgZW50cnkuY29kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIlNwZWNpYWxpemVkIHRodW5rIGZvciAlcyIsIHRodW5rS2luZCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24g
dXNlcyBmcFJlZ2lzdGVyMCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKQEAgLTI2NCw4ICsyMDcsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IG1fZmFpbHVyZXM7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3JlZ2lzdGVyQXJndW1lbnRzRW50cnk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YWNrQXJndW1lbnRzRW50cnk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwg
RnVuY3Rpb25QdHI+PiBtX2NhbGxzOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3IuaAppbmRleCBiYzY5ZWQwZjFmMDFlZWZlNTIyYTlmY2E4N2FkNjk1
NWRjMDZhNWY4Li5kMzhlYzIzMzRiMjNlMjJlNWRkNTkwN2ViOTIwOTBjNGVlNmRiOTQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCkBAIC0zMCwxMiArMzAs
OCBAQAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjsKLWNsYXNzIEpJVEVudHJ5UG9pbnRzV2l0aFJlZjsKLWNsYXNzIEpJVEpTQ2FsbFRodW5r
RW50cnlQb2ludHNXaXRoUmVmOwogCiB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRo
dW5rR2VuZXJhdG9yKShWTSopOwotdHlwZWRlZiBKSVRFbnRyeVBvaW50c1dpdGhSZWYgKCpKSVRF
bnRyeUdlbmVyYXRvcikoVk0qKTsKLXR5cGVkZWYgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dp
dGhSZWYgKCpKSVRDYWxsVGh1bmtFbnRyeUdlbmVyYXRvcikoVk0qKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAppbmRleCA1ZWJmMWU2YzBmMGZiMDE2MThkNGQ2YWI4NjExZWVlNWJjYWM1NTIxLi43YTExZWE2
OTVhYjU2ZjRhMzExYTJiNWU3MDNlNWM3MzMyMDExNDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC03NywyMyArNzcsNiBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZN
KiB2bSkKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJUaHJvdyBleGNl
cHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIAotc3RhdGljIHZvaWQgY3Jl
YXRlUmVnaXN0ZXJBcmd1bWVudHNTcGlsbEVudHJ5KENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZW50cnlQb2ludHNbVGh1bmtFbnRyeVBvaW50VHlwZUNvdW50XSkKLXsK
LSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgZm9yICh1
bnNpZ25lZCBhcmdJbmRleCA9IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RF
UlM7IGFyZ0luZGV4LS0gPiAwOykgewotICAgICAgICBlbnRyeVBvaW50c1t0aHVua0VudHJ5UG9p
bnRUeXBlRm9yKGFyZ0luZGV4ICsgMSldID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIGppdC5lbWl0
UHV0QXJndW1lbnRUb0NhbGxGcmFtZUJlZm9yZVByb2xvZ3VlKGFyZ3VtZW50UmVnaXN0ZXJGb3JG
dW5jdGlvbkFyZ3VtZW50KGFyZ0luZGV4KSwgYXJnSW5kZXgpOwotICAgIH0KLQotICAgIGppdC5l
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShhcmd1bWVudFJlZ2lzdGVyRm9y
Q2FsbGVlKCksIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50
KCksIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oaml0KTsKLSAgICBVTlVTRURfUEFSQU0oZW50cnlQb2ludHMpOwotI2VuZGlmCi0gICAgZW50
cnlQb2ludHNbU3RhY2tBcmdzXSA9IGppdC5sYWJlbCgpOwotfQotCiBzdGF0aWMgdm9pZCBzbG93
UGF0aEZvcigKICAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZtLCBTcHJ0X0pJVE9wZXJhdGlv
bl9FQ2xpIHNsb3dQYXRoRnVuY3Rpb24pCiB7CkBAIC0xMDUsNyArODgsNyBAQCBzdGF0aWMgdm9p
ZCBzbG93UGF0aEZvcigKICAgICAvLyBNb3ZpbmcgdGhlIHN0YWNrIGRvd24gbWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwgYnl0ZXMgZ2l2ZXMgdXMgcm9vbSBmb3Igb3VyIDMgYXJndW1lbnRz
CiAgICAgLy8gYW5kIHNwYWNlIGZvciB0aGUgMTYgYnl0ZSByZXR1cm4gYXJlYS4KICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGppdC5t
b3ZlKEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgaml0
Lm1vdmUoR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigzMiksIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc2xv
d1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKQEAgLTExNyw3ICsxMDAsNyBA
QCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICNlbHNlCiAgICAgaWYgKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKQEAgLTE0NCw3ICsxMjcs
NyBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CiB9CiAKLUpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBv
biB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAv
LyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtl
IGEgQysrIGZ1bmN0aW9uIGNhbGwKQEAgLTE1MiwxNTMgKzEzNSw0NSBAQCBKSVRKU0NhbGxUaHVu
a0VudHJ5UG9pbnRzV2l0aFJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKICAgICAv
LyB0byBiZSBpbiByZWdUMC9yZWdUMSAocGF5bG9hZC90YWcpLCB0aGUgQ2FsbEZyYW1lIHRvIGhh
dmUgYWxyZWFkeQogICAgIC8vIGJlZW4gYWRqdXN0ZWQsIGFuZCBhbGwgb3RoZXIgcmVnaXN0ZXJz
IHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLgogICAgIENDYWxsSGVscGVycyBqaXQodm0pOwotCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVudHJ5UG9pbnRzW1RodW5rRW50cnlQb2ludFR5cGVD
b3VudF07Ci0KLSAgICBjcmVhdGVSZWdpc3RlckFyZ3VtZW50c1NwaWxsRW50cnkoaml0LCBlbnRy
eVBvaW50cyk7Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwpOwot
ICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19J
RCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwotICAgIEpJVEpTQ2FsbFRo
dW5rRW50cnlQb2ludHNXaXRoUmVmIGNhbGxFbnRyeVBvaW50cyA9IEpJVEpTQ2FsbFRodW5rRW50
cnlQb2ludHNXaXRoUmVmKGNvZGVSZWYpOwotCi0gICAgZm9yICh1bnNpZ25lZCBlbnRyeUluZGV4
ID0gU3RhY2tBcmdzOyBlbnRyeUluZGV4IDwgIFRodW5rRW50cnlQb2ludFR5cGVDb3VudDsgZW50
cnlJbmRleCsrKSB7Ci0gICAgICAgIGNhbGxFbnRyeVBvaW50cy5zZXRFbnRyeUZvcihzdGF0aWNf
Y2FzdDxUaHVua0VudHJ5UG9pbnRUeXBlPihlbnRyeUluZGV4KSwKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YoZW50cnlQb2ludHNbZW50cnlJbmRleF0pKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gY2FsbEVudHJ5UG9pbnRzOwotfQotCi1KSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRz
V2l0aFJlZiBsaW5rRGlyZWN0Q2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICAvLyBU
aGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVy
LiBXZSB3aWxsIGhlbmNlCi0gICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNh
bGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCi0gICAgLy8gdG8gcGVy
Zm9ybSBsaW5raW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0
IHRoZSBDYWxsTGlua0luZm8KLSAgICAvLyB0byBiZSBpbiBHUFJJbmZvOjpub25BcmdHUFIwLCB0
aGUgY2FsbGVlIHRvIGJlIGluIGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSwKLSAgICAvLyB0
aGUgQ2FsbEZyYW1lIHRvIGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkLCBhbmQgYXJndW1lbnRz
IGluIGFyZ3VtZW50IHJlZ2lzdGVycwotICAgIC8vIGFuZC9vciBpbiB0aGUgc3RhY2sgYXMgYXBw
cm9wcmlhdGUuCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGVudHJ5UG9pbnRzW1RodW5rRW50cnlQb2ludFR5cGVDb3VudF07Ci0KLSAg
ICBjcmVhdGVSZWdpc3RlckFyZ3VtZW50c1NwaWxsRW50cnkoaml0LCBlbnRyeVBvaW50cyk7Ci0K
LSAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6bm9uQXJn
R1BSMSk7IC8vIFNhdmUgY2FsbGVlJ3MgZnJhbWUgcG9pbnRlcgotICAgIGppdC5lbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgJnZtLT50b3BDYWxsRnJhbWUpOwotCi0gICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1t
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50cyhHUFJJbmZvOjpub25BcmdHUFIxLCBH
UFJJbmZvOjpub25BcmdHUFIwLCBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkpOwotICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9w
ZXJhdGlvbkxpbmtEaXJlY3RDYWxsKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKLSAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgIAotICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotCi0jaWYgTlVN
QkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIGppdC5lbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgYXJn
dW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKTsKLSAgICBHUFJSZWcgYXJnQ291bnRSZWcgPSBhcmd1
bWVudFJlZ2lzdGVyRm9yQXJndW1lbnRDb3VudCgpOwotICAgIGppdC5lbWl0R2V0UGF5bG9hZEZy
b21DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50LCBhcmdDb3VudFJlZyk7Ci0KLSAgICAvLyBsb2FkICJ0aGlzIgotICAgIGppdC5lbWl0R2V0
RnJvbUNhbGxGcmFtZUFyZ3VtZW50QmVmb3JlUHJvbG9ndWUoMCwgYXJndW1lbnRSZWdpc3RlckZv
ckZ1bmN0aW9uQXJndW1lbnQoMCkpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZpbGxVbmRl
ZmluZWRbTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSU107CisgICAgc2xv
d1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwpOwogICAgIAotICAgIGZvciAodW5z
aWduZWQgYXJnSW5kZXggPSAxOyBhcmdJbmRleCA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdV
TUVOVF9SRUdJU1RFUlM7IGFyZ0luZGV4KyspIHsKLSAgICAgICAgZmlsbFVuZGVmaW5lZFthcmdJ
bmRleF0gPSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgYXJnQ291
bnRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYXJnSW5kZXgpKTsKLSAgICAgICAg
aml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lQXJndW1lbnRCZWZvcmVQcm9sb2d1ZShhcmdJbmRleCwg
YXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpKTsKLSAgICB9Ci0K
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZUZpbGxpbmcgPSBqaXQuanVtcCgpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDE7IGFyZ0luZGV4IDwgTlVNQkVSX09GX0pTX0ZVTkNU
SU9OX0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJnSW5kZXgrKykgewotICAgICAgICBmaWxsVW5kZWZp
bmVkW2FyZ0luZGV4XS5saW5rKCZqaXQpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBhcmd1bWVudFJl
Z2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCkpOwotICAgIH0KLQotICAgIGRvbmVG
aWxsaW5nLmxpbmsoJmppdCk7Ci0jZW5kaWYKLQotCi0gICAgaml0LnJldCgpOwotCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxp
bmsgZGlyZWN0IGNhbGwgdGh1bmsiKSk7Ci0gICAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dp
dGhSZWYgY2FsbEVudHJ5UG9pbnRzID0gSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYo
Y29kZVJlZik7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBlbnRyeUluZGV4ID0gU3RhY2tBcmdz
OyBlbnRyeUluZGV4IDwgIFRodW5rRW50cnlQb2ludFR5cGVDb3VudDsgZW50cnlJbmRleCsrKSB7
Ci0gICAgICAgIGNhbGxFbnRyeVBvaW50cy5zZXRFbnRyeUZvcihzdGF0aWNfY2FzdDxUaHVua0Vu
dHJ5UG9pbnRUeXBlPihlbnRyeUluZGV4KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YoZW50cnlQb2ludHNbZW50cnlJbmRleF0pKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGNhbGxFbnRyeVBvaW50czsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
KCJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCiAvLyBGb3IgY2xvc3VyZSBvcHRp
bWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBj
bG9zdXJlcyBmb3IKIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8g
bG9zZSBiaWcgdGltZSBhbnl3YXkuCi1KSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZiBs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVu
dHJ5UG9pbnRzW1RodW5rRW50cnlQb2ludFR5cGVDb3VudF07Ci0KLSAgICBjcmVhdGVSZWdpc3Rl
ckFyZ3VtZW50c1NwaWxsRW50cnkoaml0LCBlbnRyeVBvaW50cyk7Ci0KICAgICBzbG93UGF0aEZv
cihqaXQsIHZtLCBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKTsKICAgICAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGlu
ayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKLSAgICBKSVRKU0NhbGxUaHVu
a0VudHJ5UG9pbnRzV2l0aFJlZiBjYWxsRW50cnlQb2ludHMgPSBKSVRKU0NhbGxUaHVua0VudHJ5
UG9pbnRzV2l0aFJlZihjb2RlUmVmKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGVudHJ5SW5k
ZXggPSBTdGFja0FyZ3M7IGVudHJ5SW5kZXggPCAgVGh1bmtFbnRyeVBvaW50VHlwZUNvdW50OyBl
bnRyeUluZGV4KyspIHsKLSAgICAgICAgY2FsbEVudHJ5UG9pbnRzLnNldEVudHJ5Rm9yKHN0YXRp
Y19jYXN0PFRodW5rRW50cnlQb2ludFR5cGU+KGVudHJ5SW5kZXgpLAotICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubG9jYXRpb25PZihlbnRyeVBvaW50c1tlbnRyeUluZGV4XSkpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gY2FsbEVudHJ5UG9pbnRzOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7
CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1lZ2Ftb3Jw
aGljIHZpcnR1YWwgY2FsbCB2cy4gYSBzbG93CiAvLyBwYXRoIHZpcnR1YWwgY2FsbCBzbyB0aGF0
IHdlIGNhbiBlbmFibGUgZmFzdCB0YWlsIGNhbGxzIGZvciBtZWdhbW9ycGhpYwogLy8gdmlydHVh
bCBjYWxscyBieSB1c2luZyB0aGUgc2h1ZmZsZXIuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4ODMxCi1KSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJl
ZiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIHsKLSAgICAvLyBUaGUgY2FsbGVlIGlzIGluIGFyZ3VtZW50UmVnaXN0
ZXJGb3JDYWxsZWUoKSAoZm9yIEpTVkFMVUUzMl82NCwgaXQgaXMgaW4gcmVnVDE6cmVnVDApLgot
ICAgIC8vIFRoZSBDYWxsTGlua0luZm8gaXMgaW4gR1BSSW5mbzo6bm9uQXJnR1BSMC4KLSAgICAv
LyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdp
c3Rlci4KLSAgICAvLy8gV2Ugd2lsbCBoZW5jZSBqdW1wIHRvIHRoZSBjYWxsZWUsIG9yIHNhdmUg
dGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsCi0gICAgLy8gZnJhbWUgd2hpbGUgd2UgbWFr
ZSBhIEMrKyBmdW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBKSVQgb3BlcmF0aW9uLgor
ICAgIC8vIFRoZSBjYWxsZWUgaXMgaW4gcmVnVDAgKGZvciBKU1ZBTFVFMzJfNjQsIHRoZSB0YWcg
aXMgaW4gcmVnVDEpLgorICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ss
IG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisgICAgLy8ganVtcCB0byB0
aGUgY2FsbGVlLCBvciBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3
aGlsZSB3ZQorICAgIC8vIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbCB0byB0aGUgYXBwcm9wcmlh
dGUgSklUIG9wZXJhdGlvbi4KIAogICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7Ci0KLSAgICBHUFJSZWcgY2FsbGVlUmVn
ID0gYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgR1BSUmVnIGNhbGxlZVRhZ1JlZyA9IEdQUkluZm86OnJlZ1QxOwotI2VuZGlmCi0gICAgR1BS
UmVnIHRhcmdldFJlZyA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Ci0gICAgLy8gVGhpcyBpcyB0aGUg
Q2FsbExpbmtJbmZvKiBvbiBlbnRyeSBhbmQgdXNlZCBsYXRlciBhcyBhIHRlbXAuCi0gICAgR1BS
UmVnIGNhbGxMaW5rSW5mb0FuZFRlbXBSZWcgPSBHUFJJbmZvOjpub25BcmdHUFIwOwotCi0gICAg
aml0LmZpbGxBcmd1bWVudFJlZ2lzdGVyc0Zyb21GcmFtZUJlZm9yZVByb2xvZ3VlKCk7Ci0KLSNp
ZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIHJlZ2lzdGVyRW50cnkgPSBqaXQubGFiZWwoKTsKLSNlbmRpZgotCi0gICAg
aW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6VmlydHVhbENhbGwpOwotCi0gICAgLy8gVGhpcyBp
cyBhIHNsb3cgcGF0aCBleGVjdXRpb24uIENvdW50IHRoZSBzbG93IHBhdGggZXhlY3V0aW9uIGZv
ciB0aGUgcHJvZmlsZXIuCisgICAgCisgICAgLy8gVGhpcyBpcyBhIHNsb3cgcGF0aCBleGVjdXRp
b24sIGFuZCByZWdUMiBjb250YWlucyB0aGUgQ2FsbExpbmtJbmZvLiBDb3VudCB0aGUKKyAgICAv
LyBzbG93IHBhdGggZXhlY3V0aW9uIGZvciB0aGUgcHJvZmlsZXIuCiAgICAgaml0LmFkZDMyKAog
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0FuZFRlbXBSZWcsIENhbGxMaW5rSW5mbzo6b2Zmc2V0
T2ZTbG93UGF0aENvdW50KCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QyLCBDYWxsTGlua0luZm86Om9mZnNldE9mU2xvd1BhdGhDb3VudCgpKSk7CiAKICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcgdGhlc2Ug
Y2hlY2tzLiBJbiBtYW55IGNhc2VzLAogICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFs
dWUgaXMgZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KQEAgLTMw
Niw3MiArMTgxLDU0IEBAIEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIHZpcnR1YWxU
aHVua0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZVJlZywgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86
OnJlZ1QwLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICNlbHNlCiAgICAgc2xvd0Nhc2Uu
YXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBjYWxsZWVUYWdSZWcsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaElmTm90VHlwZShjYWxsZWVSZWcsIEpTRnVuY3Rpb25UeXBlKSk7CisgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb25U
eXBlKSk7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCiAg
ICAgCiAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxs
ZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgdGFyZ2V0
UmVnKTsKLSAgICAKLSAgICBBcmd1bWVudHNMb2NhdGlvbiBhcmd1bWVudHNMb2NhdGlvbiA9IGNh
bGxMaW5rSW5mby5pc1RhaWxDYWxsKCkgPyBTdGFja0FyZ3MgOiBjYWxsTGlua0luZm8uYXJndW1l
bnRzTG9jYXRpb24oKTsKLQorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgR1BSSW5m
bzo6cmVnVDQpOwogICAgIGppdC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCi0gICAgICAgICAgICB0YXJnZXRSZWcsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkVudHJ5
Rm9yKAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwK
LSAgICAgICAgICAgICAgICBlbnRyeVBvaW50VHlwZUZvcihhcmd1bWVudHNMb2NhdGlvbikpKSwK
LSAgICAgICAgdGFyZ2V0UmVnKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCB0YXJnZXRSZWcpKTsKKyAgICAgICAgICAgIEdQUkluZm86
OnJlZ1Q0LCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Io
CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpKSksCisg
ICAgICAgIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRl
c3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUNCkpOwogICAgIAogICAgIC8v
IE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRl
ZCB0byBtYWtpbmcgYSBmYXN0CiAgICAgLy8gY2FsbC4KICAgICAKICAgICAvLyBNYWtlIGEgdGFp
bCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCi0gICAgZW1pdFBvaW50
ZXJWYWxpZGF0aW9uKGppdCwgdGFyZ2V0UmVnKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24o
aml0LCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkp
IHsKLSAgICAgICAgaml0LnNwaWxsQXJndW1lbnRSZWdpc3RlcnNUb0ZyYW1lQmVmb3JlUHJvbG9n
dWUoKTsKLSAgICAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChjYWxsTGlu
a0luZm9BbmRUZW1wUmVnKTsKLSAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3codGFy
Z2V0UmVnKTsKKyAgICAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86
OnJlZ1Q0KTsKICAgICB9Ci0gICAgaml0Lmp1bXAodGFyZ2V0UmVnKTsKLSAgICBzbG93Q2FzZS5s
aW5rKCZqaXQpOwotCi0gICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6VmlydHVhbFNsb3dD
YWxsKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUNCk7CiAKKyAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOworICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2
ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBqaXQuc3BpbGxBcmd1bWVudFJlZ2lzdGVy
c1RvRnJhbWVCZWZvcmVQcm9sb2d1ZSgpOwogICAgIAogICAgIHNsb3dQYXRoRm9yKGppdCwgdm0s
IG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlUmVmIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsCisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUoCisgICAgICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIlZpcnR1YWwgJXMgc2xvdyBwYXRo
IHRodW5rIiwKICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlJl
Z3VsYXIgPyAiY2FsbCIgOiBjYWxsTGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFp
bCA/ICJ0YWlsIGNhbGwiIDogImNvbnN0cnVjdCIpKTsKLSAgICBKSVRKU0NhbGxUaHVua0VudHJ5
UG9pbnRzV2l0aFJlZiBjYWxsRW50cnlQb2ludHMgPSBKSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRz
V2l0aFJlZihjb2RlUmVmKTsKLQotICAgIGNhbGxFbnRyeVBvaW50cy5zZXRFbnRyeUZvcihTdGFj
a0FyZ3NFbnRyeSwgY29kZVJlZi5jb2RlKCkpOwotCi0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdpc3RlckVu
dHJ5UHRyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihyZWdpc3RlckVudHJ5KTsKLQotICAgIGZv
ciAodW5zaWduZWQgZW50cnlJbmRleCA9IFJlZ2lzdGVyMUFyZ0VudHJ5OyBlbnRyeUluZGV4IDwg
IFRodW5rRW50cnlQb2ludFR5cGVDb3VudDsgZW50cnlJbmRleCsrKQotICAgICAgICBjYWxsRW50
cnlQb2ludHMuc2V0RW50cnlGb3Ioc3RhdGljX2Nhc3Q8VGh1bmtFbnRyeVBvaW50VHlwZT4oZW50
cnlJbmRleCksIHJlZ2lzdGVyRW50cnlQdHIpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gY2FsbEVu
dHJ5UG9pbnRzOwogfQogCiBlbnVtIFRodW5rRW50cnlUeXBlIHsgRW50ZXJWaWFDYWxsLCBFbnRl
clZpYUp1bXBXaXRoU2F2ZWRUYWdzLCBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzIH07CiAK
LXN0YXRpYyBKSVRFbnRyeVBvaW50c1dpdGhSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBUaHVua0VudHJ5VHlwZSBlbnRyeVR5cGUgPSBF
bnRlclZpYUNhbGwpCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVy
YXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1bmtFbnRyeVR5cGUg
ZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBhYmxlIHRvIGxvZyBTaGFkb3dDaGlja2VuIHByb2xvZ3VlIHBhY2tldHMuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTY4OQpAQCAtMzgwLDE0ICsy
MzcsOCBAQCBzdGF0aWMgSklURW50cnlQb2ludHNXaXRoUmVmIG5hdGl2ZUZvckdlbmVyYXRvcihW
TSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQgawogICAgIAogICAgIEpTSW50ZXJmYWNlSklU
IGppdCh2bSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhY2tBcmdzRW50cnk7Ci0K
ICAgICBzd2l0Y2ggKGVudHJ5VHlwZSkgewogICAgIGNhc2UgRW50ZXJWaWFDYWxsOgotICAgICAg
ICBqaXQuc3BpbGxBcmd1bWVudFJlZ2lzdGVyc1RvRnJhbWVCZWZvcmVQcm9sb2d1ZSgpOwotCi0g
ICAgICAgIHN0YWNrQXJnc0VudHJ5ID0gaml0LmxhYmVsKCk7Ci0KICAgICAgICAgaml0LmVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRW50ZXJWaWFKdW1w
V2l0aFNhdmVkVGFnczoKQEAgLTUyOCwzMyArMzc5LDI1IEBAIHN0YXRpYyBKSVRFbnRyeVBvaW50
c1dpdGhSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBrCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKIAogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGVSZWYgRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJuYXRpdmUgJXMl
cyB0cmFtcG9saW5lIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAi
VGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0
U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtp
bmQpLmRhdGEoKSkpOwotICAgIGlmIChlbnRyeVR5cGUgPT0gRW50ZXJWaWFDYWxsKSB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzdGFja0VudHJ5UHRyID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihzdGFja0FyZ3NFbnRyeSk7Ci0KLSAgICAgICAgcmV0dXJuIEpJVEVudHJ5UG9pbnRz
V2l0aFJlZihjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgY29kZVJlZi5jb2RlKCksIGNvZGVSZWYu
Y29kZSgpLCBzdGFja0VudHJ5UHRyLCBzdGFja0VudHJ5UHRyKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gSklURW50cnlQb2ludHNXaXRoUmVmKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBjb2RlUmVm
LmNvZGUoKSk7Ci0KKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJuYXRp
dmUgJXMlcyB0cmFtcG9saW5lIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRh
Z3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBX
aXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3Ry
aW5nKGtpbmQpLmRhdGEoKSkpOwogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgbmF0aXZlQ2Fs
bEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgQ29kZUZv
ckNhbGwpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxHZW5lcmF0
b3IoVk0qIHZtKQogewotICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JD
YWxsLCBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzKS5jb2RlUmVmKCk7CisgICAgcmV0dXJuIG5h
dGl2ZUZvckdlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhTYXZlZFRh
Z3MpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2
ZWRUYWdzR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9y
KHZtLCBDb2RlRm9yQ2FsbCwgRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncykuY29kZVJlZigp
OworICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBFbnRlclZp
YUp1bXBXaXRob3V0U2F2ZWRUYWdzKTsKIH0KIAotSklURW50cnlQb2ludHNXaXRoUmVmIG5hdGl2
ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZl
Q29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJh
dG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KQEAgLTY5Myw0MyArNTM2LDYgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdG9yKFZNKiB2bSkKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ1bnJlYWNoYWJsZSB0aHVuayIpKTsKIH0KIAot
I2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLXN0YXRpYyB2b2lk
IHN0cmluZ0NoYXJMb2FkUmVnQ2FsbChTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIFZNKiB2bSkK
LXsKLSAgICAvLyBsb2FkIHN0cmluZwotICAgIEdQUlJlZyB0aGlzUmVnID0gYXJndW1lbnRSZWdp
c3RlckZvckZ1bmN0aW9uQXJndW1lbnQoMCk7Ci0gICAgR1BSUmVnIGluZGV4UmVnID0gYXJndW1l
bnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoMik7Ci0gICAgR1BSUmVnIGxlbmd0aFJlZyA9
IGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KDMpOwotICAgIEdQUlJlZyB0ZW1w
UmVnID0gU3BlY2lhbGl6ZWRUaHVua0pJVDo6bm9uQXJnR1BSMDsKLQotICAgIGppdC5jaGVja0pT
U3RyaW5nQXJndW1lbnQoKnZtLCB0aGlzUmVnKTsKLQotICAgIC8vIExvYWQgc3RyaW5nIGxlbmd0
aCB0byByZWdUMiwgYW5kIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcgdGhlIGRhdGEgcG9p
bnRlciBpbnRvIHJlZ1QwCi0gICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
aGlzUmVnLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nTGVuZ3RoT2Zmc2V0KCkpLCBsZW5ndGhSZWcp
OwotICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRoaXNSZWcsIFRodW5r
SGVscGVyczo6anNTdHJpbmdWYWx1ZU9mZnNldCgpKSwgdGVtcFJlZyk7Ci0gICAgaml0LmFwcGVu
ZEZhaWx1cmUoaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcFJlZykp
OwotCi0gICAgLy8gbG9hZCBpbmRleAotICAgIGppdC5tb3ZlKGFyZ3VtZW50UmVnaXN0ZXJGb3JG
dW5jdGlvbkFyZ3VtZW50KDEpLCBpbmRleFJlZyk7Ci0gICAgaml0LmFwcGVuZEZhaWx1cmUoaml0
LmVtaXRKdW1wSWZOb3RJbnQzMihpbmRleFJlZykpOwotCi0gICAgLy8gRG8gYW4gdW5zaWduZWQg
Y29tcGFyZSB0byBzaW11bHRhbmVvdXNseSBmaWx0ZXIgbmVnYXRpdmUgaW5kaWNlcyBhcyB3ZWxs
IGFzIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCi0gICAgaml0LmFwcGVuZEZhaWx1cmUoaml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4UmVnLCBsZW5ndGhS
ZWcpKTsKLQotICAgIC8vIExvYWQgdGhlIGNoYXJhY3RlcgotICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQ6Okp1bXBMaXN0IGlzMTZCaXQ7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVDo6SnVtcExpc3Qg
Y29udDhCaXQ7Ci0gICAgLy8gTG9hZCB0aGUgc3RyaW5nIGZsYWdzCi0gICAgaml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcFJlZywgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQo
KSksIGxlbmd0aFJlZyk7Ci0gICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcFJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgdGVtcFJlZyk7Ci0gICAgaXMxNkJp
dC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbGVuZ3RoUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkp
KTsKLSAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCh0ZW1wUmVnLCBpbmRl
eFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCAwKSwgdGVtcFJlZyk7Ci0gICAgY29udDhC
aXQuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgIGlzMTZCaXQubGluaygmaml0KTsKLSAgICBqaXQu
bG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgodGVtcFJlZywgaW5kZXhSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIHRlbXBSZWcpOwotICAgIGNvbnQ4Qml0LmxpbmsoJmpp
dCk7Ci19Ci0jZWxzZQogc3RhdGljIHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6ZWRUaHVu
a0pJVCYgaml0LCBWTSogdm0pCiB7CiAgICAgLy8gbG9hZCBzdHJpbmcKQEAgLTc1OSw3ICs1NjUs
NiBAQCBzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXplZFRodW5rSklUJiBqaXQs
IFZNKiB2bSkKICAgICBqaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNUd28sIDApLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAg
Y29udDhCaXQubGluaygmaml0KTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBjaGFyVG9TdHJp
bmcoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0sIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBzY3JhdGNoKQogewpAQCAtNzY5LDY5ICs1NzQsMzQgQEAgc3RhdGljIHZv
aWQgY2hhclRvU3RyaW5nKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtLCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXMKICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9CiAKLUpJVEVudHJ5UG9pbnRzV2l0aFJlZiBj
aGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNo
YXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNU
SU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAx
LCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsRXhhY3RseSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6SW5S
ZWdpc3RlcnMpOwotICAgIHN0cmluZ0NoYXJMb2FkUmVnQ2FsbChqaXQsIHZtKTsKLSAgICBqaXQu
cmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6bm9uQXJnR1BSMCk7Ci0gICAgaml0Lmxp
bmtGYWlsdXJlSGVyZSgpOwotICAgIGppdC5zcGlsbEFyZ3VtZW50UmVnaXN0ZXJzVG9GcmFtZSgy
LCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsRXhhY3RseSk7Ci0gICAgaml0LmFwcGVuZEZhaWx1cmUo
aml0Lmp1bXAoKSk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKLSNlbHNlCiAgICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQodm0sIDEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCwgdm0pOwogICAgIGpp
dC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGpp
dC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2Rl
QXQiKTsKLSNlbmRpZgogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgY2hhckF0VGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJT
Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEsIEFzc2VtYmx5SGVscGVyczo6U3Bp
bGxFeGFjdGx5LCBTcGVjaWFsaXplZFRodW5rSklUOjpJblJlZ2lzdGVycyk7Ci0gICAgc3RyaW5n
Q2hhckxvYWRSZWdDYWxsKGppdCwgdm0pOwotICAgIGNoYXJUb1N0cmluZyhqaXQsIHZtLCBTcGVj
aWFsaXplZFRodW5rSklUOjpub25BcmdHUFIwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZXR1cm5W
YWx1ZUdQUiwgYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoMykpOwotICAgIGpp
dC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmV0dXJuVmFsdWVHUFIpOwotICAg
IGppdC5saW5rRmFpbHVyZUhlcmUoKTsKLSAgICBqaXQuc3BpbGxBcmd1bWVudFJlZ2lzdGVyc1Rv
RnJhbWUoMiwgQXNzZW1ibHlIZWxwZXJzOjpTcGlsbEV4YWN0bHkpOwotICAgIGppdC5hcHBlbmRG
YWlsdXJlKGppdC5qdW1wKCkpOwotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJz
LT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjaGFyQXQiKTsKLSNlbHNlCiAgICAgU3BlY2lhbGl6
ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCwgdm0pOwogICAg
IGNoYXJUb1N0cmluZyhqaXQsIHZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBq
aXQucmV0dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4g
aml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2hhckF0
Iik7Ci0jZW5kaWYKIH0KIAotSklURW50cnlQb2ludHNXaXRoUmVmIGZyb21DaGFyQ29kZVRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVu
a0dlbmVyYXRvcihWTSogdm0pCiB7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5U
X1JFR0lTVEVSUwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxLCBBc3NlbWJseUhl
bHBlcnM6OlNwaWxsRXhhY3RseSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6SW5SZWdpc3RlcnMpOwot
ICAgIC8vIGxvYWQgY2hhciBjb2RlCi0gICAgaml0Lm1vdmUoYXJndW1lbnRSZWdpc3RlckZvckZ1
bmN0aW9uQXJndW1lbnQoMSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6Om5vbkFyZ0dQUjApOwotICAg
IGppdC5hcHBlbmRGYWlsdXJlKGppdC5lbWl0SnVtcElmTm90SW50MzIoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6bm9uQXJnR1BSMCkpOwotCi0gICAgY2hhclRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxp
emVkVGh1bmtKSVQ6Om5vbkFyZ0dQUjAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJldHVyblZhbHVl
R1BSLCBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudCgzKSk7Ci0gICAgaml0LnJl
dHVybkpTQ2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgaml0
LmxpbmtGYWlsdXJlSGVyZSgpOwotICAgIGppdC5zcGlsbEFyZ3VtZW50UmVnaXN0ZXJzVG9GcmFt
ZSgyLCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsQWxsKTsKLSAgICBqaXQuYXBwZW5kRmFpbHVyZShq
aXQuanVtcCgpKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlVGFpbENhbGwodm0pLCAiZnJvbUNoYXJDb2RlIik7Ci0jZWxzZQotICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAxLCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsQWxsKTsKKyAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgLy8gbG9hZCBjaGFyIGNvZGUKICAgICBq
aXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAg
IGNoYXJUb1N0cmluZyhqaXQsIHZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBq
aXQucmV0dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4g
aml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZnJvbUNo
YXJDb2RlIik7Ci0jZW5kaWYKIH0KIAotSklURW50cnlQb2ludHNXaXRoUmVmIGNsejMyVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNsejMyVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRBcmdKdW1wOwpAQCAtODUyLDExICs2MjIsMTEgQEAg
SklURW50cnlQb2ludHNXaXRoUmVmIGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJj
bHozMiIpOwogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgc3FydFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBw
b3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMtPmpp
dEVudHJ5TmF0aXZlQ2FsbCh2bSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
dm0pKTsKIAogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDApOwpAQCAtMTAxMiwxMiArNzgyLDEyIEBAIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVy
KHRydW5jKTsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBoYWxmQ29uc3RhbnQgPSAwLjU7CiAgICAg
Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
bkludEp1bXA7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihmbG9vcikgfHwgIWppdC5z
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIHZtLT5qaXRTdHVicy0+aml0
RW50cnlOYXRpdmVDYWxsKHZtKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2
bSkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmppdCk7CkBAIC0xMDU1LDExICs4MjUs
MTEgQEAgSklURW50cnlQb2ludHNXaXRoUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2
bSksICJmbG9vciIpOwogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgY2VpbFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIVVu
YXJ5RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
Ci0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMtPmppdEVudHJ5TmF0aXZlQ2FsbCh2bSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTEwNzgsMTEgKzg0OCwxMSBAQCBKSVRFbnRy
eVBvaW50c1dpdGhSZWYgY2VpbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKICAgICByZXR1cm4gaml0
LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2VpbCIpOwog
fQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgdHJ1bmNUaHVua0dlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJ1bmNUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAg
U3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdy
YXBwZXIodHJ1bmMpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJl
dHVybiB2bS0+aml0U3R1YnMtPmppdEVudHJ5TmF0aXZlQ2FsbCh2bSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25J
bnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKQEAgLTExMDEsMTEgKzg3MSwxMSBAQCBKSVRFbnRyeVBvaW50c1dpdGhS
ZWYgdHJ1bmNUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInRydW5jIik7CiB9CiAKLUpJVEVu
dHJ5UG9pbnRzV2l0aFJlZiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1Jv
dW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gdm0t
PmppdFN0dWJzLT5qaXRFbnRyeU5hdGl2ZUNhbGwodm0pOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsK
ICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAs
IG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCk7CkBAIC0xMTM1LDM3ICs5MDUsMzcgQEAgSklURW50cnlQb2ludHNXaXRoUmVmIHJvdW5k
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyb3VuZCIpOwogfQogCi1KSVRFbnRyeVBvaW50
c1dpdGhSZWYgZXhwVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGV4cFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFw
cGVyKGV4cCkpCi0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMtPmppdEVudHJ5TmF0aXZlQ2Fs
bCh2bSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpCi0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMtPmppdEVudHJ5TmF0aXZlQ2Fs
bCh2bSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBqaXQu
bG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJsZVRvRG91YmxlUHJlc2Vy
dmluZ1JldHVybihVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKTsKICAgICBqaXQucmV0dXJuRG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxp
emUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJleHAiKTsKIH0KIAotSklU
RW50cnlQb2ludHNXaXRoUmVmIGxvZ1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgaWYgKCFVbmFyeURv
dWJsZU9wV3JhcHBlcihsb2cpKQotICAgICAgICByZXR1cm4gdm0tPmppdFN0dWJzLT5qaXRFbnRy
eU5hdGl2ZUNhbGwodm0pOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gdm0tPmppdFN0dWJzLT5qaXRFbnRy
eU5hdGl2ZUNhbGwodm0pOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJl
Z1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0Rv
dWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSk7CiAgICAgaml0
LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4g
aml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAibG9nIik7
CiB9CiAKLUpJVEVudHJ5UG9pbnRzV2l0aFJlZiBhYnNUaHVua0dlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0
aW5nUG9pbnRBYnMoKSkKLSAgICAgICAgcmV0dXJuIHZtLT5qaXRTdHVicy0+aml0RW50cnlOYXRp
dmVDYWxsKHZtKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICB1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CkBAIC0xMjE4LDcgKzk4OCw3IEBAIEpJVEVudHJ5
UG9pbnRzV2l0aFJlZiBhYnNUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImFicyIpOwogfQog
Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgaW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQgaml0KHZtLCAyKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25J
bnRBcmcwSnVtcDsKQEAgLTEyNDksMTEgKzEwMTksMTEgQEAgSklURW50cnlQb2ludHNXaXRoUmVm
IGltdWxUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImltdWwiKTsKIH0KIAotSklURW50cnlQ
b2ludHNXaXRoUmVmIHJhbmRvbVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiByYW5kb21UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQodm0sIDApOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
KQotICAgICAgICByZXR1cm4gdm0tPmppdFN0dWJzLT5qaXRFbnRyeU5hdGl2ZUNhbGwodm0pOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGppdC5lbWl0UmFuZG9tVGh1bmsoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAp
OwpAQCAtMTI2MSwyMiArMTAzMSwxNiBAQCBKSVRFbnRyeVBvaW50c1dpdGhSZWYgcmFuZG9tVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1
YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInJhbmRvbSIpOwogI2Vsc2UKLSAgICByZXR1cm4g
dm0tPmppdFN0dWJzLT5qaXRFbnRyeU5hdGl2ZUNhbGwodm0pOworICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKICNlbmRpZgogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgYm91
bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qIHZtKQogewot
ICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZXM7Ci0KLSAgICBqaXQuc3BpbGxBcmd1bWVudFJlZ2lzdGVyc1RvRnJhbWVCZWZv
cmVQcm9sb2d1ZSgpOwotICAgIAotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQ6OkxhYmVsIHN0YWNr
QXJnc0VudHJ5KCZqaXQpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAogICAgIGpp
dC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotCisgICAgCiAgICAgLy8gU2V0IHVwIG91ciBjYWxs
IGZyYW1lLgogICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsKICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwpAQCAtMTM0Niwy
MyArMTExMCwyMCBAQCBKSVRFbnRyeVBvaW50c1dpdGhSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwogICAgIGpp
dC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBH
UFJJbmZvOjpyZWdUMCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mRW50cnlGb3IoQ29kZUZvckNh
bGwsIFN0YWNrQXJnc011c3RDaGVja0FyaXR5KSksCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdU
MCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVG
b3JDYWxsKSksCiAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICBmYWlsdXJlcy5hcHBlbmQo
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBub0NvZGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhl
bHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwKTsKICAgICAKICAgICBlbWl0UG9pbnRlclZhbGlk
YXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDAp
OwogICAgIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsK
LQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
IlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5vIGFyZ3Vt
ZW50cyIpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3RhY2tFbnRyeVB0ciA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Yoc3RhY2tBcmdzRW50cnkpOwotCi0gICAgcmV0dXJuIEpJVEVudHJ5
UG9pbnRzV2l0aFJlZihjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgY29kZVJlZi5jb2RlKCksIGNv
ZGVSZWYuY29kZSgpLCBzdGFja0VudHJ5UHRyLCBzdGFja0VudHJ5UHRyKTsKKyAgICAKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgbGlu
a0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CisgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUoCisgICAgICAgIGxpbmtCdWZmZXIsICgiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5k
IGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIikpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4
IDMwNDRmMGE0ZjgyMTZmMWVmMzRmYTkwZmI5MzQ3ZWUwMTdmZWQxMGQuLjYzZTg4MmEyM2NhNTBm
OGJhNzAzODhhMjQ2MGE0MWZiMTUzY2VmN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiSklURW50cnlQb2lu
dHMuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvci5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTM3LDM1ICszNiwzNCBAQCBjbGFzcyBDYWxsTGlua0luZm87CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CiAKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rKFZNKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7Ci1KSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZiBsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJl
ZiBsaW5rRGlyZWN0Q2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRKU0NhbGxUaHVua0VudHJ5
UG9pbnRzV2l0aFJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CiAK
LUpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIHZpcnR1YWxUaHVua0ZvcihWTSosIENh
bGxMaW5rSW5mbyYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTSos
IENhbGxMaW5rSW5mbyYpOwogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgbmF0aXZlQ2FsbEdlbmVy
YXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSopOwogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihW
TSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSopOwogCi1KSVRFbnRy
eVBvaW50c1dpdGhSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRFbnRyeVBv
aW50c1dpdGhSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLUpJVEVudHJ5UG9pbnRzV2l0
aFJlZiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgZnJv
bUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qKTsKLUpJVEVudHJ5UG9pbnRzV2l0aFJlZiBhYnNU
aHVua0dlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIGNlaWxUaHVua0dlbmVy
YXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIGV4cFRodW5rR2VuZXJhdG9yKFZNKik7
Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50
cnlQb2ludHNXaXRoUmVmIGxvZ1RodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRFbnRyeVBvaW50c1dp
dGhSZWYgcm91bmRUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIHNx
cnRUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIGltdWxUaHVua0dl
bmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIHJhbmRvbVRodW5rR2VuZXJhdG9y
KFZNKik7Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgdHJ1bmNUaHVua0dlbmVyYXRvcihWTSopOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1
bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVs
VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRydW5jVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKIAotSklURW50cnlQb2ludHNXaXRoUmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2Fs
bEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1
bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pOwogCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTU2Mjg4MTU2ZDc3OTc5NzhjZDc2YWU4M2RjOWZiZDlm
ZWM4OTQ4Ni4uZWM3OWQ4MzIwN2U1NDVjOGViMDUzNjg3ZDc5YWVlMTFiYTk1NzAyZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKQEAgLTMyNTksOSArMzI1OSw2IEBAIGludCBqc2NtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKICAgICBpbnQgcmVzdWx0OwogICAgIHJlc3VsdCA9IHJ1bkpTQyh2bSwg
b3B0aW9ucyk7CiAKLSNpZiBFTkFCTEUoVk1fQ09VTlRFUlMpCi0gICAgdm0tPmR1bXBDb3VudGVy
cygpOwotI2VuZGlmCiAgICAgaWYgKE9wdGlvbnM6OmdjQXRFbmQoKSkgewogICAgICAgICAvLyBX
ZSBuZWVkIHRvIGhvbGQgdGhlIEFQSSBsb2NrIHRvIGRvIGEgR0MuCiAgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIodm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RW50cnlwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRF
bnRyeXBvaW50LmNwcAppbmRleCAyODY1MGJmNTYxMmRkYTczMWI4ODc0NGVhZDcyZmEzYWYxMTBi
ODU5Li5mNTkxOGI3MjE3MGFjNWRlNDdjMmJlZDM2Mzc5NjUzMGUwMTk1NDAxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcApAQCAtNDYsMjYg
KzQ2LDEyIEBAIHN0YXRpYyB2b2lkIHNldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrKQogICAgIGlmICh2bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBpZiAo
a2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KAotICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKAotICAgICAgICAg
ICAgICAgICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZv
clJlZ2lzdGVyQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclJlZ2lzdGVyQ2FsbEVudHJ5VGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rp
b25Gb3JSZWdpc3RlckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKS5jb2RlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yUmVnaXN0ZXJDYWxsQXJpdHlD
aGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICB2bS5n
ZXRDVElTdHViKGZ1bmN0aW9uRm9yU3RhY2tDYWxsRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclN0YWNr
Q2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgICAgICAgICBhZG9wdFJl
ZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1
bmtHZW5lcmF0b3IpLCB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVu
a0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBh
ZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSgKLSAgICAgICAgICAgICAgICBKSVRFbnRyeVBvaW50
c1dpdGhSZWYodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclJlZ2lzdGVyQ2FsbEVudHJ5VGh1bmtH
ZW5lcmF0b3IpLAotICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9y
UmVnaXN0ZXJDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKS5jb2RlKCksCi0gICAgICAgICAg
ICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JSZWdpc3RlckNvbnN0cnVjdEVudHJ5
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvclJlZ2lzdGVyQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5j
b2RlKCksCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JTdGFj
a0NvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclN0YWNrQ29uc3RydWN0QXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKS5jb2RlKCkpLAotICAgICAgICAgICAgICAgIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRD
VElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIHZtLmdldENU
SVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpAQCAtNzMsMjYgKzU5LDEyIEBAIHN0YXRpYyB2b2lkIHNl
dEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIFVO
VVNFRF9QQVJBTSh2bSk7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKICAgICAgICAg
Y29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUoCi0gICAgICAgICAgICAgICAgSklURW50cnlQb2ludHNXaXRoUmVmKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3By
b2xvZ3VlKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVh
dGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX3Byb2xvZ3VlKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hl
Y2spLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxM
SW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaykpLAotICAgICAg
ICAgICAgICAgIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9w
dFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50
Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKAotICAg
ICAgICAgICAgSklURW50cnlQb2ludHNXaXRoUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRy
KGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9u
X2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
cHJvbG9ndWUpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRl
TExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRy
KGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spKSwKLSAgICAgICAgICAg
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2No
ZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0
RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTEwMCwyOCAr
NzIsMTQgQEAgc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaykKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2bS5jYW5Vc2VKSVQoKSkgewog
ICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBhZG9wdFJlZihuZXcg
RGlyZWN0SklUQ29kZSgKLSAgICAgICAgICAgICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYodm0u
Z2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KCksCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1YihldmFsRW50
cnlUaHVua0dlbmVyYXRvcikuY29kZSgpKSwKLSAgICAgICAgICAgICAgICBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUo
dm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0pOwogICAg
IGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUoCi0gICAgICAgICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCks
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVS
ZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSkuY29kZSgpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpLmNv
ZGUoKSksCi0gICAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAg
ICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZUxMSW50Q29kZVJlZihsbGludF9ldmFsX3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFBy
b2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0xMjksMjgg
Kzg3LDE0IEBAIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAodm0uY2FuVXNlSklUKCkp
IHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUoCi0gICAgICAgICAgICAgICAgSklURW50cnlQb2ludHNXaXRoUmVm
KHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAot
ICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSwKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpLAotICAgICAgICAgICAgICAgIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRD
VElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSgK
LSAgICAgICAgICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0
cihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSksCi0g
ICAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAgICBhZG9wdFJl
ZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29k
ZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldE1vZHVsZVBy
b2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0xNTgsMjgg
KzEwMiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRNb2R1bGVQcm9ncmFtRW50cnlwb2ludChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrKQogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKHZtLmNhblVz
ZUpJVCgpKSB7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKAotICAgICAgICAgICAgICAgIEpJVEVudHJ5UG9pbnRz
V2l0aFJlZih2bS5nZXRDVElTdHViKG1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1
Yihtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLAotICAgICAgICAgICAg
ICAgICAgICB2bS5nZXRDVElTdHViKG1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpLAotICAgICAgICAgICAgICAgIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7Cisg
ICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKG1vZHVs
ZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgY29kZUJsb2Nr
LT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSgKLSAgICAg
ICAgICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZUxMSW50Q29kZVJlZihsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZSksCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCks
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQ
dHIobGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUpLAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X21vZHVsZV9wcm9ncmFt
X3Byb2xvZ3VlKSksCi0gICAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwor
ICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZSksIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQogCiB2
b2lkIHNldEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDI0NjdhMjYz
NzQ4ZTFjNmZhYWNhODFlYWIzMTVjMDQxY2UxZWVhZGEuLjRiNDc0ZWExZTViNGJiNzRlYjgxNzhi
N2E3N2E5ZmVmZjNmMGFjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcApAQCAtMzczLDkgKzM3Myw5IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiosIENvZGVCbG9jayog
Y29kCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImlu
IHByb2xvZ3VlIikpOwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChTdGFj
a0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIDApOworICAg
ICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRk
cmVzcygpLCAwKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAgICBMTElOVF9S
RVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChTdGFja0FyZ3NN
dXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7CisgICAgTExJTlRfUkVUVVJO
X1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIDApOwogfQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKIHN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlv
biosIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQpAQCAtMTI5
Miw3ICsxMjkyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgU3RhY2tBcmdzTXVzdENoZWNrQXJpdHkpOworICAg
ICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tB
cml0eSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KTsKIApAQCAtMTMwNiwxMiArMTMwNiwxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNl
dFVwQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBwYywgQ29kZQogICAg
ICAgICAgICAgTExJTlRfQ0FMTF9USFJPVyhleGVjLCBlcnJvcik7CiAgICAgICAgIGNvZGVCbG9j
ayA9ICpjb2RlQmxvY2tTbG90OwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICAgICAg
RW50cnlQb2ludFR5cGUgZW50cnlUeXBlOworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsK
ICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAg
ICAgIGVudHJ5VHlwZSA9IFN0YWNrQXJnc011c3RDaGVja0FyaXR5OworICAgICAgICAgICAgYXJp
dHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZW50cnlUeXBl
ID0gU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkOwotICAgICAgICBjb2RlUHRyID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGVudHJ5VHlwZSk7CisgICAgICAg
ICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29kZVB0ciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKCEhY29kZVB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
VGh1bmtzLmNwcAppbmRleCBkOGJlZjI4YTkzYjFiY2NhY2I0ZmEyYTRiNmQ1ODE1NDA1MjQ5N2Ni
Li5hOWZhN2RkNjVlNTFkZmU3MjlkM2Q4NmFiNmJiZTM2ZTA0NDljMzY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTUxLDE5ICs1MSwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU19FWFBPUlRfUFJJVkFURSB2bUVudHJ5VG9XYXNtKHZvaWQqIGNvZGUs
IFZNKiB2bSwgUHJvdG9DYWxsRnJhbQogCiBuYW1lc3BhY2UgTExJbnQgewogCi1lbnVtIFNob3Vs
ZENyZWF0ZVJlZ2lzdGVyRW50cnkgeyBDcmVhdGVSZWdpc3RlckVudHJ5LCBEb250Q3JlYXRlUmVn
aXN0ZXJFbnRyeSB9OwotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1
bmtXaXRoSnVtcFRvKFZNKiB2bSwgdm9pZCAoKnRhcmdldCkoKSwgY29uc3QgY2hhciAqdGh1bmtL
aW5kLCBTaG91bGRDcmVhdGVSZWdpc3RlckVudHJ5IHNob3VsZENyZWF0ZVJlZ2lzdGVyRW50cnkg
PSBEb250Q3JlYXRlUmVnaXN0ZXJFbnRyeSkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Z2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oVk0qIHZtLCB2b2lkICgqdGFyZ2V0KSgpLCBjb25zdCBj
aGFyICp0aHVua0tpbmQpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKLQotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaWYgKHNob3VsZENyZWF0ZVJlZ2lzdGVyRW50cnkgPT0gQ3JlYXRl
UmVnaXN0ZXJFbnRyeSkKLSAgICAgICAgaml0LnNwaWxsQXJndW1lbnRSZWdpc3RlcnNUb0ZyYW1l
QmVmb3JlUHJvbG9ndWUoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNob3VsZENyZWF0ZVJl
Z2lzdGVyRW50cnkpOwotI2VuZGlmCi0KKyAgICAKICAgICAvLyBGSVhNRTogdGhlcmUncyBwcm9i
YWJseSBhIGJldHRlciB3YXkgdG8gZG8gaXQgb24gWDg2LCBidXQgSSdtIG5vdCBzdXJlIEkgY2Fy
ZS4KICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHRhcmdldCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGppdC5qdW1w
KEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CkBAIC03Miw0NCArNjMsMjQgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhWTSogdm0sIHZvaWQgKCp0
YXJnZXQpKCksIGMKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMTElu
dCAlcyBwcm9sb2d1ZSB0aHVuayIsIHRodW5rS2luZCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZnVuY3Rpb25Gb3JSZWdpc3RlckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
LXsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIExMSW50OjpnZXRDb2Rl
RnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCAiZnVuY3Rpb24g
Zm9yIHJlZ2lzdGVyIGFyZ3MgY2FsbCIsIENyZWF0ZVJlZ2lzdGVyRW50cnkpOwotfQotCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JTdGFja0NhbGxFbnRyeVRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKLXsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIExMSW50
OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCAi
ZnVuY3Rpb24gZm9yIHN0YWNrIGFyZ3MgY2FsbCIpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZnVuY3Rpb25Gb3JSZWdpc3RlckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQotewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENv
ZGVGdW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgImZ1
bmN0aW9uIGZvciByZWdpc3RlciBhcmdzIGNvbnN0cnVjdCIsIENyZWF0ZVJlZ2lzdGVyRW50cnkp
OwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JTdGFja0NvbnN0cnVjdEVu
dHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X3Byb2xvZ3VlKSwgImZ1bmN0aW9uIGZvciBzdGFjayBhcmdzIGNvbnN0cnVjdCIp
OwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JSZWdpc3RlckNhbGxBcml0
eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0
aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5l
cmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksICJmdW5jdGlvbiBmb3IgcmVnaXN0ZXIgYXJn
cyBjYWxsIHdpdGggYXJpdHkgY2hlY2siLCBDcmVhdGVSZWdpc3RlckVudHJ5KTsKKyAgICByZXR1
cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIo
bGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCAiZnVuY3Rpb24gZm9yIGNhbGwiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yU3RhY2tDYWxsQXJpdHlDaGVj
a1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZv
ckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5l
cmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksICJmdW5jdGlvbiBmb3Igc3RhY2sgYXJncyBj
YWxsIHdpdGggYXJpdHkgY2hlY2siKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1w
VG8odm0sIExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9wcm9sb2d1ZSksICJmdW5jdGlvbiBmb3IgY29uc3RydWN0Iik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvclJlZ2lzdGVyQ29uc3RydWN0QXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxB
cml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5lcmF0ZVRo
dW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9mdW5jdGlv
bl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSwgImZ1bmN0aW9uIGZvciByZWdpc3RlciBhcmdz
IGNvbnN0cnVjdCB3aXRoIGFyaXR5IGNoZWNrIiwgQ3JlYXRlUmVnaXN0ZXJFbnRyeSk7CisgICAg
cmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBMTEludDo6Z2V0Q29kZUZ1bmN0aW9u
UHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSwgImZ1bmN0aW9uIGZvciBj
YWxsIHdpdGggYXJpdHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0
aW9uRm9yU3RhY2tDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0s
IExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9h
cml0eV9jaGVjayksICJmdW5jdGlvbiBmb3Igc3RhY2sgYXJncyBjb25zdHJ1Y3Qgd2l0aCBhcml0
eSBjaGVjayIpOworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6
OmdldENvZGVGdW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2No
ZWNrKSwgImZ1bmN0aW9uIGZvciBjb25zdHJ1Y3Qgd2l0aCBhcml0eSBjaGVjayIpOwogfQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCA5MDAxMDg1MDM5N2U0
ZmVjMDI0YzYzOTkzNmU1MmJhY2VkMjBjMDc5Li5mYzk3NDJjNDJhYTU4NDJlNDRiN2QxZDJiMzQ0
ZDQ4OGQ5N2YzODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
aApAQCAtNDIsMTQgKzQyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTX0VYUE9SVF9QUklWQVRFIHZt
RW50cnlUb1dhc20odm9pZCosIFZNKiwgUHJvdG9DYWxsRnJhbWUqKTsKIAogbmFtZXNwYWNlIExM
SW50IHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yUmVnaXN0ZXJDYWxsRW50
cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9y
U3RhY2tDYWxsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZ1bmN0aW9uRm9yUmVnaXN0ZXJDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JTdGFja0NvbnN0cnVjdEVudHJ5VGh1bmtH
ZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvclJlZ2lzdGVy
Q2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZ1bmN0aW9uRm9yU3RhY2tDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JSZWdpc3RlckNvbnN0cnVjdEFyaXR5Q2hlY2tU
aHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yU3Rh
Y2tDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKFZN
Kik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBl
dmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHByb2dy
YW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbW9kdWxl
UHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCmluZGV4IDlkNjczZDk1NmIwZDUxNDcwZmZlMTJi
NWVmYTVmYzJkYzMzM2E3ZWQuLmRhZTcxOWFkMjdjNWI3MWQwMmQ2YWFjZDE4MTA1YzE5ZDA3Y2Zj
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tN
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUu
aApAQCAtMjgsNyArMjgsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gQXJpdHlDaGVja01v
ZGUgewotICAgIFJlZ2lzdGVyRW50cnksCiAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLAogICAg
IE11c3RDaGVja0FyaXR5CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZUJhc2UuY3BwCmluZGV4IDAxNGJkYzI0MmI5YmZlZDdmYzc5MmRhNGY2ZDhlMTE0
YzA4ODMwMTIuLmQzMWZjNDg2YjM3YWY2YTJhMDQ2ZmE4MGFlMDIzNzYwZGJjMTkyY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAKQEAg
LTU0LDggKzU0LDggQEAgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICNpZiBFTkFC
TEUoSklUKQogICAgIG1faml0Q29kZUZvckNhbGwgPSBudWxscHRyOwogICAgIG1faml0Q29kZUZv
ckNvbnN0cnVjdCA9IG51bGxwdHI7Ci0gICAgbV9qaXRFbnRyaWVzRm9yQ2FsbC5jbGVhckVudHJp
ZXMoKTsKLSAgICBtX2ppdEVudHJpZXNGb3JDb25zdHJ1Y3QuY2xlYXJFbnRyaWVzKCk7CisgICAg
bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7
CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKTsKICNlbmRpZgogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFS
QU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0g
TlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5kZXggOGY1ZTRjZjQ0NjU3MTkyZjY2YWUwNmEyYTBj
ZDdlZTA0ODQ5YTE2MC4uNWQxZTBiNGI2NDRmYzYxMThmMmU3NmJjMzk4OGIxMzQ4NmMwODc2MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2Uu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdHlDaGVja01v
ZGUuaCIKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIK
ICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCkBAIC0zMyw3ICszNCw2IEBACiAj
aW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5j
bHVkZSAiSklUQ29kZS5oIgotI2luY2x1ZGUgIkpJVEVudHJ5UG9pbnRzLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiVHlw
ZVNldC5oIgpAQCAtMTQ1LDQyICsxNDUsNDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZW50cnlwb2ludEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEVu
dHJ5UG9pbnRUeXBlIGVudHJ5VHlwZSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlw
b2ludEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5
KQogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdl
IG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAg
IC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwg
ImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCiAgICAgICAgIC8vIG1hY2hpbmUgY29kZS4K
LSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0gICAg
ICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0RW50cmllc0Zv
ckNhbGwuZW50cnlGb3IoZW50cnlUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKLSAg
ICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRFbnRyaWVz
Rm9yQ29uc3RydWN0LmVudHJ5Rm9yKGVudHJ5VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENo
ZWNrQXJpdHkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICAgICAgY2Fz
ZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciByZXN1bHQgPQotICAgICAgICAgICAgZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVz
c0ZvckNhbGwoZW50cnlUeXBlKTsKLSAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdDsgdGhpcyBp
cyBuZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwgb3B0aW1pemF0aW9ucy4KLSAg
ICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0gICAgICAg
ICAgICBtX2ppdEVudHJpZXNGb3JDYWxsLnNldEVudHJ5Rm9yKGVudHJ5VHlwZSwgcmVzdWx0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6Ci0gICAg
ICAgICAgICBtX2ppdEVudHJpZXNGb3JDb25zdHJ1Y3Quc2V0RW50cnlGb3IoZW50cnlUeXBlLCBy
ZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnZW5lcmF0ZWRKSVRDb2Rl
Rm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7CisgICAgICAgIGlmIChhcml0eSA9PSBN
dXN0Q2hlY2tBcml0eSkgeworICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdDsgdGhpcyBp
cyBuZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwgb3B0aW1pemF0aW9ucy4KKyAg
ICAgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoK
KyAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSByZXN1bHQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1
Y3Q6CisgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sg
PSByZXN1bHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBFbnRyeVBvaW50
VHlwZSBlbnRyeVBvaW50VHlwZSkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29k
ZVdpdGhBcml0eUNoZWNrRm9yKAorICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDb2RlRm9yQ2Fs
bDoKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1f
aml0RW50cmllc0ZvckNhbGwpICsgSklURW50cnlQb2ludHM6Om9mZnNldE9mRW50cnlGb3IoZW50
cnlQb2ludFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRh
YmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgY2FzZSBD
b2RlRm9yQ29uc3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVj
dXRhYmxlQmFzZSwgbV9qaXRFbnRyaWVzRm9yQ29uc3RydWN0KSArIEpJVEVudHJ5UG9pbnRzOjpv
ZmZzZXRPZkVudHJ5Rm9yKGVudHJ5UG9pbnRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrKTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gMDsKQEAgLTIyOCw4ICsyMzMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
SW50cmluc2ljIG1faW50cmluc2ljOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JD
YWxsOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7Ci0gICAgSklU
RW50cnlQb2ludHMgbV9qaXRFbnRyaWVzRm9yQ2FsbDsKLSAgICBKSVRFbnRyeVBvaW50cyBtX2pp
dEVudHJpZXNGb3JDb25zdHJ1Y3Q7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
CmluZGV4IGIzZjNkYmQ0MWU4ZmRiNDYyMmM2ZmQ5YjgwMTMxZjFhOGU4MmQyYWMuLjFhZjJkNWVi
ZjU3MzFmZjExYTFjY2MxNjk5MWVjYTdiNTI5YTJlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcApAQCAtNDYsNyArNDYsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB0YXJnZXRG
dW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlmIChleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9y
Q2FsbCgpKSB7CiAgICAgICAgIC8vIEZvcmNlIHRoZSBleGVjdXRhYmxlIHRvIGNhY2hlIGl0cyBh
cml0eSBlbnRyeXBvaW50LgotICAgICAgICBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKENvZGVG
b3JDYWxsLCBTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSk7CisgICAgICAgIGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3IoQ29kZUZvckNhbGwsIE11c3RDaGVja0FyaXR5KTsKICAgICB9CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0YXJn
ZXRGdW5jdGlvbiwgY2FsbERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAppbmRleCBhNWE2ODNjNTI2NGZiZjI3OWQyZjM1MWJj
ZTI2YTZhNWVlMzg5ZGUxLi5iN2RhZDJhNDYyZGRkZmMyMjc2MmZkNWNkN2NmNmE0NjFjZGQxOGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRh
YmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRh
YmxlLmNwcApAQCAtNjMsOCArNjMsOCBAQCB2b2lkIE5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgUGFzc1JlZlB0cjxKSVRDb2RlPiBjYWxsVGh1bmssIFBhcwogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX2ppdENvZGVGb3JDYWxsID0gY2FsbFRodW5r
OwogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGNvbnN0cnVjdFRodW5rOwotICAgIG1faml0
RW50cmllc0ZvckNhbGwuc2V0RW50cnlGb3IoU3RhY2tBcmdzTXVzdENoZWNrQXJpdHksIG1faml0
Q29kZUZvckNhbGwtPmFkZHJlc3NGb3JDYWxsKFN0YWNrQXJnc011c3RDaGVja0FyaXR5KSk7Ci0g
ICAgbV9qaXRFbnRyaWVzRm9yQ29uc3RydWN0LnNldEVudHJ5Rm9yKFN0YWNrQXJnc011c3RDaGVj
a0FyaXR5LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKFN0YWNrQXJnc011
c3RDaGVja0FyaXR5KSk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9q
aXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOworICAgIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0LT5h
ZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSk7CiAgICAgbV9uYW1lID0gbmFtZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJs
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNw
cAppbmRleCAwY2E4YzM2ZjdlYzMyYjBiY2MzODQ1YjA0OWM4M2M2ZjZmYTY3NWJlLi42MTVjMjJj
NWM0ZmM0NzA4ZGJjZDg0ZTM5OTY3YWJhOTcyMTQ0YzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcApAQCAtMTM5LDEyICsxMzks
MTIgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdm0sIENvZGVCbG9j
ayogZ2VuZXJpY0NvZGVCbG9jaywgQ29kZVR5cGUKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBj
YXNlIENvZGVGb3JDYWxsOgogICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVC
bG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKSA6IG51bGxwdHI7Ci0gICAgICAgIG1f
aml0RW50cmllc0ZvckNhbGwuY2xlYXJFbnRyaWVzKCk7CisgICAgICAgIG1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBtX251
bVBhcmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSA6IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgogICAgICAgICBtX2ppdENvZGVGb3JD
b25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgp
IDogbnVsbHB0cjsKLSAgICAgICAgbV9qaXRFbnRyaWVzRm9yQ29uc3RydWN0LmNsZWFyRW50cmll
cygpOworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3Qg
PSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIDog
TlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggZTk2NTE0MTcxN2EwYmU4ODU3MTljZGE5
ZWMzODFjNmJjMDU2ZTc1ZC4uNTFkMjMwNWMyMjg1NGY3ZDA1MmFiMjcyYmJlMTczZTBkNDNiZmU5
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjEwLDEwICsyMTAsNiBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgdXBkYXRlU29m
dFJlc2VydmVkWm9uZVNpemUoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSk7CiAgICAg
c2V0TGFzdFN0YWNrVG9wKHN0YWNrLm9yaWdpbigpKTsKIAotI2lmIEVOQUJMRShWTV9DT1VOVEVS
UykKLSAgICBjbGVhckNvdW50ZXJzKCk7Ci0jZW5kaWYKLQogICAgIC8vIE5lZWQgdG8gYmUgY2Fy
ZWZ1bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodGhpcyk7CiAgICAgQXRvbWljU3RyaW5nVGFibGUqIGV4aXN0aW5nRW50cnlBdG9taWNT
dHJpbmdUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50QXRvbWljU3RyaW5nVGFibGUo
bV9hdG9taWNTdHJpbmdUYWJsZSk7CkBAIC00ODAsNyArNDc2LDcgQEAgU2FtcGxpbmdQcm9maWxl
ciYgVk06OmVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0
Y2gpCiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCiAjaWYgRU5BQkxFKEpJ
VCkKLXN0YXRpYyBKSVRFbnRyeUdlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJ
bnRyaW5zaWMgaW50cmluc2ljKQorc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5rR2VuZXJhdG9y
Rm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgc3dpdGNoIChpbnRyaW5z
aWMpIHsKICAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6CkBAIC05MjcsMzUgKzkyMyw0IEBA
IHZvaWQgVk06OnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKHVuc2lnbmVkIHJl
Y3Vyc2lvbkRlcHRoLCBFeGNlcHRpb25FCiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShWTV9DT1VO
VEVSUykKLXZvaWQgVk06OmNsZWFyQ291bnRlcnMoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBOdW1iZXJWTUNvdW50ZXI7IGkrKykKLSAgICAgICAgbV9jb3VudGVyc1tpXSA9IDA7
Ci19Ci0KLXZvaWQgVk06OmR1bXBDb3VudGVycygpCi17Ci0gICAgc2l6ZV90IHRvdGFsQ2FsbHMg
PSBjb3VudGVyRm9yKEJhc2VsaW5lQ2FsbGVyKSArIGNvdW50ZXJGb3IoREZHQ2FsbGVyKSArIGNv
dW50ZXJGb3IoRlRMQ2FsbGVyKTsKLSAgICBkYXRhTG9nKCIjIyMjIFZNIENhbGwgY291bnRlcnMg
IyMjI1xuIik7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IFRvdGFsIGNhbGxzXG4iLCB0b3RhbENhbGxz
KTsKLSAgICBkYXRhTG9nRigiJTEwenUgQmFzZWxpbmUgY2FsbHNcbiIsIGNvdW50ZXJGb3IoQmFz
ZWxpbmVDYWxsZXIpKTsKLSAgICBkYXRhTG9nRigiJTEwenUgREZHIGNhbGxzXG4iLCBjb3VudGVy
Rm9yKERGR0NhbGxlcikpOwotICAgIGRhdGFMb2dGKCIlMTB6dSBGVEwgY2FsbHNcbiIsIGNvdW50
ZXJGb3IoRlRMQ2FsbGVyKSk7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IFZhcmFyZyBjYWxsc1xuIiwg
Y291bnRlckZvcihDYWxsVmFyYXJncykpOwotICAgIGRhdGFMb2dGKCIlMTB6dSBUYWlsIGNhbGxz
XG4iLCBjb3VudGVyRm9yKFRhaWxDYWxsKSk7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IEV2YWwgY2Fs
bHNcbiIsIGNvdW50ZXJGb3IoQ2FsbEV2YWwpKTsKLSAgICBkYXRhTG9nRigiJTEwenUgRGlyZWN0
IGNhbGxzXG4iLCBjb3VudGVyRm9yKERpcmVjdENhbGwpKTsKLSAgICBkYXRhTG9nRigiJTEwenUg
UG9seW1vcnBoaWMgY2FsbHNcbiIsIGNvdW50ZXJGb3IoUG9seW1vcnBoaWNDYWxsKSk7Ci0gICAg
ZGF0YUxvZ0YoIiUxMHp1IFZpcnR1YWwgY2FsbHNcbiIsIGNvdW50ZXJGb3IoVmlydHVhbENhbGwp
KTsKLSAgICBkYXRhTG9nRigiJTEwenUgVmlydHVhbCBzbG93IGNhbGxzXG4iLCBjb3VudGVyRm9y
KFZpcnR1YWxTbG93Q2FsbCkpOwotICAgIGRhdGFMb2dGKCIlMTB6dSBSZWdpc3RlciBhcmdzIG5v
IGFyaXR5XG4iLCBjb3VudGVyRm9yKFJlZ0FyZ3NOb0FyaXR5KSk7Ci0gICAgZGF0YUxvZ0YoIiUx
MHp1IFN0YWNrIGFyZ3Mgbm8gYXJpdHlcbiIsIGNvdW50ZXJGb3IoU3RhY2tBcmdzTm9Bcml0eSkp
OwotICAgIGRhdGFMb2dGKCIlMTB6dSBSZWdpc3RlciBhcmdzIGV4dHJhIGFyaXR5XG4iLCBjb3Vu
dGVyRm9yKFJlZ0FyZ3NFeHRyYSkpOwotICAgIGRhdGFMb2dGKCIlMTB6dSBSZWdpc3RlciBhcmdz
IGFyaXR5IGNoZWNrXG4iLCBjb3VudGVyRm9yKFJlZ0FyZ3NBcml0eSkpOwotICAgIGRhdGFMb2dG
KCIlMTB6dSBTdGFjayBhcmdzIGFyaXR5IGNoZWNrXG4iLCBjb3VudGVyRm9yKFN0YWNrQXJnc0Fy
aXR5KSk7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IEFyaXR5IGZpeHVwcyByZXF1aXJlZFxuIiwgY291
bnRlckZvcihBcml0eUZpeHVwUmVxdWlyZWQpKTsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDg4MWU3NzFiYjVlMDlkYjZi
OGMxZjNkOTI4OTNhMWEzNjkwOTdhZDIuLjYzNmYyZWI2NTk1OGJiMDcyYjRkMjJiYjM3OWU0MGFl
NGJiNjZlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNDMyLDE2ICs0MzIs
NiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhp
cywgZ2VuZXJhdG9yKTsKICAgICB9Ci0KLSAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYgZ2V0SklU
RW50cnlTdHViKEpJVEVudHJ5R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBqaXRTdHVicy0+aml0RW50cnlTdHViKHRoaXMsIGdlbmVyYXRvcik7Ci0gICAgfQotCi0g
ICAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYgZ2V0SklUQ2FsbFRodW5rRW50cnlT
dHViKEpJVENhbGxUaHVua0VudHJ5R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBqaXRTdHVicy0+aml0Q2FsbFRodW5rRW50cnlTdHViKHRoaXMsIGdlbmVyYXRvcik7
Ci0gICAgfQogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4g
YWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0czsKICAgICAKQEAgLTU4NCw1MCArNTc0LDYgQEAg
cHVibGljOgogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogICAg
IENvbmN1cnJlbnRKU0xvY2sgbV9yZWdFeHBBbGxvY2F0b3JMb2NrOwogCi0gICAgZW51bSBWTUNv
dW50ZXJUeXBlIHsKLSAgICAgICAgQmFzZWxpbmVDYWxsZXIsCi0gICAgICAgIERGR0NhbGxlciwK
LSAgICAgICAgRlRMQ2FsbGVyLAotICAgICAgICBDYWxsVmFyYXJncywKLSAgICAgICAgVGFpbENh
bGwsCi0gICAgICAgIENhbGxFdmFsLAotICAgICAgICBEaXJlY3RDYWxsLAotICAgICAgICBQb2x5
bW9ycGhpY0NhbGwsCi0gICAgICAgIFZpcnR1YWxDYWxsLAotICAgICAgICBWaXJ0dWFsU2xvd0Nh
bGwsCi0gICAgICAgIFJlZ0FyZ3NOb0FyaXR5LAotICAgICAgICBTdGFja0FyZ3NOb0FyaXR5LAot
ICAgICAgICBSZWdBcmdzRXh0cmEsCi0gICAgICAgIFJlZ0FyZ3NBcml0eSwKLSAgICAgICAgU3Rh
Y2tBcmdzQXJpdHksCi0gICAgICAgIEFyaXR5Rml4dXBSZXF1aXJlZCwKLSAgICAgICAgTnVtYmVy
Vk1Db3VudGVyCi0gICAgfTsKLQotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICBzaXplX3Qg
bV9jb3VudGVyc1tOdW1iZXJWTUNvdW50ZXJdOwotCi0gICAgdm9pZCBjbGVhckNvdW50ZXJzKCk7
Ci0KLSAgICBzaXplX3QqIGFkZHJlc3NPZkNvdW50ZXIoVk1Db3VudGVyVHlwZSBjb3VudGVyVHlw
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudGVyVHlwZSA+PSBOdW1iZXJWTUNvdW50ZXIpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4gJm1fY291bnRlcnNb
Y291bnRlclR5cGVdOwotICAgIH0KLQotICAgIHNpemVfdCBjb3VudGVyRm9yKFZNQ291bnRlclR5
cGUgY291bnRlclR5cGUpCi0gICAgewotICAgICAgICBpZiAoY291bnRlclR5cGUgPj0gTnVtYmVy
Vk1Db3VudGVyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gbV9jb3VudGVyc1tjb3VudGVyVHlwZV07Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wQ291bnRlcnMoKTsKLSNlbmRpZgotCiAgICAgc3RkOjp1bmlxdWVfcHRyPEhh
c093blByb3BlcnR5Q2FjaGU+IG1faGFzT3duUHJvcGVydHlDYWNoZTsKICAgICBBTFdBWVNfSU5M
SU5FIEhhc093blByb3BlcnR5Q2FjaGUqIGhhc093blByb3BlcnR5Q2FjaGUoKSB7IHJldHVybiBt
X2hhc093blByb3BlcnR5Q2FjaGUuZ2V0KCk7IH0KICAgICBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBl
bnN1cmVIYXNPd25Qcm9wZXJ0eUNhY2hlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQmluZGluZy5jcHAKaW5kZXggMDVmOTBmYjM2YTdhNjg0YWVlMGZhYTJlYmRhMzQ4Njc1MmRl
ZjhhYS4uNWZmYzQ1ZGYwMzZkYTU2Yzc4Njk0MTdjNGVlOTQzOGI3ZDc4Yzk5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtMTMzLDcgKzEzMyw3IEBA
IFdhc21Ub0pTU3R1YiBpbXBvcnRTdHViR2VuZXJhdG9yKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5m
bz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBHUFJSZWcg
aW1wb3J0SlNDZWxsR1BSUmVnID0gYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpOworICAgIEdQ
UlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRz
IHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cuCiAgICAgQVNTRVJUKCF3YXNtQ0Mu
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsKIAogICAgIC8v
IEVhY2ggSlMgLT4gd2FzbSBlbnRyeSBzZXRzIHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aG9z
ZSBleHBvcnQgaXMgYmVpbmcgY2FsbGVkLiBXZSdyZSBjYWxsaW5nIG91dCBvZiB0aGlzIEluc3Rh
bmNlLCBhbmQgY2FuIHRoZXJlZm9yZSBmaWd1cmUgb3V0IHRoZSBpbXBvcnQgYmVpbmcgY2FsbGVk
LgpAQCAtMTQ4LDE0ICsxNDgsMTUgQEAgV2FzbVRvSlNTdHViIGltcG9ydFN0dWJHZW5lcmF0b3Io
Vk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmEKICAgICAvLyBG
SVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVn
aXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTQ4OAogCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0lu
Zm9zLmFkZCgpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgU3RhY2tBcmdzLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGlt
cG9ydEpTQ2VsbEdQUlJlZyk7CiAgICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsK
ICAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7CiAgICAgSklUOjpK
dW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFs
dWUpOwogICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIEpJVDo6
SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gbm9uQXJnR1BSMAor
ICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgorICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgogICAgIEpJVDo6Q2FsbCBzbG93
Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGRvbmUubGluaygmaml0KTsKIApAQCAtMjIzLDcg
KzIyNCw3IEBAIFdhc21Ub0pTU3R1YiBpbXBvcnRTdHViR2VuZXJhdG9yKFZNKiB2bSwgQmFnPENh
bGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hCiAgICAgaml0LnJldCgpOwogCiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0SklUQ2FsbFRodW5r
RW50cnlTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmVudHJ5Rm9yKFN0YWNrQXJncykuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0
aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVM
b2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRv
Q2hlY2spKTsKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggZGUzMjg3
ZGJkMTEyNzM4MjhmNTFlMDAwYWYxN2RmZGU5OWQwOWFhNC4uNmY5Mjc1OTc5Y2UzMjYzYTI0YjVj
OTQ1ZDZkNGM2MjAyY2RhZjI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC02ODksOSArNjg5LDYgQEAKICNk
ZWZpbmUgRU5BQkxFX0pJVCAxCiAjZW5kaWYKIAotLyogVGhpcyBlbmFibGVzIHBlciBWTSBjb3Vu
dGVycyBhdmFpbGFibGUgZm9yIHVzZSBieSBKSVQnZWQgY29kZS4gKi8KLSNkZWZpbmUgRU5BQkxF
X1ZNX0NPVU5URVJTIDAKLQogLyogVGhlIEZUTCAqZG9lcyBub3QqIHdvcmsgb24gMzItYml0IHBs
YXRmb3Jtcy4gRGlzYWJsZSBpdCBldmVuIGlmIHNvbWVvbmUgYXNrZWQgdXMgdG8gZW5hYmxlIGl0
LiAqLwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjdW5kZWYgRU5BQkxFX0ZUTF9KSVQKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTJjMWZm
ZDhhMDZiZWJmMTlmOWQyMmIwNjUyMWJkMGNkM2I4ZmZjNC4uNDM0NGVmMTI1MjYwY2Y0ZDE0ZmVh
ODNjMzJjY2U4N2NhYjNlZDVkNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0xMi0xMyAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjIwOTcyNS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTgxMQorCisgICAgICAgICJCcm9rZSBBUk12NyBidWlsZHMiIChSZXF1ZXN0
ZWQgYnkgbXNhYm9mZiBvbiAjd2Via2l0KS4KKworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6
CisKKyAgICAgICAgIlJFR1JFU1NJT04ocjIwOTY1Myk6IHNwZWVkb21ldGVyIGNyYXNoZXMgbWFr
aW5nIHZpcnR1YWwgc2xvdworICAgICAgICBwYXRoIHRhaWxjYWxscyIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc0OAorICAgICAgICBodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk3MjUKKwogMjAxNi0xMi0xMiAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMDk2NTMp
OiBzcGVlZG9tZXRlciBjcmFzaGVzIG1ha2luZyB2aXJ0dWFsIHNsb3cgcGF0aCB0YWlsY2FsbHMK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctY29tcHV0ZWQtYXJn
cy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctY29tcHV0ZWQtYXJncy5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjOTk0ZTc2N2I3OGVjOTg2MmY5MjUyMGVh
ZTNjMTM2MDQ2ZDE5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLWNvbXB1dGVkLWFyZ3MuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1mdW5jdGlvbiBzdW0yKGEsIGIpCi17Ci0gICAg
cmV0dXJuIGEgKyBiOwotfQotCi1ub0lubGluZShzdW0yKTsKLQotZnVuY3Rpb24gc3VtMmIoYSwg
YikKLXsKLSAgICByZXR1cm4gYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTJiKTsKLQotZnVuY3Rp
b24gc3VtMyhhLCBiLCBjKQotewotICAgIHJldHVybiBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5l
KHN1bTMpOwotCi1mdW5jdGlvbiBzdW0zYihhLCBiLCBjKQotewotICAgIHJldHVybiBhICsgYiAr
IGM7Ci19Ci0KLW5vSW5saW5lKHN1bTNiKTsKLQotZnVuY3Rpb24gdGVzdCgpCi17Ci0gICAgbGV0
IG8xID0gewotICAgICAgICBvbmU6IDEsCi0gICAgICAgIHR3bzogMgotICAgIH0KLSAgICBsZXQg
bzIgPSB7Ci0gICAgICAgIHRocmVlOiAzLAotICAgICAgICBmaXZlOiA1Ci0gICAgfTsKLSAgICBs
ZXQgbzMgPSB7Ci0gICAgICAgIGZvdXI6IDQsCi0gICAgICAgIHNpeDogNgotICAgIH07Ci0gICAg
bGV0IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwMDAwOyBpKyspCi0g
ICAgICAgIHJlc3VsdCA9IHN1bTIobzEub25lLCBvMi5maXZlKSArIHN1bTJiKG8xLnR3bywgbzEu
b25lICsgbzIuZml2ZSkKLSAgICAgICAgICAgICsgc3VtMyhvMi50aHJlZSwgbzMuZm91ciwgbzIu
Zml2ZSkgKyBzdW0zYihvMS50d28sIG8yLnRocmVlICsgbzIuZml2ZSwgbzMuc2l4KTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KCk7Ci1pZiAocmVzdWx0ICE9
IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJlc3VsdDsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctbWFueS1jYWxsZWVzLmpzIGIvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy1tYW55LWNhbGxlZXMuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDRkZjZkZDNkMGIzZjU3M2ExMDQ3MGI2ZmFhN2IyNTUwNTFiZmI2
MjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy1tYW55LWNhbGxlZXMuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw0MCArMCwwIEBACi1mdW5jdGlvbiBzdW0yKGEsIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBi
OwotfQotCi1ub0lubGluZShzdW0yKTsKLQotZnVuY3Rpb24gc3VtMmIoYSwgYikKLXsKLSAgICBy
ZXR1cm4gYSArIGIgKyBiOwotfQotCi1ub0lubGluZShzdW0yYik7Ci0KLWZ1bmN0aW9uIHN1bTMo
YSwgYiwgYykKLXsKLSAgICByZXR1cm4gYSArIGIgKyBjOwotfQotCi1ub0lubGluZShzdW0zKTsK
LQotZnVuY3Rpb24gc3VtM2IoYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYSArIGIgKyBiICsgYzsK
LX0KLQotbm9JbmxpbmUoc3VtM2IpOwotCi1mdW5jdGlvbiB0ZXN0KCkKLXsKLSAgICBsZXQgcmVz
dWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDAwMDA7IGkrKykKLSAgICAgICAg
cmVzdWx0ID0gc3VtMigxLCAyKSArIHN1bTJiKDIsIDMpICsgc3VtMyg1LCA1LCA1KSArIHN1bTNi
KDIsIDQsIDYpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotbGV0IHJlc3VsdCA9IHRlc3Qo
KTsKLWlmIChyZXN1bHQgIT0gNDIpCi0gICAgdGhyb3cgIlVuZXhwZWN0ZWQgcmVzdWx0OiAiICsg
cmVzdWx0OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy1vbmUt
Y2FsbGVlLWZpeGVkLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy1vbmUtY2Fs
bGVlLWZpeGVkLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDcyMWIxZTkxYWJi
NzVkZmVhNDlhYjY1NTg5OTEyMWFiMWI2NzA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctb25lLWNh
bGxlZS1maXhlZC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLWZ1bmN0aW9uIHN1
bShhLCBiLCBjKQotewotICAgIHJldHVybiBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1bSk7
Ci0KLWZ1bmN0aW9uIHRlc3QoKQotewotICAgIGxldCByZXN1bHQgPSAwOwotICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgNDAwMDAwMDsgaSsrKQotICAgICAgICByZXN1bHQgPSBzdW0oMSwgMiwgMyk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1sZXQgcmVzdWx0ID0gdGVzdCgpOwotaWYgKHJl
c3VsdCAhPSA2KQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJlc3VsdDsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctb25lLWNhbGxlZS5qcyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctb25lLWNhbGxlZS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTk3OTc4NzU0ZDIwMTY1ZDk2MGRjODUxM2I4MDZlNjNkN2Jk
MWQ5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLW9uZS1jYWxsZWUuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwxOSArMCwwIEBACi1mdW5jdGlvbiBzdW0oYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYSAr
IGIgKyBjOwotfQotCi1ub0lubGluZShzdW0pOwotCi1mdW5jdGlvbiB0ZXN0KGEsIGIsIGMpCi17
Ci0gICAgbGV0IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDAwMDAwOyBp
KyspCi0gICAgICAgIHJlc3VsdCA9IHN1bShhLCBiLCBjKTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KDEsIDIsIDMpOwotaWYgKHJlc3VsdCAhPSA2KQotICAg
IHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJlc3VsdDsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctcG9seS1jYWxsZWVzLmpzIGIvSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY2FsbGluZy1wb2x5LWNhbGxlZXMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDlhYWRmMzk1Mjk4NDZjZDAwZWUzYjViMWNjYTdiMDk1MzkyNDZiNjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvY2FsbGluZy1wb2x5LWNhbGxlZXMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSAr
MCwwIEBACi1mdW5jdGlvbiBzdW0xKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsgYzsK
LX0KLQotbm9JbmxpbmUoc3VtMSk7Ci0KLWZ1bmN0aW9uIHN1bTIoYSwgYiwgYykKLXsKLSAgICBy
ZXR1cm4gYiArIGEgKyBjOwotfQotCi1ub0lubGluZShzdW0yKTsKLQotZnVuY3Rpb24gc3VtMyhh
LCBiLCBjKQotewotICAgIHJldHVybiBjICsgYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTMpOwot
Ci1sZXQgZnVuY3Rpb25zID0gWyBzdW0xLCBzdW0yLCBzdW0zIF07Ci0KLWZ1bmN0aW9uIHRlc3Qo
YSwgYiwgYykKLXsKLSAgICBsZXQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDQwMDAwMDA7IGkrKykKLSAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zW2kgJSAzXShhLCBiLCBj
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KDIsIDEwLCAz
MCk7Ci1pZiAocmVzdWx0ICE9IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiAr
IHJlc3VsdDsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctcG9s
eS1leHRyYS1hcml0eS1jYWxsZWVzLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGlu
Zy1wb2x5LWV4dHJhLWFyaXR5LWNhbGxlZXMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNiNjgxNzk0NTVhOThhYWI5MmMxN2I3Y2Y4Y2ViMzJhNDQ5YjRlYTEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFy
a3MvY2FsbGluZy1wb2x5LWV4dHJhLWFyaXR5LWNhbGxlZXMuanMKKysrIC9kZXYvbnVsbApAQCAt
MSwzNSArMCwwIEBACi1mdW5jdGlvbiBzdW0xKGEsIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiOwot
fQotCi1ub0lubGluZShzdW0xKTsKLQotZnVuY3Rpb24gc3VtMihhLCBiKQotewotICAgIHJldHVy
biBiICsgYTsKLX0KLQotbm9JbmxpbmUoc3VtMik7Ci0KLWZ1bmN0aW9uIHN1bTMoYSwgYikKLXsK
LSAgICByZXR1cm4gYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTMpOwotCi1sZXQgZnVuY3Rpb25z
ID0gWyBzdW0xLCBzdW0yLCBzdW0zIF07Ci0KLWZ1bmN0aW9uIHRlc3QoYSwgYiwgYykKLXsKLSAg
ICBsZXQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwMDA7IGkrKykK
LSAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zW2kgJSAzXShhLCBiLCBjKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KDIsIDQwLCAiVGVzdCIpOwotaWYgKHJl
c3VsdCAhPSA0MikKLSAgICB0aHJvdyAiVW5leHBlY3RlZCByZXN1bHQ6ICIgKyByZXN1bHQ7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLXRhaWxjYWxsLmpzIGIv
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy10YWlsY2FsbC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODI5YWY4NTFjNWYwZjIwOGNkNjJkODc0ZGIxNWMyOTljOTlmYzk4
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLXRhaWxjYWxsLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MjggKzAsMCBAQAotInVzZSBzdHJpY3QiOwotCi1mdW5jdGlvbiBzdW0oYSwgYiwgYykKLXsKLSAg
ICByZXR1cm4gYSArIGIgKyBjOwotfQotCi1ub0lubGluZShzdW0pOwotCi1mdW5jdGlvbiB0YWls
Q2FsbGVyKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIHN1bShiLCBhLCBjKTsKLX0KLQotbm9Jbmxp
bmUodGFpbENhbGxlcik7Ci0KLWZ1bmN0aW9uIHRlc3QoYSwgYiwgYykKLXsKLSAgICBsZXQgcmVz
dWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwMDA7IGkrKykKLSAgICAgICAg
cmVzdWx0ID0gdGFpbENhbGxlcihhLCBiLCBjKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWxldCByZXN1bHQgPSB0ZXN0KDEsIDIsIDMpOwotaWYgKHJlc3VsdCAhPSA2KQotICAgIHRocm93
ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJlc3VsdDsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2NhbGxpbmctdmlydHVhbC1hcml0eS1maXh1cC1jYWxsZWVzLmpzIGIvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy12aXJ0dWFsLWFyaXR5LWZpeHVwLWNhbGxlZXMu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNzE5NDI0OWE2NDdkOTA3M2U4NWI3
ODk3NWYxZjYwNGRlNzEzYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy12aXJ0dWFsLWFyaXR5LWZp
eHVwLWNhbGxlZXMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1mdW5jdGlvbiBz
dW0xKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsgKGMgfCAwKTsKLX0KLQotbm9Jbmxp
bmUoc3VtMSk7Ci0KLWZ1bmN0aW9uIHN1bTIoYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYiArIGEg
KyAoYyB8IDApOwotfQotCi1ub0lubGluZShzdW0yKTsKLQotZnVuY3Rpb24gc3VtMyhhLCBiLCBj
KQotewotICAgIHJldHVybiAoYyB8IDApICsgYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTMpOwot
Ci1mdW5jdGlvbiBzdW00KGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIChjIHwgMCkgKyBhICsgYjsK
LX0KLQotbm9JbmxpbmUoc3VtNCk7Ci0KLWZ1bmN0aW9uIHN1bTUoYSwgYiwgYykKLXsKLSAgICBy
ZXR1cm4gKGMgfCAwKSArIGEgKyBiOwotfQotCi1ub0lubGluZShzdW01KTsKLQotZnVuY3Rpb24g
c3VtNihhLCBiLCBjKQotewotICAgIHJldHVybiAoYyB8IDApICsgYSArIGI7Ci19Ci0KLW5vSW5s
aW5lKHN1bTYpOwotCi1sZXQgZnVuY3Rpb25zID0gWyBzdW0xLCBzdW0yLCBzdW0zLCBzdW00LCBz
dW01LCBzdW02IF07Ci0KLWZ1bmN0aW9uIHRlc3QoYSwgYikKLXsKLSAgICBsZXQgcmVzdWx0ID0g
MDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwMDA7IGkrKykKLSAgICAgICAgcmVzdWx0
ID0gZnVuY3Rpb25zW2kgJSA2XShhLCBiKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWxl
dCByZXN1bHQgPSB0ZXN0KDIsIDQwKTsKLWlmIChyZXN1bHQgIT0gNDIpCi0gICAgdGhyb3cgIlVu
ZXhwZWN0ZWQgcmVzdWx0OiAiICsgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvY2FsbGluZy12aXJ0dWFsLWFyaXR5LWZpeHVwLXN0YWNrYXJncy5qcyBiL0pTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctdmlydHVhbC1hcml0eS1maXh1cC1zdGFja2FyZ3Mu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTIwNjg0ODRkODZlOTBkZWNlZjkw
MjNlZmI0ZDg4N2IwMGU0YTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy12aXJ0dWFsLWFyaXR5LWZp
eHVwLXN0YWNrYXJncy5qcworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLWZ1bmN0aW9u
IHN1bTEoYSwgYiwgYywgZCkKLXsKLSAgICByZXR1cm4gYSArIGIgKyBjICsgKGQgfCAwKTsKLX0K
LQotbm9JbmxpbmUoc3VtMSk7Ci0KLWZ1bmN0aW9uIHN1bTIoYSwgYiwgYywgZCkKLXsKLSAgICBy
ZXR1cm4gYiArIGEgKyBjICsgKGQgfCAwKTsKLX0KLQotbm9JbmxpbmUoc3VtMik7Ci0KLWZ1bmN0
aW9uIHN1bTMoYSwgYiwgYywgZCkKLXsKLSAgICByZXR1cm4gKGQgfCAwKSArIGEgKyBiICsgYzsK
LX0KLQotbm9JbmxpbmUoc3VtMyk7Ci0KLWZ1bmN0aW9uIHN1bTQoYSwgYiwgYywgZCkKLXsKLSAg
ICByZXR1cm4gKGQgfCAwKSArIGEgKyBiICsgYzsKLX0KLQotbm9JbmxpbmUoc3VtNCk7Ci0KLWZ1
bmN0aW9uIHN1bTUoYSwgYiwgYywgZCkKLXsKLSAgICByZXR1cm4gKGQgfCAwKSArIGEgKyBiICsg
YzsKLX0KLQotbm9JbmxpbmUoc3VtNSk7Ci0KLWZ1bmN0aW9uIHN1bTYoYSwgYiwgYywgZCkKLXsK
LSAgICByZXR1cm4gKGQgfCAwKSArIGEgKyBiICsgYzsKLX0KLQotbm9JbmxpbmUoc3VtNik7Ci0K
LWxldCBmdW5jdGlvbnMgPSBbIHN1bTEsIHN1bTIsIHN1bTMsIHN1bTQsIHN1bTUsIHN1bTYgXTsK
LQotZnVuY3Rpb24gdGVzdChhLCBiLCBjKQotewotICAgIGxldCByZXN1bHQgPSAwOwotICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgNDAwMDAwMDsgaSsrKQotICAgICAgICByZXN1bHQgPSBmdW5jdGlv
bnNbaSAlIDZdKGEsIGIsIGMpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotbGV0IHJlc3Vs
dCA9IHRlc3QoMiwgMTAsIDMwKTsKLWlmIChyZXN1bHQgIT0gNDIpCi0gICAgdGhyb3cgIlVuZXhw
ZWN0ZWQgcmVzdWx0OiAiICsgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvY2FsbGluZy12aXJ0dWFsLWNhbGxlZXMuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9jYWxsaW5nLXZpcnR1YWwtY2FsbGVlcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjZiYTYxYmU5ZGNjMzZmZWFkYjY4MTE4NTlmMTgzZTU1Njc3YTFlOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9jYWxsaW5nLXZpcnR1YWwtY2FsbGVlcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg
QEAKLWZ1bmN0aW9uIHN1bTEoYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYSArIGIgKyBjOwotfQot
Ci1ub0lubGluZShzdW0xKTsKLQotZnVuY3Rpb24gc3VtMihhLCBiLCBjKQotewotICAgIHJldHVy
biBiICsgYSArIGM7Ci19Ci0KLW5vSW5saW5lKHN1bTIpOwotCi1mdW5jdGlvbiBzdW0zKGEsIGIs
IGMpCi17Ci0gICAgcmV0dXJuIGMgKyBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3VtMyk7Ci0KLWZ1
bmN0aW9uIHN1bTQoYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYyArIGEgKyBiOwotfQotCi1ub0lu
bGluZShzdW00KTsKLQotZnVuY3Rpb24gc3VtNShhLCBiLCBjKQotewotICAgIHJldHVybiBjICsg
YSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTUpOwotCi1mdW5jdGlvbiBzdW02KGEsIGIsIGMpCi17
Ci0gICAgcmV0dXJuIGMgKyBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3VtNik7Ci0KLWxldCBmdW5j
dGlvbnMgPSBbIHN1bTEsIHN1bTIsIHN1bTMsIHN1bTQsIHN1bTUsIHN1bTYgXTsKLQotZnVuY3Rp
b24gdGVzdChhLCBiLCBjKQotewotICAgIGxldCByZXN1bHQgPSAwOwotICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgNDAwMDAwMDsgaSsrKQotICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnNbaSAlIDZd
KGEsIGIsIGMpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotbGV0IHJlc3VsdCA9IHRlc3Qo
MiwgMTAsIDMwKTsKLWlmIChyZXN1bHQgIT0gNDIpCi0gICAgdGhyb3cgIlVuZXhwZWN0ZWQgcmVz
dWx0OiAiICsgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2Fs
bGluZy12aXJ0dWFsLWV4dHJhLWFyaXR5LWNhbGxlZXMuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9jYWxsaW5nLXZpcnR1YWwtZXh0cmEtYXJpdHktY2FsbGVlcy5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjEwN2VjNmE2N2UyZjdiNjNlOWZiODI4OGU1MjU3NmY2YzYzMDJi
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLXZpcnR1YWwtZXh0cmEtYXJpdHktY2FsbGVlcy5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLWZ1bmN0aW9uIHN1bTEoYSwgYikKLXsKLSAg
ICByZXR1cm4gYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTEpOwotCi1mdW5jdGlvbiBzdW0yKGEs
IGIpCi17Ci0gICAgcmV0dXJuIGIgKyBhOwotfQotCi1ub0lubGluZShzdW0yKTsKLQotZnVuY3Rp
b24gc3VtMyhhLCBiKQotewotICAgIHJldHVybiBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3VtMyk7
Ci0KLWZ1bmN0aW9uIHN1bTQoYSwgYikKLXsKLSAgICByZXR1cm4gYSArIGI7Ci19Ci0KLW5vSW5s
aW5lKHN1bTQpOwotCi1mdW5jdGlvbiBzdW01KGEsIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiOwot
fQotCi1ub0lubGluZShzdW01KTsKLQotZnVuY3Rpb24gc3VtNihhLCBiKQotewotICAgIHJldHVy
biBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3VtNik7Ci0KLWxldCBmdW5jdGlvbnMgPSBbIHN1bTEs
IHN1bTIsIHN1bTMsIHN1bTQsIHN1bTUsIHN1bTYgXTsKLQotZnVuY3Rpb24gdGVzdChhLCBiLCBj
KQotewotICAgIGxldCByZXN1bHQgPSAwOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDAw
MDsgaSsrKQotICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnNbaSAlIDZdKGEsIGIsIGMpOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotbGV0IHJlc3VsdCA9IHRlc3QoNDAsIDIsICJUZXN0Iik7
Ci1pZiAocmVzdWx0ICE9IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJl
c3VsdDsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTY1NzI4LmpzIGIvSlNU
ZXN0cy9zdHJlc3MvcmVncmVzcy0xNjU3MjguanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGYwNGRlMzJlZDE1MWU1MTEyMzYyODkyMDhiNTRkMDg4NjU2ODcyNmQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9zdHJlc3MvcmVncmVz
cy0xNjU3MjguanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vLyBUZXN0IGZvciBS
RUdSRVNTSU9OKHIyMDk2NTMpIENyYXNoIGluIENhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCgp
IC0gVGhpcyB0ZXN0IHNob3VsZG4ndCBjcmFzaC4KLSJ1c2Ugc3RyaWN0IjsKLQotZnVuY3Rpb24g
c3VtMShhLCBiLCBjKQotewotICAgIHJldHVybiBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1
bTEpOwotCi1mdW5jdGlvbiBzdW0yKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsgYzsK
LX0KLQotbm9JbmxpbmUoc3VtMik7Ci0KLWZ1bmN0aW9uIHRhaWxDYWxsZXIoZiwgYSwgYikKLXsK
LSAgICByZXR1cm4gZihhLCBiLCBhKQotfQotCi1ub0lubGluZSh0YWlsQ2FsbGVyKTsKLQotZnVu
Y3Rpb24gdGVzdChhLCBiKQotewotICAgIGxldCByZXN1bHQgPSAwOwotICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgNDAwMDAwMDsgaSsrKQotICAgICAgICByZXN1bHQgPSB0YWlsQ2FsbGVyKGkgJSAy
ID8gc3VtMSA6IHN1bTIsIGEsIGIpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotbGV0IHJl
c3VsdCA9IHRlc3QoMjAsIDIpOwotaWYgKHJlc3VsdCAhPSA0MikKLSAgICB0aHJvdyAiVW5leHBl
Y3RlZCByZXN1bHQ6ICIgKyByZXN1bHQ7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZWdy
ZXNzLTE2NTc0OC5qcyBiL0pTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTY1NzQ4LmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTFhYzUxMDQ1YTA0MDlhMWJmMGMwZmVmNzQ5OWJjNjY0
NzZhNDRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pT
VGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTY1NzQ4LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAs
MCBAQAotInVzZSBzdHJpY3QiOwotCi1mdW5jdGlvbiBzdW0xKGEsIGIsIGMpCi17Ci0gICAgcmV0
dXJuIGEgKyBiICsgYzsKLX0KLQotbm9JbmxpbmUoc3VtMSk7Ci0KLWZ1bmN0aW9uIHN1bTIoYSwg
YiwgYykKLXsKLSAgICByZXR1cm4gYiArIGEgKyBjOwotfQotCi1ub0lubGluZShzdW0yKTsKLQot
ZnVuY3Rpb24gc3VtMyhhLCBiLCBjKQotewotICAgIHJldHVybiBjICsgYSArIGI7Ci19Ci0KLW5v
SW5saW5lKHN1bTMpOwotCi1mdW5jdGlvbiBzdW00KGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGMg
KyBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3VtNCk7Ci0KLWZ1bmN0aW9uIHN1bTUoYSwgYiwgYykK
LXsKLSAgICByZXR1cm4gYyArIGEgKyBiOwotfQotCi1ub0lubGluZShzdW01KTsKLQotZnVuY3Rp
b24gc3VtNihhLCBiLCBjKQotewotICAgIHJldHVybiBjICsgYSArIGI7Ci19Ci0KLW5vSW5saW5l
KHN1bTYpOwotCi1sZXQgZnVuY3Rpb25zID0gWyBzdW0xLCBzdW0yLCBzdW0zLCBzdW00LCBzdW01
LCBzdW02IF07Ci0KLWZ1bmN0aW9uIHRhaWxDYWxsZXIobykKLXsKLSAgICBsZXQgYSA9IG8uYTsK
LSAgICBsZXQgYiA9IG8uYjsKLSAgICBsZXQgYyA9IG8uYzsKLSAgICAKLSAgICByZXR1cm4gZnVu
Y3Rpb25zW28uaSAlIDZdKGEsIGIsIGMpOwotfQotCi1ub0lubGluZSh0YWlsQ2FsbGVyKTsKLQot
ZnVuY3Rpb24gdGVzdChhLCBiLCBjKQotewotICAgIGxldCBvYmogPSB7fTsKLSAgICBvYmouYSA9
IGE7Ci0gICAgb2JqLmIgPSBiOwotICAgIG9iai5jID0gYzsKLSAgICBsZXQgcmVzdWx0ID0gMDsK
LSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwMDA7IGkrKykgewotICAgICAgICBvYmouaSA9
IGk7Ci0gICAgICAgIG9iai52YWwgPSB0YWlsQ2FsbGVyKG9iaik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG9iajsKLX0KLQotbGV0IHJlc3VsdCA9IHRlc3QoMiwgMTAsIDMwKTsKLWlmIChyZXN1bHQu
dmFsICE9IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJlc3VsdC52YWw7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>