<?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>175973</bug_id>
          
          <creation_ts>2017-08-24 18:53:12 -0700</creation_ts>
          <short_desc>REGRESSION(r221119): &quot;I think it regressed JSBench by 20%&quot; (Requested by saamyjoon on #webkit).</short_desc>
          <delta_ts>2017-08-24 18:57:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174590</blocked>
    
    <blocked>175893</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>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1342289</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-24 18:53:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/221119 broke the build:
&quot;I think it regressed JSBench by 20%&quot; (Requested by saamyjoon 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>1342292</commentid>
    <comment_count>1</comment_count>
      <attachid>319052</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-24 18:53:46 -0700</bug_when>
    <thetext>Created attachment 319052
ROLLOUT of r221119

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>1342293</commentid>
    <comment_count>2</comment_count>
      <attachid>319052</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-24 18:55:57 -0700</bug_when>
    <thetext>Comment on attachment 319052
ROLLOUT of r221119

Clearing flags on attachment: 319052

Committed r221176: &lt;http://trac.webkit.org/changeset/221176&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342294</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-24 18:55:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342295</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-24 18:57:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/34073318&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319052</attachid>
            <date>2017-08-24 18:53:46 -0700</date>
            <delta_ts>2017-08-24 18:55:57 -0700</delta_ts>
            <desc>ROLLOUT of r221119</desc>
            <filename>bug-175973-20170824215346.patch</filename>
            <type>text/plain</type>
            <size>233624</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZGFlMDA3NmZmYmY1NDQ0MjY0YWM3MjM0ZGYwMmU3OTNiYzRmZjY0Li43ODQ2MzdjZGNjMTM5MWFj
N2NhYTQzNWZjNTI5YzU2YTcyYTYyNDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxNy0wOC0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMTExOSwgcjIyMTEy
NCwgYW5kIHIyMjExNDMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU5NzMKKworICAgICAgICAiSSB0aGluayBpdCByZWdyZXNzZWQgSlNCZW5jaCBi
eSAyMCUiIChSZXF1ZXN0ZWQgYnkgc2FhbXlqb29uCisgICAgICAgIG9uICN3ZWJraXQpLgorCisg
ICAgICAgIFJldmVydGVkIGNoYW5nZXNldHM6CisKKyAgICAgICAgIlN1cHBvcnQgY29tcGlsaW5n
IGNhdGNoIGluIHRoZSBERkciCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQ1OTAKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMjIxMTE5CisKKyAgICAgICAgIlVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBpbiBHVEsgcG9ydCIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDU5MAor
ICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMjExMjQKKworICAgICAg
ICAiREZHOjpKSVRDb2RlOjpvc3JFbnRyeSBzaG91bGQgZ2V0IHNvcnRlZCBzaW5jZSB3ZSBwZXJm
b3JtIGEKKyAgICAgICAgYmluYXJ5IHNlYXJjaCBvbiBpdCIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg5MworICAgICAgICBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8yMjExNDMKKwogMjAxNy0wOC0yNCAgTWljaGFlbCBTYWJvZmYg
IDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgbW92aW5nIGZpeGVkIGNoYXJh
Y3RlciBjbGFzcyB0ZXJtcyBhZnRlciBmaXhlZCBjaGFyYWN0ZXIgdGVybXMgZm9yIEJNUCBvbmx5
IGNoYXJhY3RlciBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIzN2NlYTQyZmEwYjBhMmJiOTFhMDhkMjI5MWEzYzM1
NzNiN2VmODYuLjQ0ZGJhNDdhMjM0MTBkMjJmMTYyMGM1YjczMjNlYjllMDhkMTE0N2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTctMDgtMjQgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3
ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjExMTksIHIy
MjExMjQsIGFuZCByMjIxMTQzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc1OTczCisKKyAgICAgICAgIkkgdGhpbmsgaXQgcmVncmVzc2VkIEpTQmVu
Y2ggYnkgMjAlIiAoUmVxdWVzdGVkIGJ5IHNhYW15am9vbgorICAgICAgICBvbiAjd2Via2l0KS4K
KworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXRzOgorCisgICAgICAgICJTdXBwb3J0IGNvbXBp
bGluZyBjYXRjaCBpbiB0aGUgREZHIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc0NTkwCisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hh
bmdlc2V0LzIyMTExOQorCisgICAgICAgICJVbnJldmlld2VkLCBidWlsZCBmaXggaW4gR1RLIHBv
cnQiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ1
OTAKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjIxMTI0CisKKyAg
ICAgICAgIkRGRzo6SklUQ29kZTo6b3NyRW50cnkgc2hvdWxkIGdldCBzb3J0ZWQgc2luY2Ugd2Ug
cGVyZm9ybSBhCisgICAgICAgIGJpbmFyeSBzZWFyY2ggb24gaXQiCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4OTMKKyAgICAgICAgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjIxMTQzCisKIDIwMTctMDgtMjMgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2UgR2lnYWNhZ2Ugc2l6ZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2ZDA4NTkxNTQwOTMyZTAxNzA2ZmRk
ZWUyNDQ2NmE4Zjc1ZTg3MTJlLi41ZDA2Mjk1YWVjMDViYWI5NWMzMzZlMjhhYmMwZjRlODI4ZjZl
M2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0zOTEsNiArMzkxLDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAogICAgIGRmZy9ERkdQbGFuLmNwcAorICAgIGRmZy9ERkdQ
cmVQb3N0TnVtYmVyaW5nLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMGExNmFkNWUwZGE0NGVmZDg1YWNkODQyMzQ2MWFjMGM1MTVjMTNjNS4uYzdhYTk3MzU5ODc1
MjU0ZjI2OGVhODAxOGY3ODZhNzc3ZjNmYTRjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTM5NCw2ICszOTQsOCBAQAogCQkwRjNCRDFCNzFCODk2QTA3MDA1OThBQTYgLyogREZH
SW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGM0JEMUI2MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICov
OyB9OwogCQkwRjNDMUYxQTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQzFG
MTgxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLzsgfTsKIAkJ
MEYzQzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNDMUYxOTFCODY4RTc5
MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLzsgfTsKKwkJMEYzRTAxQUExOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8q
IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OworCQkwRjNFMDFBQjE5RDM1M0E1MDBGNjFC
N0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3RO
dW1iZXJpbmcuaCAqLzsgfTsKIAkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBB
aXJPcGNvZGVHZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM0MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQw
RTRBOTFDNDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAv
KiBBaXJPcGNvZGVVdGlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0zMDAyLDYgKzMwMDQsOCBAQAogCQkwRjNCRDFCNjFCODk2QTA3MDA1OThB
QTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhC
IC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVy
c0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0MxRjE5MUI4
NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0UwMUE4
MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0g
ZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHBhdGgg
PSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBE
YXRhRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc1MzksNiArNzU0Myw4IEBACiAJCQkJ
MEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5o
ICovLAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEYzRTAxQTgxOUQzNTNBNTAwRjYx
QjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovLAorCQkJCTBGM0UwMUE5MTlEMzUzQTUw
MEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYyQjlDRTAxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywKIAkJCQkwRjJCOUNF
MTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLywKIAkJCQkw
RkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggKi8sCkBAIC04
NzU1LDYgKzg3NjEsNyBAQAogCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBC
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0UwMUFCMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFRDE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLApAQCAtMTA1NTEsNiArMTA1NTgsNyBAQAogCQkJCUE3OEE5NzdBMTc5NzM4
QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc0MTZD
MURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0UwMUFBMTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5
Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0ExQkY5MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRT
dGFja1NpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDVhYjdiODEzNDdhMGI1
ZWQxMWEzMTQ4M2UxYWEyNWQ5ZjNkYTJhZWYuLjc0MDc5MTY1OGY4ZjhjNTI1NzEyMTNlZDU0ODVh
N2RkMTVkOTUwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcApAQCAtMTU1Niw5ICsxNTU2LDggQEAgdm9pZCBCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmR1bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCB0eXBlbmFtZSBC
bG9jazoKICAgICBjYXNlIG9wX2NhdGNoOiB7CiAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgdm9p
ZCogcG9pbnRlciA9IGdldFBvaW50ZXIoKigrK2l0KSk7CiAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGxvY2F0aW9uLCBpdCwgImNhdGNoIik7Ci0gICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJXAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCksIHBvaW50ZXIpOworICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBvcF90aHJvdzogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCmluZGV4IDkxMjcwZDZiYmY5ZTM3YzBmZTdiZTk1NWFi
YmJiOWVjMTBkNGIyNjkuLjRlMTlmMzA3ZDg1NzQ4YjMxMzkyYWIyYWI2ZTZkOTEwZmQ1OTg5ZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
anNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpz
b24KQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHVzaF93
aXRoX3Njb3BlIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9j
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfZ2V0X3BhcmVudF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAotICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfY2F0Y2giLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NhdGNoIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF90aHJvdyIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfdGhyb3dfc3RhdGljX2Vycm9yIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9kZWJ1ZyIsICJsZW5ndGgiIDogMyB9LApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAppbmRleCA2MDNhZjNjY2NmYTRkNmMw
Mzk3NGUxMmY3OGZiNTI2NDZiOTI2N2IwLi5mZGFhNzNmYzNiZTc2OGIwYmQzZDNiNTA5NGU4MjY1
MWE1ZjhlNWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuaApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5
cGVuYW1lIEJsb2NrLCB0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZSBJbnN0cnVjdGlvbj4KIHZv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChCbG9jayogY29kZUJsb2NrLCBPcGNvZGVJ
RCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogewotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9lbnRlciAmJiAoY29kZUJsb2NrLT53YXND
b21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSAm
JiBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpCisgICAgaWYgKG9wY29kZUlE
ICE9IG9wX2VudGVyICYmIGNvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2Rl
cygpICYmIGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLmlzVmFsaWQoKSkKICAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgY29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkub2Zmc2V0KCkpOwogCiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA5MzZjMTU1ZTRiYjJh
MDU4YWVmNzgxZDRmYzkyYmM2NTU0NTdlNjIxLi5lOWJlNmMyMTExNjE3N2VlY2NhZmE5ZDEwZTY4
YzRkNWI4MGQxMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcApAQCAtNTI5LDggKzUyOSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAg
ICAgIGluc3RydWN0aW9uc1tieXRlY29kZU9mZnNldCArIG9wTGVuZ3RoIC0gMV0gPSBwcm9maWxl
OwogICAgIH07CiAKLSAgICBWZWN0b3I8dW5zaWduZWQsIDQ+IGNhdGNoSW5kaWNlczsKLQogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7ICFpbnN0cnVjdGlvblJlYWRlci5hdEVuZCgpOyApIHsKICAg
ICAgICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMgPSBpbnN0cnVjdGlvblJlYWRlci5u
ZXh0KCk7CiAKQEAgLTgwNywxNiArODA1LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAg
ICAgICAgICAgICBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Y2FzZSBvcF9jYXRjaDogewotICAgICAgICAgICAgY2F0Y2hJbmRpY2VzLmFwcGVuZChpKTsKLSAg
ICAgICAgICAgIGJyZWFrOyAKLSAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotCiAgICAgICAgIGkgKz0gb3BMZW5ndGg7CiAgICAgfQog
CkBAIC04MzYsNDQgKzgyOCwxMiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgIGlmIChP
cHRpb25zOjphbHdheXNDb21wdXRlSGFzaCgpKQogICAgICAgICBoYXNoKCk7CiAKLSAgICBpZiAo
Y2F0Y2hJbmRpY2VzLnNpemUoKSkgewotICAgICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMm
IGJ5dGVjb2RlTGl2ZW5lc3MgPSBsaXZlbmVzc0FuYWx5c2lzKCk7Ci0gICAgICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+IGNhdGNoUHJvZmls
ZXM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hJbmRleCA6IGNhdGNoSW5kaWNlcykgewot
ICAgICAgICAgICAgLy8gV2UgZ2V0IHRoZSBsaXZlLW91dCBzZXQgb2YgdmFyaWFibGVzIGF0IG9w
X2NhdGNoLCBub3QgdGhlIGxpdmUtaW4uIFRoaXMKLSAgICAgICAgICAgIC8vIGlzIGJlY2F1c2Ug
dGhlIHZhcmlhYmxlcyB0aGF0IHRoZSBvcF9jYXRjaCBkZWZpbmVzIG1pZ2h0IGJlIGRlYWQsIGFu
ZAotICAgICAgICAgICAgLy8gd2UgY2FuIGF2b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRyYWN0
aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50cnkKLSAgICAgICAgICAgIC8vIGludG8gdGhlIERG
Ry4KLSAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5l
c3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjYXRjaEluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9jYXRjaCkpOwotICAgICAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbGl2
ZU9wZXJhbmRzOwotICAgICAgICAgICAgbGl2ZU9wZXJhbmRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGl2ZUxvY2Fscy5iaXRDb3VudCgpKTsKLSAgICAgICAgICAgIGxpdmVMb2NhbHMuZm9yRWFj
aFNldEJpdChbJl0gKHVuc2lnbmVkIGxpdmVMb2NhbCkgewotICAgICAgICAgICAgICAgIGxpdmVP
cGVyYW5kcy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobGl2ZUxvY2FsKSk7Ci0gICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0
ZXJzKCk7ICsraSkKLSAgICAgICAgICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKLQotICAgICAgICAgICAgYXV0byBwcm9maWxlcyA9IHN0
ZDo6bWFrZV91bmlxdWU8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRz
LnNpemUoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9maWxlcy0+bV9zaXplID09
IGxpdmVPcGVyYW5kcy5zaXplKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHByb2ZpbGVzLT5tX3NpemU7ICsraSkKLSAgICAgICAgICAgICAgICBwcm9maWxlcy0+bV9i
dWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOwotICAg
ICAgICAgICAgbV9pbnN0cnVjdGlvbnNbY2F0Y2hJbmRleCArIDNdLnUucG9pbnRlciA9IHByb2Zp
bGVzLmdldCgpOwotICAgICAgICAgICAgY2F0Y2hQcm9maWxlcy5hcHBlbmQoV1RGTW92ZShwcm9m
aWxlcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICAgICAgbV9jYXRjaFByb2ZpbGVzID0gV1RG
TW92ZShjYXRjaFByb2ZpbGVzKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmIChPcHRpb25z
OjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwotCisg
ICAgCiAgICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKICAgICBoZWFwKCktPnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJ
bnN0cnVjdGlvbikpOwotCisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1MjYsMTAg
KzI0ODYsOSBAQCBjb25zdCBJZGVudGlmaWVyJiBDb2RlQmxvY2s6OmlkZW50aWZpZXIoaW50IGlu
ZGV4KSBjb25zdAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRM
aXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1
bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcykKIHsKICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0KKyAgICAKICAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVu
dFZhbHVlUHJvZmlsZXMgPSAwOwogICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAv
LyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxz
IG51bWJlck9mVmFsdWVQcm9maWxlcygpIHRoZW4gdmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCi0K
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMo
KTsgKytpKSB7CiAgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IGdldEZyb21BbGxWYWx1
ZVByb2ZpbGVzKGkpOwogICAgICAgICB1bnNpZ25lZCBudW1TYW1wbGVzID0gcHJvZmlsZS50b3Rh
bE51bWJlck9mU2FtcGxlcygpOwpAQCAtMjU0NCwxMiArMjUwMyw2IEBAIHZvaWQgQ29kZUJsb2Nr
Ojp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9m
TGl2ZU5vbkFyCiAgICAgICAgICAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMrKzsKICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
ICAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiBtX2NhdGNoUHJvZmlsZXMp
IHsKLSAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmQmIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIHByb2ZpbGUubV9wcm9maWxlLmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwotICAgICAgICB9KTsKLSAgICB9CiAgICAgCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9ucyhsb2NrZXIpOwpAQCAtMjgzMywyMyArMjc4Niw2IEBAIHZvaWQgQ29k
ZUJsb2NrOjp2YWxpZGF0ZSgpCiAgICAgICAgICAgICBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwog
ICAgICAgICB9CiAgICAgfQotICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2luc3RydWN0aW9ucy5zaXplKCk7ICkgewotICAgICAg
ICBPcGNvZGVJRCBvcGNvZGUgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQobV9pbnN0cnVjdGlv
bnNbYnl0ZWNvZGVPZmZzZXRdKTsKLSAgICAgICAgaWYgKCEhYmFzZWxpbmVBbHRlcm5hdGl2ZSgp
LT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSB7Ci0gICAgICAgICAg
ICBpZiAob3Bjb2RlID09IG9wX2NhdGNoIHx8IG9wY29kZSA9PSBvcF9lbnRlcikgewotICAgICAg
ICAgICAgICAgIC8vIG9wX2NhdGNoL29wX2VudGVyIGxvZ2ljYWxseSByZXByZXNlbnQgYW4gZW50
cnlwb2ludC4gRW50cnlwb2ludHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlCi0gICAgICAgICAgICAg
ICAgLy8gaW5zaWRlIG9mIGEgdHJ5IGJsb2NrIGJlY2F1c2UgdGhleSBhcmUgcmVzcG9uc2libGUg
Zm9yIGJvb3RzdHJhcHBpbmcgc3RhdGUuIEFuZCB0aGV5Ci0gICAgICAgICAgICAgICAgLy8gYXJl
IG5ldmVyIGFsbG93ZWQgdGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhpcy4gV2UgcmVs
eSBvbiB0aGlzIHdoZW4gY29tcGlsaW5nCi0gICAgICAgICAgICAgICAgLy8gaW4gdGhlIERGRy4g
QmVjYXVzZSBhbiBlbnRyeXBvaW50IG5ldmVyIHRocm93cywgdGhlIGJ5dGVjb2RlIGdlbmVyYXRv
ciB3aWxsIG5ldmVyCi0gICAgICAgICAgICAgICAgLy8gYWxsb3cgb25jZSBpbnNpZGUgYSB0cnkg
YmxvY2suCi0gICAgICAgICAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBlbnRyeXBvaW50IG5vdCBhbGxvd2VkIGluc2lkZSBhIHRy
eSBibG9jay4iKTsKLSAgICAgICAgICAgICAgICBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxl
bmd0aChvcGNvZGUpOwotICAgIH0KIH0KIAogdm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlv
bkRpZEZhaWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmlu
ZGV4IDQ1NDg4YjM2MzQ5ZDY5ZjY5MWNkODQ1YmRlODgxYTY5ODFkNTMzNGYuLjcyOWY2Y2Y3ZDM0
NGIzZTg1MDE2OTI5ZTQxN2MxY2Y0ZGUwMTA1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTEwMDMsNyArMTAwMyw2IEBAIHByaXZhdGU6CiAjZW5k
aWYKICAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPiBtX2FyZ3VtZW50VmFsdWVQcm9m
aWxlczsKICAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7
Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
Pj4gbV9jYXRjaFByb2ZpbGVzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxSYXJlQ2FzZVByb2ZpbGUs
IDg+IG1fcmFyZUNhc2VQcm9maWxlczsKICAgICBSZWZDb3VudGVkQXJyYXk8QXJyYXlBbGxvY2F0
aW9uUHJvZmlsZT4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlczsKICAgICBBcnJheVByb2ZpbGVW
ZWN0b3IgbV9hcnJheVByb2ZpbGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCmluZGV4IGM4MTQzMDA2ZmQ4YWM4NDc1NGFjMmMyOGI0NTlkMDQwNDQx
NTQwOWUuLmJhNGZmYjdlOGRmNzcxMWJmNDk3Y2YxZmFhMzRkYzdiM2I1YjI4ZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3NCw4ICsx
NzQsOCBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0cyA6IHB1Ymxp
YyBWYWx1ZVByb2ZpbGVCYXNlPDEgPDwgbG9nTnVtYgogfTsKIAogc3RydWN0IFZhbHVlUHJvZmls
ZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKLSAgICBW
YWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7
IH0KLSAgICBWYWx1ZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KSA6IFZhbHVlUHJvZmlsZVdp
dGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oYnl0ZWNvZGVPZmZzZXQpIHsgfQorICAgIFZhbHVlUHJv
ZmlsZSgpOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAg
VmFsdWVQcm9maWxlKGludCBieXRlY29kZU9mZnNldCk6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1i
ZXJPZkJ1Y2tldHM8MD4oYnl0ZWNvZGVPZmZzZXQpIHsgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KQEAgLTIwMiwzOCArMjAyLDQgQEAgaW5saW5lIGludCBnZXRSYXJlQ2FzZVByb2ZpbGVC
eXRlY29kZU9mZnNldChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZSkKICAgICByZXR1
cm4gcmFyZUNhc2VQcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0OwogfQogCi1zdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCB7Ci0gICAgVmFsdWVQcm9maWxlIG1fcHJvZmlsZTsKLSAgICBpbnQg
bV9vcGVyYW5kOwotfTsKLQotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewot
ICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKLSAgICAgICAg
OiBtX3NpemUoc2l6ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFz
IG1vcmUgc3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBw
cm9maWxlcwotICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAg
ICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1f
c2l6ZSAqIHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVy
LmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7Ci0gICAgfQotCi0gICAgflZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+Ci0gICAgdm9pZCBmb3JFYWNoKEZ1bmN0aW9uIGZ1bmN0aW9uKQotICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAg
ZnVuY3Rpb24obV9idWZmZXIuZ2V0KClbaV0pOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG1fc2l6
ZTsKLSAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7Ci19Owot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggZGE1NDkzZTg3NTI1MGM5
NmVlYjA4OTE2MzRkNWEwOWNmMmMzZGU1NC4uNjJiNTYxNTU0Y2MwMTRhOWI2MjE2OWExZmFiYzgy
Yzg1ZThmZmQwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE1NCwxOCArMTU0LDYgQEAgUGFyc2Vy
RXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKICAgICAgICAgZW1pdFVucmVhY2hh
YmxlKCk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY2F0Y2hlc1RvRW1pdCkg
ewotICAgICAgICBSZWY8TGFiZWw+IHJlYWxDYXRjaFRhcmdldCA9IG5ld0VtaXR0ZWRMYWJlbCgp
OwotICAgICAgICBlbWl0T3Bjb2RlKG9wX2NhdGNoKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHN0ZDo6Z2V0PDE+KHR1cGxlKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChzdGQ6OmdldDwyPih0dXBsZSkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
Ci0KLSAgICAgICAgVHJ5RGF0YSogdHJ5RGF0YSA9IHN0ZDo6Z2V0PDA+KHR1cGxlKTsKLSAgICAg
ICAgZW1pdEp1bXAodHJ5RGF0YS0+dGFyZ2V0LmdldCgpKTsKLSAgICAgICAgdHJ5RGF0YS0+dGFy
Z2V0ID0gV1RGTW92ZShyZWFsQ2F0Y2hUYXJnZXQpOwotICAgIH0KLQogICAgIG1fc3RhdGljUHJv
cGVydHlBbmFseXplci5raWxsKCk7CiAKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV90cnlSYW5n
ZXMpIHsKQEAgLTcyNiw3ICs3MTQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogCiAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZSA9IG5ld1RlbXBvcmFyeSgpOwogICAg
ICAgICBSZWdpc3RlcklEKiB1bnVzZWQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgZW1pdENh
dGNoKHVudXNlZCwgdGhyb3duVmFsdWUuZ2V0KCksIHRyeUZvcm1hbFBhcmFtZXRlcnNEYXRhKTsK
KyAgICAgICAgZW1pdENhdGNoKHVudXNlZCwgdGhyb3duVmFsdWUuZ2V0KCkpOwogCiAgICAgICAg
IC8vIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0KHRocm93blZhbHVlKQogICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVqZWN0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCks
IHByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIoKSwgbV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5hbWUoKSk7CkBAIC00MDIxLDkgKzQwMDksMTEgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5KFRyeURhdGEqIHRyeURhdGEsIExhYmVsJiBlbmQp
CiAgICAgbV90cnlDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2F0Y2goUmVnaXN0ZXJJRCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lz
dGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIFRyeURhdGEqIGRhdGEpCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2F0Y2goUmVnaXN0ZXJJRCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lz
dGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIpCiB7Ci0gICAgbV9jYXRjaGVzVG9FbWl0LmFwcGVu
ZChDYXRjaEVudHJ5IHsgZGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXItPmluZGV4KCksIHRocm93blZh
bHVlUmVnaXN0ZXItPmluZGV4KCkgfSk7CisgICAgZW1pdE9wY29kZShvcF9jYXRjaCk7CisgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGV4Y2VwdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodGhyb3duVmFsdWVSZWdpc3Rlci0+aW5kZXgoKSk7CiB9CiAK
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc3RvcmVTY29wZVJlZ2lzdGVyKGludCBsZXhpY2Fs
U2NvcGVJbmRleCkKQEAgLTQzNTUsNyArNDM0NSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgRXhwcmVzc2lv
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxseUV4Y2VwdGlvblJlZ2lzdGVy
ID0gbmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBSZWdpc3RlcklEKiB1bnVzZWQgPSBuZXdU
ZW1wb3JhcnkoKTsKIAotICAgICAgICAgICAgZW1pdENhdGNoKGNvbXBsZXRpb25WYWx1ZVJlZ2lz
dGVyKCksIHVudXNlZCwgdHJ5RGF0YSk7CisgICAgICAgICAgICBlbWl0Q2F0Y2goY29tcGxldGlv
blZhbHVlUmVnaXN0ZXIoKSwgdW51c2VkKTsKICAgICAgICAgICAgIGVtaXRTZXRDb21wbGV0aW9u
VHlwZShDb21wbGV0aW9uVHlwZTo6VGhyb3cpOwogICAgICAgICAgICAgZW1pdE1vdmUoZmluYWxs
eUV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCBjb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpKTsKICAg
ICAgICAgICAgIGVtaXRKdW1wKGZpbmFsbHlCb2R5TGFiZWwuZ2V0KCkpOwpAQCAtNDM5NSw3ICs0
Mzg1LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHByZXNzaW8KICAgICAgICAgICAgICAgICBlbWl0TGFi
ZWwoY2F0Y2hMYWJlbC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGV4Y2VwdGlvblJlZ2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICAgICAgUmVn
aXN0ZXJJRCogdW51c2VkID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICAgICAgZW1pdENh
dGNoKGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB1bnVzZWQsIHJldHVybkNhbGxUcnlEYXRhKTsK
KyAgICAgICAgICAgICAgICBlbWl0Q2F0Y2goZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIHVudXNl
ZCk7CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBhIHN5bnRoZXNpemVkIGNhdGNo
IGJsb2NrIGFuZCB3ZSdyZSBndWFyYW50ZWVkIHRvIG5ldmVyIG5lZWQKICAgICAgICAgICAgICAg
ICAvLyB0byByZXNvbHZlIGFueSBzeW1ib2xzIGZyb20gdGhlIHNjb3BlLCB3ZSBjYW4gc2tpcCBy
ZXN0b3JpbmcgdGhlIHNjb3BlCiAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgaGVyZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAppbmRleCA4OTRhZDI4ZjRjMzBiOGQ3MmE0M2YzZTg4Y2M3ZTI1MmY1ZThhMGMwLi4x
N2Y2NWZlOWM5Yzg3NjkxZmQ5YWE0OGQzNzJmZDFlOWMzMjVmNDFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBA
IC03OTIsNyArNzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRyeURhdGEqIHB1c2hU
cnkoTGFiZWwmIHN0YXJ0LCBMYWJlbCYgaGFuZGxlckxhYmVsLCBIYW5kbGVyVHlwZSk7CiAgICAg
ICAgIC8vIEVuZCBhIHRyeSBibG9jay4gJ2VuZCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KICAg
ICAgICAgdm9pZCBwb3BUcnkoVHJ5RGF0YSosIExhYmVsJiBlbmQpOwotICAgICAgICB2b2lkIGVt
aXRDYXRjaChSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3du
VmFsdWVSZWdpc3RlciwgVHJ5RGF0YSopOworICAgICAgICB2b2lkIGVtaXRDYXRjaChSZWdpc3Rl
cklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3duVmFsdWVSZWdpc3Rlcik7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IEN1cnJlbnRMZXhpY2Fs
U2NvcGVJbmRleCA9IC0yOwpAQCAtMTIwMCw5ICsxMjAwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9pblRhaWxQb3NpdGlvbiB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9u
ZWVkc1RvVXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQ7CiAgICAgICAgIERlcml2ZWRDb250ZXh0
VHlwZSBtX2Rlcml2ZWRDb250ZXh0VHlwZSB7IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSB9Owot
Ci0gICAgICAgIHVzaW5nIENhdGNoRW50cnkgPSBzdGQ6OnR1cGxlPFRyeURhdGEqLCBpbnQsIGlu
dD47Ci0gICAgICAgIFZlY3RvcjxDYXRjaEVudHJ5PiBtX2NhdGNoZXNUb0VtaXQ7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggYzYxYTliOWU4MGVmZWUyNGVhYTFhOTFk
ZmQzY2ZiZTYwNjEzNzc2NC4uMTRmYjdhM2M0MjUwOWU5NTY2MTllZDc3NDc0NjdlNzhlMjIyN2My
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcApAQCAtMzQwOCw5ICszNDA4LDYgQEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIExh
YmVsJiB0cnlIYW5kbGVyTGFiZWwgPSBtX2NhdGNoQmxvY2sgPyAqY2F0Y2hMYWJlbCA6ICpmaW5h
bGx5VmlhVGhyb3dMYWJlbDsKICAgICBIYW5kbGVyVHlwZSB0cnlIYW5kbGVyVHlwZSA9IG1fY2F0
Y2hCbG9jayA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpGaW5hbGx5OwogICAg
IFRyeURhdGEqIHRyeURhdGEgPSBnZW5lcmF0b3IucHVzaFRyeSh0cnlTdGFydExhYmVsLmdldCgp
LCB0cnlIYW5kbGVyTGFiZWwsIHRyeUhhbmRsZXJUeXBlKTsKLSAgICBUcnlEYXRhKiBmaW5hbGx5
VHJ5RGF0YSA9IG51bGxwdHI7Ci0gICAgaWYgKCFtX2NhdGNoQmxvY2sgJiYgbV9maW5hbGx5Qmxv
Y2spCi0gICAgICAgIGZpbmFsbHlUcnlEYXRhID0gdHJ5RGF0YTsKIAogICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fdHJ5QmxvY2spOwogCkBAIC0zNDI3LDEzICszNDI0LDE0IEBAIHZvaWQg
VHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqY2F0Y2hMYWJlbCk7CiAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiB1bnVzZWQgPSBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2F0Y2godW51c2VkLCB0aHJv
d25WYWx1ZVJlZ2lzdGVyLmdldCgpLCB0cnlEYXRhKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRD
YXRjaCh1bnVzZWQsIHRocm93blZhbHVlUmVnaXN0ZXIuZ2V0KCkpOwogICAgICAgICBnZW5lcmF0
b3IucmVzdG9yZVNjb3BlUmVnaXN0ZXIoKTsKIAorICAgICAgICBUcnlEYXRhKiB0cnlEYXRhID0g
bnVsbHB0cjsKICAgICAgICAgaWYgKG1fZmluYWxseUJsb2NrKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgY2F0Y2ggYmxvY2sgdGhyb3dzIGFuIGV4Y2VwdGlvbiBhbmQgd2UgaGF2ZSBhIGZpbmFs
bHkgYmxvY2ssIHRoZW4gdGhlIGZpbmFsbHkKICAgICAgICAgICAgIC8vIGJsb2NrIHNob3VsZCAi
Y2F0Y2giIHRoYXQgZXhjZXB0aW9uLgotICAgICAgICAgICAgZmluYWxseVRyeURhdGEgPSBnZW5l
cmF0b3IucHVzaFRyeSgqY2F0Y2hMYWJlbCwgKmZpbmFsbHlWaWFUaHJvd0xhYmVsLCBIYW5kbGVy
VHlwZTo6RmluYWxseSk7CisgICAgICAgICAgICB0cnlEYXRhID0gZ2VuZXJhdG9yLnB1c2hUcnko
KmNhdGNoTGFiZWwsICpmaW5hbGx5VmlhVGhyb3dMYWJlbCwgSGFuZGxlclR5cGU6OkZpbmFsbHkp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fY2F0Y2hQYXR0ZXJuKSB7CkBAIC0zNDU0LDcg
KzM0NTIsNyBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAgICAgIGlmIChtX2ZpbmFsbHlCbG9jaykg
ewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRTZXRDb21wbGV0aW9uVHlwZShDb21wbGV0aW9u
VHlwZTo6Tm9ybWFsKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcCgqZmluYWxseUxh
YmVsKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wb3BUcnkoZmluYWxseVRyeURhdGEsICpmaW5h
bGx5VmlhVGhyb3dMYWJlbCk7CisgICAgICAgICAgICBnZW5lcmF0b3IucG9wVHJ5KHRyeURhdGEs
ICpmaW5hbGx5VmlhVGhyb3dMYWJlbCk7CiAgICAgICAgIH0KIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKCpjYXRjaEVuZExhYmVsKTsKQEAgLTM0NjcsNyArMzQ2NSw3IEBAIHZvaWQgVHJ5
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKICAgICAgICAgLy8gRW50cnkgdG8gdGhlIGZpbmFsbHkgYmxvY2sgZm9yIENvbXBs
ZXRpb25UeXBlOjpUaHJvdy4KICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqZmluYWxseVZp
YVRocm93TGFiZWwpOwogICAgICAgICBSZWdpc3RlcklEKiB1bnVzZWQgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2F0Y2goZ2VuZXJhdG9yLmNvbXBs
ZXRpb25WYWx1ZVJlZ2lzdGVyKCksIHVudXNlZCwgZmluYWxseVRyeURhdGEpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdENhdGNoKGdlbmVyYXRvci5jb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpLCB1
bnVzZWQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFNldENvbXBsZXRpb25UeXBlKENvbXBsZXRp
b25UeXBlOjpUaHJvdyk7CiAKICAgICAgICAgLy8gRW50cnkgdG8gdGhlIGZpbmFsbHkgYmxvY2sg
Zm9yIENvbXBsZXRpb25UeXBlcyBvdGhlciB0aGFuIFRocm93LgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmlu
ZGV4IGJiYTA2ZGFjZGYxOWEzZjk2YTM3YjQ5NmIwYzI3OGRhYjFkYTJlNDEuLjQwZWVhOTRiMjEx
OGU2YjUyOTU5ZmYyOTNlYjQ1NGJmY2IwNDc2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIw
OCw3ICsyMDgsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAotICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDogewogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRv
cCgpOwogICAgICAgICBicmVhazsKQEAgLTE4NTIsNyArMTg1MSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgIC8vIEZJWE1FOiBEbyBzcGFyc2UgY29uZGl0aW9uYWwgdGhpbmdz
LgogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgICAgIAogICAgIGNhc2UgUmV0dXJu
OgogICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc0NGRy5oCmluZGV4IDdhMTg5NTBm
NmRhMjFiNDZiYzY4NTdiOGM0MWEwOTQwYTQ5ZTJiODIuLjkwMzY4NWE3Nzc3NDYwNmRlYzdhODZh
Mzk3NWVjMWQ5ZTc2ZTlhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFja3dhcmRzQ0ZHLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNDRkcuaApAQCAtMzIsMTIgKzMyLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotY2xhc3MgQmFja3dhcmRzQ0ZHIDogcHVibGljIEJhY2t3YXJkc0dyYXBoPFNT
QUNGRz4geworY2xhc3MgQmFja3dhcmRzQ0ZHIDogcHVibGljIEJhY2t3YXJkc0dyYXBoPENGRz4g
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0NGRyk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgQmFja3dhcmRzQ0ZHKEdyYXBoJiBncmFwaCkK
LSAgICAgICAgOiBCYWNrd2FyZHNHcmFwaDxTU0FDRkc+KHNlbGVjdENGRzxTU0FDRkc+KGdyYXBo
KSkKKyAgICAgICAgOiBCYWNrd2FyZHNHcmFwaDxDRkc+KCpncmFwaC5tX2NmZykKICAgICB7CiAg
ICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCmlu
ZGV4IGMyY2E5ZjMzMjEwODRkZmNjYjdkYzZiYjk5MDVlMWQwNGFmNTI4MzUuLjM4M2VlNGI5YWI0
NjMwMjlhODVlN2NmNzU3NGRjZGIzOTU2M2IwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcApAQCAtMzcsNyArMzcsNiBAQCBCYXNpY0Jsb2NrOjpCYXNp
Y0Jsb2NrKAogICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICwgaW5kZXgo
Tm9CbG9jaykKICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICwgaXNDYXRjaEVudHJ5cG9p
bnQoZmFsc2UpCiAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICwgY2ZhU2hvdWxkUmV2
aXNpdChmYWxzZSkKICAgICAsIGNmYUZvdW5kQ29uc3RhbnRzKGZhbHNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAppbmRleCBkZTZhYmU4ZmEwZDcyZTJlYzk2MWIw
OGRmMDYzNmYzM2Y2YjljZmFmLi4xODc3M2QwZjY4ZjgzYTM0YWU2OWJiNDFlODJiZWExMWEzN2I0
NjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtODIs
OSArODIsMTcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsK
ICAgICAgICAgc2l6ZV90IGkgPSBzaXplKCk7CiAgICAgICAgIHdoaWxlIChpLS0pIHsKICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBhdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5pc1Rlcm1p
bmFsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVBbmRJbmRleChub2RlLCBpKTsKICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBKdW1wOgor
ICAgICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAg
ICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAg
ICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CisgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
czoKKyAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAg
IGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVBbmRJbmRleChu
b2RlLCBpKTsKICAgICAgICAgICAgIC8vIFRoZSBiaXR0ZXIgZW5kIGNhbiBjb250YWluIFBoYW50
b21zIGFuZCB0aGUgbGlrZS4gVGhlcmUgd2lsbCBwcm9iYWJseSBvbmx5IGJlIG9uZSBvciB0d28g
bm9kZXMgYWZ0ZXIgdGhlIHRlcm1pbmFsLiBUaGV5IGFyZSBhbGwgbm8tb3BzIGFuZCB3aWxsIG5v
dCBoYXZlIGFueSBjaGVja2VkIGNoaWxkcmVuLgogICAgICAgICAgICAgY2FzZSBDaGVjazogLy8g
VGhpcyBpcyBoZXJlIGJlY2F1c2UgaXQncyBvdXIgdW5pdmVyc2FsIG5vLW9wLgogICAgICAgICAg
ICAgY2FzZSBQaGFudG9tOgpAQCAtMTc3LDcgKzE4NSw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDog
UmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmxvY2tJbmRleCBpbmRleDsKICAgICAKICAg
ICBib29sIGlzT1NSVGFyZ2V0OwotICAgIGJvb2wgaXNDYXRjaEVudHJ5cG9pbnQ7CiAgICAgYm9v
bCBjZmFIYXNWaXNpdGVkOwogICAgIGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsKICAgICBib29sIGNm
YUZvdW5kQ29uc3RhbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAppbmRleCBkMjE5MzM3MWQxYzE0MjUzZTc3NDQ5M2Q4MmQ0OGJhOGE2ZjVk
NWYzLi5hM2NiYjIwYTk4Y2UyZWU0Yjc0YjA1MmU5YTA3NzFlNzc2OWFhMWVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzcsNyAr
MzcsNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZH
QWJzdHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCi0jaW5jbHVkZSAiREZH
Q0ZHLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJl
cml6ZS5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCkBAIC00MDIsMTQgKzQw
MSwxNCBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVz
ZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFs
c2U7CiAKLSAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQoY3VycmVudENvZGVPcmlnaW4o
KSwgb3BlcmFuZCwgdmFsdWUsIHNldE1vZGUpOworICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVs
YXllZChjdXJyZW50Q29kZU9yaWdpbigpLCBvcGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoc2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKICAgICAgICAgICAgIG1fc2V0TG9jYWxR
dWV1ZS5hcHBlbmQoZGVsYXllZCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1cm4gZGVs
YXllZC5leGVjdXRlKHRoaXMpOworICAgICAgICByZXR1cm4gZGVsYXllZC5leGVjdXRlKHRoaXMs
IHNldE1vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkK
QEAgLTY0Myw3ICs2NDIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5s
aW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFy
Z3VtZW50KSkpOwogICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZy
YW1lICYmIG1fZ3JhcGgubmVlZHNGbHVzaGVkVGhpcygpKQogICAgICAgICAgICAgZmx1c2hEaXJl
Y3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkpOwotCiAgICAgICAgIGlmIChtX2dyYXBo
Lm5lZWRzU2NvcGVSZWdpc3RlcigpKQogICAgICAgICAgICAgZmx1c2hEaXJlY3QobV9jb2RlQmxv
Y2stPnNjb3BlUmVnaXN0ZXIoKSk7CiAgICAgfQpAQCAtMTEzMyw3ICsxMTMxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gUG90ZW50aWFsIGJsb2NrIGxpbmtpbmcgdGFyZ2V0cy4gTXVzdCBiZSBz
b3J0ZWQgYnkgYnl0ZWNvZGVCZWdpbiwgYW5kCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIHR3byBi
bG9ja3MgdGhhdCBoYXZlIHRoZSBzYW1lIGJ5dGVjb2RlQmVnaW4uCiAgICAgICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gbV9ibG9ja0xpbmtpbmdUYXJnZXRzOwotCisgICAgICAgIAogICAgICAgICAv
LyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQgaW50byB0d28sIHRoZW4g
dGhpcyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBjYWxsc2l0ZSBibG9jay4g
SXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQogICAgICAgICAvLyBtX3VubGlu
a2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kOiB0aGVyZSdzIG5vIHdheSBm
b3IKQEAgLTEyMDIsMjMgKzEyMDAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgQ29kZU9yaWdpbiBt
X29yaWdpbjsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKICAgICAgICAgTm9k
ZSogbV92YWx1ZTsKLSAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgICAgIAogICAgICAg
ICBEZWxheWVkU2V0TG9jYWwoKSB7IH0KLSAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0IENv
ZGVPcmlnaW4mIG9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBT
ZXRNb2RlIHNldE1vZGUpCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2lu
JiBvcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSkKICAgICAgICAg
ICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
ICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgICAgICwgbV9zZXRNb2RlKHNl
dE1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9wZXJhbmQuaXNW
YWxpZCgpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTm9kZSogZXhlY3V0ZShCeXRl
Q29kZVBhcnNlciogcGFyc2VyKQorICAgICAgICBOb2RlKiBleGVjdXRlKEJ5dGVDb2RlUGFyc2Vy
KiBwYXJzZXIsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRN
b2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsKG1fb3JpZ2luLCBtX29w
ZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgc2V0TW9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBt
X3ZhbHVlLCBzZXRNb2RlKTsKICAgICAgICAgfQogICAgIH07CiAgICAgCkBAIC00MTM5LDExICs0
MTM1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAvLyB1cyB0byB0cmFjayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBh
Y3R1YWwgYXJndW1lbnQgcGFzc2VkLCBhcwogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1
ZSB3ZSBzZXQgZXhwbGljaXRseS4KICAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5i
bG9jaygwKSAmJiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmFkZChtX2N1cnJlbnRCbG9jaywgQXJn
dW1lbnRzVmVjdG9yKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7Ci0gICAgICAgIEFyZ3VtZW50c1ZlY3RvciYgZW50cnlwb2ludEFyZ3VtZW50cyA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGVudHJ5cG9pbnRBcmd1bWVudHMucmVz
aXplKG1fbnVtQXJndW1lbnRzKTsKLQorICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6
ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBTZXRBcmd1bWVudCBu
b2Rlcy4gVGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRvcCBvZiBhbiBvcF9lbnRl
ciBzbwogICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgogICAgICAgICBtX2V4aXRPSyA9IHRydWU7
CkBAIC00MTU2LDcgKzQxNDgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZEluZGV4aW5nVHlwZSkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0
QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgZW50cnlwb2ludEFyZ3Vt
ZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1
bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1
bWVudCk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjI2LDEzMSArNTIxOCwxMCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgYWRk
VG9HcmFwaChVbnJlYWNoYWJsZSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19z
dGF0aWNfZXJyb3IpOwogCi0gICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgY2FzZSBv
cF9jYXRjaDoKICAgICAgICAgICAgIG1fZ3JhcGgubV9oYXNFeGNlcHRpb25IYW5kbGVycyA9IHRy
dWU7Ci0KLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICAgICAg
ICAgIC8vIFdlIGNhbid0IGRvIE9TUiBlbnRyeSBpbnRvIGFuIGlubGluZWQgZnJhbWUuCi0gICAg
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBjYXRjaCBpbiB0aGUgRlRMLgotICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKLSAgICAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+c2l6ZSgpKTsKLQotICAgICAgICAg
ICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VmFs
dWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcio+KGN1cnJlbnRJbnN0cnVjdGlvblszXS51LnBvaW50
ZXIpOwotCi0gICAgICAgICAgICBWZWN0b3I8U3BlY3VsYXRlZFR5cGU+IGFyZ3VtZW50UHJlZGlj
dGlvbnMobV9udW1Bcmd1bWVudHMpOwotICAgICAgICAgICAgVmVjdG9yPFNwZWN1bGF0ZWRUeXBl
PiBsb2NhbFByZWRpY3Rpb25zOwotICAgICAgICAgICAgSGFzaFNldDx1bnNpZ25lZCwgV1RGOjpJ
bnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNp
Z25lZD4+IHNlZW5Bcmd1bWVudHM7Ci0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKLQotICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGljdGlvbnNBcmVFbXB0
eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLm1fcHJvZmlsZS5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGljdGlvbnNB
cmVFbXB0eSAmPSBwcmVkaWN0aW9uID09IFNwZWNOb25lOwotICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFByZWRp
Y3Rpb25zLmFwcGVuZChwcmVkaWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcGVyYW5kLmlzQXJndW1lbnQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDx1
aW50MzJfdD4ob3BlcmFuZC50b0FyZ3VtZW50KCkpIDwgYXJndW1lbnRQcmVkaWN0aW9ucy5zaXpl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkFyZ3VtZW50cy5hZGQob3BlcmFuZC50b0Fy
Z3VtZW50KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRQcmVkaWN0aW9uc1tv
cGVyYW5kLnRvQXJndW1lbnQoKV0gPSBwcmVkaWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVu
YWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNlZW5Bcmd1bWVudHMuY29udGFpbnMoYXJndW1lbnQp
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGljdGlv
bnNBcmVFbXB0eSAmJiAoYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkgfHwgbG9jYWxQcmVkaWN0
aW9ucy5zaXplKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNh
c2UsIHdlIGhhdmVuJ3QgZXhlY3V0ZWQgdGhpcyBjYXRjaCB5ZXQuIExldCdzIG5vdCBjb21waWxl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGl0IGFzIGFuIGVudHJ5cG9pbnQuCi0gICAgICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY29tcGls
aW5nIHRoaXMgYXMgYW4gZW50cnlwb2ludC4KLQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmlzQ2F0Y2hFbnRyeXBvaW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBv
aW50cy5hcHBlbmQobV9jdXJyZW50QmxvY2spOwotCi0gICAgICAgICAgICBWZWN0b3I8c3RkOjpw
YWlyPFZpcnR1YWxSZWdpc3RlciwgTm9kZSo+PiBsb2NhbHNUb1NldDsKLSAgICAgICAgICAgIGxv
Y2Fsc1RvU2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYnVmZmVyLT5tX3NpemUpOyAvLyBOb3Rl
OiBUaGlzIHdpbGwgcmVzZXJ2ZSBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBsb2NhbHMgd2Ugc2Vl
IGJlbG93IGJlY2F1c2UgdGhlIGJ1ZmZlciBpbmNsdWRlcyBhcmd1bWVudHMuCi0KLSAgICAgICAg
ICAgIC8vIFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGV4aXQgaGVyZSBzaW5jZSB3ZSB3b3VsZCBub3Qg
cHJvcGVybHkgcmVjb3ZlciB2YWx1ZXMuCi0gICAgICAgICAgICAvLyBXZSBmaXJzdCBuZWVkIHRv
IGJvb3RzdHJhcCB0aGUgY2F0Y2ggZW50cnlwb2ludCBzdGF0ZS4KLSAgICAgICAgICAgIG1fZXhp
dE9LID0gZmFsc2U7IAotCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscyA9IDA7
Ci0gICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
JiBwcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJv
ZmlsZS5tX29wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIEFTU0VSVChv
cGVyYW5kLmlzTG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dy
YXBoKEV4dHJhY3RDYXRjaExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9j
YWxQcmVkaWN0aW9uc1tudW1iZXJPZkxvY2Fsc10pKTsKLSAgICAgICAgICAgICAgICArK251bWJl
ck9mTG9jYWxzOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKHBy
b2ZpbGUubV9vcGVyYW5kKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVu
Y2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwotICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgIGlmICghbV9ncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NS
RW50cnkpCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50
cnkgPSAwOwotICAgICAgICAgICAgbV9ncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnkg
PSBzdGQ6Om1heChudW1iZXJPZkxvY2FscywgKm1fZ3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9T
UkVudHJ5KTsKLQotICAgICAgICAgICAgLy8gV2UgY291bGQgbm90IGV4aXQgYmVmb3JlIHRoaXMg
cG9pbnQgaW4gdGhlIHByb2dyYW0gYmVjYXVzZSB3ZSB3b3VsZCBub3Qga25vdyBob3cgdG8gZG8g
dmFsdWUKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5IGZvciBsaXZlIGxvY2Fscy4gVGhlIGFib3Zl
IElSIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBzdGF0ZSBzbyB3ZSBjYW4gcmVjb3ZlciB2YWx1ZXMK
LSAgICAgICAgICAgIC8vIGR1cmluZyBPU1IgZXhpdC4gCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gVGhlIG5vZGVzIHRoYXQgZm9sbG93IGhlcmUgYWxsIGV4aXQgdG8gdGhlIGZvbGxv
d2luZyBieXRlY29kZSBpbnN0cnVjdGlvbiwgbm90Ci0gICAgICAgICAgICAvLyB0aGUgb3BfY2F0
Y2guIEV4aXRpbmcgdG8gb3BfY2F0Y2ggaXMgcmVzZXJ2ZWQgZm9yIHdoZW4gYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KLSAgICAgICAgICAgIC8vIFRoZSBTZXRBcmd1bWVudCBub2RlcyB0aGF0IGZv
bGxvdyBiZWxvdyBtYXkgZXhpdCBiZWNhdXNlIHdlIG1heSBob2lzdCB0eXBlIGNoZWNrcwotICAg
ICAgICAgICAgLy8gdG8gdGhlbS4gVGhlIFNldExvY2FsIG5vZGVzIHRoYXQgZm9sbG93IGJlbG93
IG1heSBleGl0IGJlY2F1c2Ugd2UgbWF5IGNob29zZQotICAgICAgICAgICAgLy8gYSBmbHVzaCBm
b3JtYXQgdGhhdCBzcGVjdWxhdGVzIG9uIHRoZSB0eXBlIG9mIHRoZSBsb2NhbC4KLSAgICAgICAg
ICAgIG1fZXhpdE9LID0gdHJ1ZTsgCi0gICAgICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7Ci0K
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZ3JhcGgu
bV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuYWRkKG1fY3VycmVudEJsb2NrLCBBcmd1bWVudHNWZWN0
b3IoKSk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50
cnkpOwotICAgICAgICAgICAgICAgIEFyZ3VtZW50c1ZlY3RvciYgZW50cnlwb2ludEFyZ3VtZW50
cyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgZW50cnlwb2lu
dEFyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwotCi0gICAgICAgICAgICAgICAgdW5z
aWduZWQgZXhpdEJ5dGVjb2RlSW5kZXggPSBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3BfY2F0Y2gpOwotCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsrYXJndW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOwotICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+cHJlZGljdChhcmd1bWVudFByZWRpY3Rpb25zW2Fy
Z3VtZW50XSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ0ZhaWxlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoZXhpdEJ5dGVjb2RlSW5kZXgsIEJhZENh
Y2hlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUNoZWNrQXJyYXlIb2lz
dGluZ0ZhaWxlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoZXhpdEJ5dGVjb2RlSW5kZXgsIEJhZEluZGV4aW5nVHlw
ZSkpOwotCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFw
aChTZXRBcmd1bWVudCwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dEFyZ3VtZW50LT5vcmlnaW4uZm9yRXhpdC5ieXRlY29kZUluZGV4ID0gZXhpdEJ5dGVjb2RlSW5k
ZXg7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
c2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgZW50cnlwb2ludEFyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoY29uc3Qg
c3RkOjpwYWlyPFZpcnR1YWxSZWdpc3RlciwgTm9kZSo+JiBwYWlyIDogbG9jYWxzVG9TZXQpIHsK
LSAgICAgICAgICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZCB7IGN1cnJlbnRDb2RlT3Jp
Z2luKCksIHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kLCBJbW1lZGlhdGVOYWtlZFNldCB9OwotICAg
ICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoZGVsYXllZCk7Ci0gICAgICAgICAg
ICB9Ci0KICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKLSAgICAgICAgfQotCisg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsOgogICAgICAgICAgICAgaGFuZGxlQ2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2RlOjpSZWd1bGFyKTsKICAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3VycmVudElu
c3RydWN0aW9uLCAiaGFuZGxlQ2FsbCwgd2hpY2ggbWF5IGhhdmUgaW5saW5lZCB0aGUgY2FsbGVl
LCB0cmFzaGVkIG1fY3VycmVudEluc3RydWN0aW9uIik7CkBAIC02Mzc1LDEwICs2MjQ2LDggQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2Nr
KGJsb2NrLnB0cigpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
YmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQoYmxvY2sucHRyKCkpOwogICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgZmlyc3QgYmxvY2sgaXMgZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0LgotICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubnVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2dyYXBoLm51bUJsb2NrcygpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9lbnRyeXBvaW50cy5hcHBlbmQoYmxvY2sucHRyKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShi
bG9jaykpOwogICAgICAgICAgICAgICAgICAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtNjQzNSwxMiArNjMwNCwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZSgpCiAgICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIElubGluZUNh
bGxGcmFtZTo6Q2FsbCk7CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKLSAgICBsaW5rQmxv
Y2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5t
X2Jsb2NrTGlua2luZ1RhcmdldHMpOwogCisgICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5
Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRz
KTsKICAgICBtX2dyYXBoLmRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogICAgIG1fZ3JhcGgua2ls
bFVucmVhY2hhYmxlQmxvY2tzKCk7Ci0KLSAgICBtX2dyYXBoLm1fY3BzQ0ZHID0gc3RkOjptYWtl
X3VuaXF1ZTxDUFNDRkc+KG1fZ3JhcGgpOwogICAgIAogICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC02NDUxLDcg
KzYzMTgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIEFTU0VSVChi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gbV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICBBU1NFUlQoYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICB9Ci0KKyAgICAK
ICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5tX3Bh
cmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHLmgKaW5kZXggYTg1NjA0YThkNzhkYTk5MTZmMjQ2YTZkMzY5NmQ1ZGUwOGY3ZTZlNC4uZTll
ZDllODM5NTFjNWJlNTU4ZTE3YzdjYzhhNGQxN2NjYjYxMTY1OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGRy5oCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgot
I2luY2x1ZGUgPHd0Zi9TaW5nbGVSb290R3JhcGguaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCkBAIC00OSwxOSArNDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIE5vZGUgcm9vdCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0g
U1NBIHx8IG1fZ3JhcGgubV9pc0luU1NBQ29udmVyc2lvbik7Ci0gICAgICAgIHJldHVybiBtX2dy
YXBoLmJsb2NrKDApOwotICAgIH0KLQotICAgIExpc3Qgcm9vdHMoKQotICAgIHsKLSAgICAgICAg
TGlzdCByZXN1bHQ7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogcm9vdCA6IG1fZ3JhcGgubV9l
bnRyeXBvaW50cykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocm9vdCk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQorICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fZ3JhcGguYmxv
Y2soMCk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgTWFwPFQ+IG5ld01hcCgp
IHsgcmV0dXJuIEJsb2NrTWFwPFQ+KG1fZ3JhcGgpOyB9CkBAIC04NCwzMSArNzEsNiBAQCBwcml2
YXRlOgogICAgIEdyYXBoJiBtX2dyYXBoOwogfTsKIAotY2xhc3MgQ1BTQ0ZHIDogcHVibGljIFNp
bmdsZVJvb3RHcmFwaDxDRkc+IHsKLXB1YmxpYzoKLSAgICBDUFNDRkcoR3JhcGgmIGdyYXBoKQot
ICAgICAgICA6IFNpbmdsZVJvb3RHcmFwaDxDRkc+KCpncmFwaC5tX3NzYUNGRykKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSk7Ci0gICAgfQotfTsKLQot
dXNpbmcgU1NBQ0ZHID0gQ0ZHOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgQ1BTQ0ZHPjo6dmFsdWU+Ojp0
eXBlPgotQ1BTQ0ZHJiBzZWxlY3RDRkcoR3JhcGgmIGdyYXBoKQotewotICAgIFJFTEVBU0VfQVNT
RVJUKGdyYXBoLm1fY3BzQ0ZHKTsKLSAgICByZXR1cm4gKmdyYXBoLm1fY3BzQ0ZHOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8VCwgU1NBQ0ZHPjo6dmFsdWU+Ojp0eXBlPgotU1NBQ0ZHJiBzZWxlY3RDRkco
R3JhcGgmIGdyYXBoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKGdyYXBoLm1fc3NhQ0ZHKTsKLSAg
ICByZXR1cm4gKmdyYXBoLm1fc3NhQ0ZHOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IDYxYjkyMGU5NzQ4MDM2
ZGZjNDI2NzJmYTJlMDk3Yzk1ZmFmNDJiMGMuLmZiYzljMmRkOGUwNWNhZjY2Yzg2M2U0MTUwMzcz
MzIzNzZhYTAzNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcApAQCAtMzY5LDEzICszNjksOCBAQCBwcml2YXRlOgogICAg
ICAgICAvLyBCdXQgdGhvc2UgU2V0QXJndW1lbnRzIHVzZWQgZm9yIHRoZSBhY3R1YWwgYXJndW1l
bnRzIHRvIHRoZSBtYWNoaW5lIENvZGVCbG9jayBnZXQKICAgICAgICAgLy8gc3BlY2lhbC1jYXNl
ZC4gV2UgY291bGQgaGF2ZSBpbnN0ZWFkIHVzZWQgdHdvIGRpZmZlcmVudCBub2RlIHR5cGVzIC0g
b25lIGZvciB0aGUgYXJndW1lbnRzCiAgICAgICAgIC8vIGF0IHRoZSBwcm9sb2d1ZSBjYXNlLCBh
bmQgYW5vdGhlciBmb3IgdGhlIG90aGVyIHVzZXMuIEJ1dCB0aGlzIHNlZW1lZCBsaWtlIElSIG92
ZXJraWxsLgotCi0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fZ3JhcGgubV9lbnRyeXBvaW50
VG9Bcmd1bWVudHMpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGVudHJ5cG9pbnQgPSBwYWly
LmtleTsKLSAgICAgICAgICAgIGNvbnN0IEFyZ3VtZW50c1ZlY3RvciYgYXJndW1lbnRzID0gcGFp
ci52YWx1ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFyZ3VtZW50cy5zaXplKCk7
IGktLTspCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFyaWFibGVzQXRIZWFkLnNldEFy
Z3VtZW50Rmlyc3RUaW1lKGksIGFyZ3VtZW50c1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2FyZ3VtZW50cy5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRp
bWUoaSwgbV9ncmFwaC5tX2FyZ3VtZW50c1tpXSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
PE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAppbmRleCA1N2VjNGE4MGU0YjI5ZDJjYmQ0OTZlZWFjMzhkMWIyOTM5Yjg2MTcz
Li41OTY4OTc0NTI3YWU1ZTk0MzhhZGFiM2EzOGZiMDBmMzY1NmRkMWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcApAQCAtNTk4LDcgKzU5OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIAogICAg
ICAgICBtX2dyYXBoLmluaXRpYWxpemVOb2RlT3duZXJzKCk7Ci0gICAgICAgIG1fZ3JhcGguZW5z
dXJlU1NBRG9taW5hdG9ycygpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsK
ICAgICAgICAgCiAgICAgICAgIG1fcHJlT3JkZXIgPSBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIo
KTsKICAgICAgICAgCkBAIC02OTAsNyArNjkwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWVb
aV07Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX3NzYURvbWluYXRvcnMtPmRvbWluYXRlcyhj
YW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9k
b21pbmF0b3JzLT5kb21pbmF0ZXMoY2FuZGlkYXRlLT5vd25lciwgbV9ibG9jaykpIHsKICAgICAg
ICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC03NzksNyAr
Nzc5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgZG9taW5h
dGlvbiBiZWNhdXNlIHRoaXMgd291bGQgb25seSBzZWUgdGhpbmdzIGluIG91ciBvd24gYmxvY2sg
aWYKICAgICAgICAgICAgIC8vIHRoZXkgY2FtZSAqYWZ0ZXIqIG91ciBwb3NpdGlvbiBpbiB0aGUg
YmxvY2suIENsZWFybHksIHdoaWxlIG91ciBibG9jayBkb21pbmF0ZXMKICAgICAgICAgICAgIC8v
IGl0c2VsZiwgdGhlIHRoaW5ncyBpbiB0aGUgYmxvY2sgYWZ0ZXIgdXMgZG9uJ3QgZG9taW5hdGUg
dXMuCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX3NzYURvbWluYXRvcnMtPnN0cmljdGx5RG9t
aW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21p
bmF0b3JzLT5zdHJpY3RseURvbWluYXRlcyhibG9jaywgbV9ibG9jaykpIHsKICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBJ
dCBzdHJpY3RseSBkb21pbmF0ZXMuXG4iKTsKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgZGF0YS5kaWRWaXNpdCk7CkBAIC04NTYsNyArODU2LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zaXplKCk7
IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX3NzYURvbWluYXRvcnMtPmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21p
bmF0ZXMoY2FuZGlkYXRlLT5vd25lciwgbV9ibG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoY2FuZGlkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaC0+cmVwbGFjZVdpdGgoY2FuZGlkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRjaC5zZXROb2RlKGNhbmRpZGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCmluZGV4IDE2NmU2YWY0NWY0OTRlY2Y2YzZjM2IxYzJhYzJlODgyOGY2ZDJl
ZWMuLjlhNGJkMzgyMTc5YTk5YWE3MGQ4OTE4ZTdhOWIwN2I5NGYwOTA0N2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xMjcsNiArMTI3LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgQVNTRVJUKCFub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGdy
YXBoLm1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpKTsKICAgICB9CisgICAgICAgIAogICAg
IAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKQEAgLTE0
MCw3ICsxNDEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgUGhhbnRvbToK
ICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6Ci0gICAgY2Fz
ZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgog
ICAgICAgICByZXR1cm47CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oCmluZGV4IDI1YWFlNDcy
M2MxNWM1OTk2ZjYzNjUyMzdiYWUxNTNkNWViNGEzMzkuLmJhMzlmZjlkMGU1OGJjMTBkYjk5YTZm
ZWVjYzFlNjA2NTAxZGQ2MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgKQEAgLTM3LDcgKzM3LDcgQEAg
Y2xhc3MgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKEdyYXBoJiBn
cmFwaCkKLSAgICAgICAgOiBtX2RvbWluYXRvcnMoZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygp
KQorICAgICAgICA6IG1fZG9taW5hdG9ycyhncmFwaC5lbnN1cmVEb21pbmF0b3JzKCkpCiAgICAg
ICAgICwgbV9iYWNrd2FyZHNEb21pbmF0b3JzKGdyYXBoLmVuc3VyZUJhY2t3YXJkc0RvbWluYXRv
cnMoKSkKICAgICB7CiAgICAgfQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIFNTQURvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKKyAgICBEb21pbmF0b3Jz
JiBtX2RvbWluYXRvcnM7CiAgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgbV9iYWNrd2FyZHNEb21p
bmF0b3JzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
Q0VQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcApp
bmRleCBmZTU3MTE0ODMwOTBjMTU0NDkwYzg0MmI1NjVhMzFmNWFkMDg4ZWEwLi5hNzBhODY5OGQ0
OWUzMWM5ZTYzMmE5ZjY3NjE2NzA5NDljNjlmNjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcApAQCAtNTMsOCArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkKICAgICAg
ICAgICAgIGZpeHVwQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBh
cmd1bWVudHNWZWN0b3IgOiBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLnZhbHVlcygp
KQotICAgICAgICAgICAgY2xlYW5WYXJpYWJsZXMoYXJndW1lbnRzVmVjdG9yKTsKKyAgICAgICAg
Y2xlYW5WYXJpYWJsZXMobV9ncmFwaC5tX2FyZ3VtZW50cyk7CiAKICAgICAgICAgLy8gSnVzdCBk
byBhIGJhc2ljIFBoYW50b20vQ2hlY2sgY2xlYW4tdXAuCiAgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCmluZGV4IDA1ZmRl
ZDQ1ZTkzNTdkYmQyZWFlYzNlYTFiYTNjN2ExOGJlNTYxZTQuLjA2ZDFkYWNkMTA4MTVlZGE3NmI4
MWMzMmI5MGM0ZTkzNTQzMWFhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAKQEAgLTk1LDggKzk1LDggQEAgVmVjdG9yPERpc2Fzc2VtYmxlcjo6
RHVtcGVkT3A+IERpc2Fzc2VtYmxlcjo6Y3JlYXRlRHVtcExpc3QoTGlua0J1ZmZlciYgbGlua0J1
ZmYKICAgICBkdW1wSGVhZGVyKG91dCwgbGlua0J1ZmZlcik7CiAgICAgYXBwZW5kKHJlc3VsdCwg
b3V0LCBwcmV2aW91c09yaWdpbik7CiAgICAgCi0gICAgbV9ncmFwaC5lbnN1cmVDUFNEb21pbmF0
b3JzKCk7Ci0gICAgbV9ncmFwaC5lbnN1cmVDUFNOYXR1cmFsTG9vcHMoKTsKKyAgICBtX2dyYXBo
LmVuc3VyZURvbWluYXRvcnMoKTsKKyAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOwog
ICAgIAogICAgIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsKICAgICBjb25zdCBjaGFyKiBk
aXNhc3NlbWJseVByZWZpeCA9ICIgICAgICAgICI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAKaW5kZXggNmQ5ZDIyODA1MGJiZjUzOWVhY2FiOWU3MDBiODYyYTliMjkwZGU3
MC4uMDdkY2EwNDRiYzk0MzIwMzNkMWY1ZTQ0ZjllYmFjYmM3MDEyNWRiNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMTk5LDcgKzE5OSw2IEBAIGJvb2wgZG9l
c0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIExvYWRLZXlGcm9tTWFwQnVj
a2V0OgogICAgIGNhc2UgTG9hZFZhbHVlRnJvbU1hcEJ1Y2tldDoKICAgICBjYXNlIFVucmVhY2hh
YmxlOgotICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50
cnlMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgIGNhc2UgQ2hlY2tUaWVy
VXBBdFJldHVybjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9t
aW5hdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKaW5k
ZXggNmFiOGRlYjI0OGQ0NGZmYmI1Mzc5NmFmYjE4OGYzMDE2MDYyMzk4Mi4uNjhiMmQ3NWRjNmYz
OTRiODYyZGZjOTc3ODIzMDVkNjFlMWUyZjQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb21pbmF0b3JzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMzIgKzM1LDE2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIENGR0tpbmQ+Ci1j
bGFzcyBEb21pbmF0b3JzIDogcHVibGljIFdURjo6RG9taW5hdG9yczxDRkdLaW5kPiB7CitjbGFz
cyBEb21pbmF0b3JzIDogcHVibGljIFdURjo6RG9taW5hdG9yczxDRkc+IHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEb21pbmF0b3JzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBEb21pbmF0b3JzKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBXVEY6OkRv
bWluYXRvcnM8Q0ZHS2luZD4oc2VsZWN0Q0ZHPENGR0tpbmQ+KGdyYXBoKSkKKyAgICAgICAgOiBX
VEY6OkRvbWluYXRvcnM8Q0ZHPigqZ3JhcGgubV9jZmcpCiAgICAgewogICAgIH0KIH07CiAKLXVz
aW5nIFNTQURvbWluYXRvcnMgPSBEb21pbmF0b3JzPFNTQUNGRz47Ci11c2luZyBDUFNEb21pbmF0
b3JzID0gRG9taW5hdG9yczxDUFNDRkc+OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgQ1BTQ0ZHPjo6dmFs
dWU+Ojp0eXBlPgotQ1BTRG9taW5hdG9ycyYgZW5zdXJlRG9taW5hdG9yc0ZvckNGRyhHcmFwaCYg
Z3JhcGgpCi17Ci0gICAgcmV0dXJuIGdyYXBoLmVuc3VyZUNQU0RvbWluYXRvcnMoKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFQsIFNTQUNGRz46OnZhbHVlPjo6dHlwZT4KLVNTQURvbWluYXRvcnMmIGVu
c3VyZURvbWluYXRvcnNGb3JDRkcoR3JhcGgmIGdyYXBoKQotewotICAgIHJldHVybiBncmFwaC5l
bnN1cmVTU0FEb21pbmF0b3JzKCk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlRG9taW5hdGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2VEb21pbmF0ZXMuaAppbmRleCA4NWYwMzdkN2ZiMjk1MDFmY2MzYzBlYmFmMDBmNGI3MmI0
OTZiNmQ2Li5hYTUwZWRlYzJiMDUxMWI1Y2QzYzZiMmRkOTExYWY1MzhjZjlmOTUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaApAQCAtNDAsMTIgKzQw
LDExIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQogICAgICAgICAsIG1fcmVz
dWx0KHRydWUpCiAgICAgewotICAgICAgICBBU1NFUlQoZ3JhcGgubV9mb3JtID09IFNTQSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgb3BlcmF0b3IoKShOb2RlKiwgRWRnZSBlZGdlKQogICAgIHsK
LSAgICAgICAgYm9vbCByZXN1bHQgPSBtX2dyYXBoLm1fc3NhRG9taW5hdG9ycy0+ZG9taW5hdGVz
KGVkZ2Uubm9kZSgpLT5vd25lciwgbV9ibG9jayk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9n
cmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhlZGdlLm5vZGUoKS0+b3duZXIsIG1fYmxvY2sp
OwogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAg
ICAgICAgICAiQ2hlY2tpbmcgaWYgIiwgZWRnZSwgIiBpbiAiLCAqZWRnZS5ub2RlKCktPm93bmVy
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggNjE1
OTk5YzE3NzQyMjY5N2E3YzIzYWEzYjA5M2MyMDQ4NzZhZDUxNy4uZGFmMGJkMmM5MzAwZWE3OGVh
ZGVkMWRjMTk3NjAwNjRmYzQyMjRhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCkBAIC0yMDA4LDcgKzIwMDgsNiBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENoZWNrVHJhcHM6CiAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIGNhc2Ug
RXh0cmFjdE9TUkVudHJ5TG9jYWw6Ci0gICAgICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAg
ICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OgpAQCAtMzIwNCw3ICszMjAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGluZGV4Rm9yQ2hlY2tzICE9IFVJTlRfTUFYKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlZGdlLT5pc051bWJlckNvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY0J5dGVjb2RlRG91Ymxl
LCBEb3VibGVDb25zdGFudCwgb3JpZ2luRm9yQ2hlY2tzLApAQCAtMzIzNSw3ICszMjMzLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNJbnQ1MlJlc3Vs
dCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXhGb3JDaGVja3MgIT0gVUlOVF9NQVgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmlzQW55SW50Q29uc3RhbnQoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tz
LCBTcGVjQW55SW50LCBJbnQ1MkNvbnN0YW50LCBvcmlnaW5Gb3JDaGVja3MsCkBAIC0zMjYyLDcg
KzMyNTksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlLT5o
YXNEb3VibGVSZXN1bHQoKSAmJiAhZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGluZGV4Rm9yQ2hlY2tzICE9IFVJTlRfTUFYKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUsIFZhbHVlUmVwLCBvcmlnaW5Gb3JDaGVja3MsCkBAIC0zMzA0LDcgKzMzMDAsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXhGb3JDaGVj
a3MgIT0gVUlOVF9NQVgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywg
U3BlY05vbmUsIENoZWNrLCBvcmlnaW5Gb3JDaGVja3MsIGVkZ2UpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKaW5kZXggMTY2NzNlYTM1MDgxYjk3YjFmNGQy
ZjY3MjhhZTMzOGE3YzhjNDRlMi4uZjcwODRmYjRkNDBmZTRkMjIzOGM3MzA4ZDg2ZWJkMTc4NDVm
ZDg2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1h
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaApAQCAt
MzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWVudW0g
Rmx1c2hGb3JtYXQgOiB1aW50OF90IHsKK2VudW0gRmx1c2hGb3JtYXQgewogICAgIERlYWRGbHVz
aCwKICAgICBGbHVzaGVkSW50MzIsCiAgICAgRmx1c2hlZEludDUyLApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCAxZDQ4ZjhjYjBlYWE1ODc2NGRlMzQ1YjBjNDZkZTgy
OGJjNzJkODVjLi44ODg4YWZkYWM0MGI5ZjIyZTMwMmU0ZThiZDc3MzVlNDFkMDJkNDlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2lu
Y2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAi
REZHTmF0dXJhbExvb3BzLmgiCisjaW5jbHVkZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgogI2lu
Y2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKQEAgLTcy
LDcgKzczLDcgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbikKICAgICAsIG1fcGxh
bihwbGFuKQogICAgICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jaykKICAgICAsIG1fcHJv
ZmlsZWRCbG9jayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKLSAgICAsIG1fc3NhQ0ZHKHN0
ZDo6bWFrZV91bmlxdWU8U1NBQ0ZHPigqdGhpcykpCisgICAgLCBtX2NmZyhzdGQ6Om1ha2VfdW5p
cXVlPENGRz4oKnRoaXMpKQogICAgICwgbV9uZXh0TWFjaGluZUxvY2FsKDApCiAgICAgLCBtX2Zp
eHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX3N0cnVjdHVyZVJlZ2lzdHJhdGlv
blN0YXRlKEhhdmVOb3RTdGFydGVkUmVnaXN0ZXJpbmcpCkBAIC00MDgsMTMgKzQwOSw5IEBAIGJv
b2wgR3JhcGg6OnRlcm1pbmFsc0FyZVZhbGlkKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIEJhc2ljQmxvY2sqIHVuYm94TG9vcE5vZGUoY29uc3QgQ1BTQ0ZHOjpOb2RlJiBub2RlKSB7
IHJldHVybiBub2RlLm5vZGUoKTsgfQotc3RhdGljIEJhc2ljQmxvY2sqIHVuYm94TG9vcE5vZGUo
QmFzaWNCbG9jayogYmxvY2spIHsgcmV0dXJuIGJsb2NrOyB9Ci0KIHZvaWQgR3JhcGg6OmR1bXBC
bG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJhc2ljQmxv
Y2sqIGJsb2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlLCBEdW1wQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIiwgKmJsb2NrLCAiICgi
LCBpbkNvbnRleHQoYmxvY2stPmF0KDApLT5vcmlnaW4uc2VtYW50aWMsIGNvbnRleHQpLCAiKToi
LAotICAgICAgICBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2st
PmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsIGJsb2NrLT5pc0NhdGNoRW50cnlw
b2ludCA/ICIgKENhdGNoIEVudHJ5cG9pbnQpIiA6ICIiLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
cHJlZml4LCAiQmxvY2sgIiwgKmJsb2NrLCAiICgiLCBpbkNvbnRleHQoYmxvY2stPmF0KDApLT5v
cmlnaW4uc2VtYW50aWMsIGNvbnRleHQpLCAiKToiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6
ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIs
ICJcbiIpOwogICAgIGlmIChibG9jay0+ZXhlY3V0aW9uQ291bnQgPT0gYmxvY2stPmV4ZWN1dGlv
bkNvdW50KQogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBFeGVjdXRpb24gY291bnQ6ICIs
IGJsb2NrLT5leGVjdXRpb25Db3VudCwgIlxuIik7CiAgICAgb3V0LnByaW50KHByZWZpeCwgIiAg
UHJlZGVjZXNzb3JzOiIpOwpAQCAtNDI1LDI2ICs0MjIsMTggQEAgdm9pZCBHcmFwaDo6ZHVtcEJs
b2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9j
ayogYmwKICAgICBpZiAoYmxvY2stPnRlcm1pbmFsKCkpIHsKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICBvdXQu
cHJpbnQoIiAiLCAqc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIGlmIChtX3ByZVBvc3ROdW1iZXJp
bmcpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIG1fcHJlUG9zdE51bWJlcmluZy0+
ZWRnZUtpbmQoYmxvY2ssIHN1Y2Nlc3NvciksICIpIik7CiAgICAgICAgIH0KICAgICB9IGVsc2UK
ICAgICAgICAgb3V0LnByaW50KCIgPGludmFsaWQ+Iik7CiAgICAgb3V0LnByaW50KCJcbiIpOwot
Ci0gICAgYXV0byBwcmludERvbWluYXRvcnMgPSBbJl0gKGF1dG8mIGRvbWluYXRvcnMpIHsKLSAg
ICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAiLCBkb21pbmF0b3JzLmRv
bWluYXRvcnNPZihibG9jayksICJcbiIpOwotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBE
b21pbmF0ZXM6ICIsIGRvbWluYXRvcnMuYmxvY2tzRG9taW5hdGVkQnkoYmxvY2spLCAiXG4iKTsK
LSAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hbmNlIEZyb250aWVyOiAiLCBkb21p
bmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxvY2spLCAiXG4iKTsKLSAgICAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5hbmNlIEZyb250aWVyOiAiLAotICAgICAgICAg
ICAgZG9taW5hdG9ycy5pdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YodHlwZW5hbWUgc3RkOjpy
ZW1vdmVfcmVmZXJlbmNlPGRlY2x0eXBlKGRvbWluYXRvcnMpPjo6dHlwZTo6TGlzdCB7IGJsb2Nr
IH0pLCAiXG4iKTsKLSAgICB9OwotCi0gICAgaWYgKHRlcm1pbmFsc0FyZVZhbGlkKCkpIHsKLSAg
ICAgICAgaWYgKG1fc3NhRG9taW5hdG9ycykKLSAgICAgICAgICAgIHByaW50RG9taW5hdG9ycygq
bV9zc2FEb21pbmF0b3JzKTsKLSAgICAgICAgZWxzZSBpZiAobV9jcHNEb21pbmF0b3JzKQotICAg
ICAgICAgICAgcHJpbnREb21pbmF0b3JzKCptX2Nwc0RvbWluYXRvcnMpOworICAgIGlmIChtX2Rv
bWluYXRvcnMgJiYgdGVybWluYWxzQXJlVmFsaWQoKSkgeworICAgICAgICBvdXQucHJpbnQocHJl
Zml4LCAiICBEb21pbmF0ZWQgYnk6ICIsIG1fZG9taW5hdG9ycy0+ZG9taW5hdG9yc09mKGJsb2Nr
KSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9k
b21pbmF0b3JzLT5ibG9ja3NEb21pbmF0ZWRCeShibG9jayksICJcbiIpOworICAgICAgICBvdXQu
cHJpbnQocHJlZml4LCAiICBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+ZG9t
aW5hbmNlRnJvbnRpZXJPZihibG9jayksICJcbiIpOworICAgICAgICBvdXQucHJpbnQocHJlZml4
LCAiICBJdGVyYXRlZCBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+aXRlcmF0
ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9
Ci0KICAgICBpZiAobV9iYWNrd2FyZHNEb21pbmF0b3JzICYmIHRlcm1pbmFsc0FyZVZhbGlkKCkp
IHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQmFja3dhcmRzIGRvbWluYXRlcyBieTog
IiwgbV9iYWNrd2FyZHNEb21pbmF0b3JzLT5kb21pbmF0b3JzT2YoYmxvY2spLCAiXG4iKTsKICAg
ICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQmFja3dhcmRzIGRvbWluYXRlczogIiwgbV9iYWNr
d2FyZHNEb21pbmF0b3JzLT5ibG9ja3NEb21pbmF0ZWRCeShibG9jayksICJcbiIpOwpAQCAtNDU3
LDMzICs0NDYsMjkgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayogYmwKICAgICAgICAgfQogICAgICAg
ICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQotCi0gICAgYXV0byBwcmludE5hdHVyYWxMb29wcyA9
IFsmXSAoYXV0byYgbmF0dXJhbExvb3BzKSB7Ci0gICAgICAgIGlmIChjb25zdCBhdXRvKiBsb29w
ID0gbmF0dXJhbExvb3BzLT5oZWFkZXJPZihibG9jaykpIHsKKyAgICBpZiAobV9wcmVQb3N0TnVt
YmVyaW5nKQorICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQcmUvUG9zdCBOdW1iZXJpbmc6
ICIsIG1fcHJlUG9zdE51bWJlcmluZy0+cHJlTnVtYmVyKGJsb2NrKSwgIi8iLCBtX3ByZVBvc3RO
dW1iZXJpbmctPnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKKyAgICBpZiAobV9uYXR1cmFsTG9v
cHMpIHsKKyAgICAgICAgaWYgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9uYXR1cmFsTG9v
cHMtPmhlYWRlck9mKGJsb2NrKSkgewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAg
TG9vcCBoZWFkZXIsIGNvbnRhaW5zOiIpOwogICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+
IHNvcnRlZEJsb2NrTGlzdDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
b29wLT5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBzb3J0ZWRCbG9ja0xpc3QuYXBwZW5k
KHVuYm94TG9vcE5vZGUobG9vcC0+YXQoaSkpLT5pbmRleCk7CisgICAgICAgICAgICAgICAgc29y
dGVkQmxvY2tMaXN0LmFwcGVuZChsb29wLT5hdChpKS0+aW5kZXgpOwogICAgICAgICAgICAgc3Rk
Ojpzb3J0KHNvcnRlZEJsb2NrTGlzdC5iZWdpbigpLCBzb3J0ZWRCbG9ja0xpc3QuZW5kKCkpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvcnRlZEJsb2NrTGlzdC5zaXpl
KCk7ICsraSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgc29ydGVkQmxvY2tMaXN0
W2ldKTsKICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgYXV0byBjb250YWluaW5nTG9vcHMgPSBuYXR1cmFsTG9vcHMtPmxvb3BzT2YoYmxv
Y2spOworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBjb250YWluaW5nTG9vcHMg
PQorICAgICAgICAgICAgbV9uYXR1cmFsTG9vcHMtPmxvb3BzT2YoYmxvY2spOwogICAgICAgICBp
ZiAoIWNvbnRhaW5pbmdMb29wcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG91dC5wcmludChw
cmVmaXgsICIgIENvbnRhaW5pbmcgbG9vcCBoZWFkZXJzOiIpOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvbnRhaW5pbmdMb29wcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiAiLCAqdW5ib3hMb29wTm9kZShjb250YWluaW5nTG9vcHNbaV0t
PmhlYWRlcigpKSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIiwgKmNvbnRhaW5pbmdM
b29wc1tpXS0+aGVhZGVyKCkpOwogICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIGlmIChtX3NzYU5hdHVyYWxMb29wcykKLSAgICAgICAgcHJpbnRO
YXR1cmFsTG9vcHMobV9zc2FOYXR1cmFsTG9vcHMpOwotICAgIGVsc2UgaWYgKG1fY3BzTmF0dXJh
bExvb3BzKQotICAgICAgICBwcmludE5hdHVyYWxMb29wcyhtX2Nwc05hdHVyYWxMb29wcyk7Ci0K
KyAgICB9CiAgICAgaWYgKCFibG9jay0+cGhpcy5pc0VtcHR5KCkpIHsKICAgICAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CkBAIC01MTcsMTAgKzUwMiw4IEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpCiAgICAg
b3V0LnByaW50KCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06
ICIsIG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwg
IjsgUmVmIGNvdW50IHN0YXRlOiAiLCBtX3JlZkNvdW50U3RhdGUsICJcbiIpOwogICAgIGlmICht
X2Zvcm0gPT0gU1NBKQogICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnQgZm9ybWF0czogIiwg
bGlzdER1bXAobV9hcmd1bWVudEZvcm1hdHMpLCAiXG4iKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
Zm9yIChhdXRvIHBhaXIgOiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50cykKLSAgICAgICAgICAgIG91
dC5wcmludCgiICBBcmd1bWVudHMgZm9yIGJsb2NrIyIsIHBhaXIua2V5LT5pbmRleCwgIjogIiwg
bGlzdER1bXAocGFpci52YWx1ZSksICJcbiIpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIG91
dC5wcmludCgiICBBcmd1bWVudHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRzKSwgIlxuIik7CiAg
ICAgb3V0LnByaW50KCJcbiIpOwogICAgIAogICAgIE5vZGUqIGxhc3ROb2RlID0gbnVsbHB0cjsK
QEAgLTY1NywxMCArNjQwLDggQEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxC
YXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayogYmxvY2sKIHZvaWQgR3JhcGg6
OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCiB7CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4g
d29ya2xpc3Q7Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9lbnRyeXBvaW50
cykgewotICAgICAgICBlbnRyeXBvaW50LT5pc1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgICAgIHdv
cmtsaXN0LmFwcGVuZChlbnRyeXBvaW50KTsKLSAgICB9CisgICAgd29ya2xpc3QuYXBwZW5kKGJs
b2NrKDApKTsKKyAgICBibG9jaygwKS0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgIHdoaWxlICgh
d29ya2xpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xp
c3QudGFrZUxhc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nl
c3NvcnMoKTsgaS0tOykKQEAgLTgxNywxMCArNzk4LDkgQEAgdm9pZCBHcmFwaDo6a2lsbFVucmVh
Y2hhYmxlQmxvY2tzKCkKIAogdm9pZCBHcmFwaDo6aW52YWxpZGF0ZUNGRygpCiB7Ci0gICAgbV9j
cHNEb21pbmF0b3JzID0gbnVsbHB0cjsKLSAgICBtX3NzYURvbWluYXRvcnMgPSBudWxscHRyOwot
ICAgIG1fY3BzTmF0dXJhbExvb3BzID0gbnVsbHB0cjsKLSAgICBtX3NzYU5hdHVyYWxMb29wcyA9
IG51bGxwdHI7CisgICAgbV9kb21pbmF0b3JzID0gbnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29w
cyA9IG51bGxwdHI7CisgICAgbV9wcmVQb3N0TnVtYmVyaW5nID0gbnVsbHB0cjsKICAgICBtX2Nv
bnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gbnVsbHB0cjsKICAgICBtX2JhY2t3YXJkc0RvbWlu
YXRvcnMgPSBudWxscHRyOwogICAgIG1fYmFja3dhcmRzQ0ZHID0gbnVsbHB0cjsKQEAgLTg3MCwz
NyArODUwLDEyIEBAIEJsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5QcmVPcmRlcigpCiB7CiAgICAg
QmxvY2tMaXN0IHJlc3VsdDsKICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OwotICAgIGZvciAo
QmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZW50cnlwb2ludHMpCi0gICAgICAgIHdvcmtsaXN0
LnB1c2goZW50cnlwb2ludCk7CisgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7CiAgICAgd2hp
bGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKICAgICAgICAgcmVzdWx0
LmFwcGVuZChibG9jayk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCk7IGktLTspCiAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrLT5zdWNjZXNz
b3IoaSkpOwogICAgIH0KLQotICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAg
IC8vIFdoZW4gaXRlcmF0aW5nIG92ZXIgcHJlIG9yZGVyLCB3ZSBzaG91bGQgc2VlIGRvbWluYXRv
cnMKLSAgICAgICAgLy8gYmVmb3JlIHRoaW5ncyB0aGV5IGRvbWluYXRlLgotICAgICAgICBhdXRv
IHZhbGlkYXRlUmVzdWx0cyA9IFsmXSAoYXV0byYgZG9taW5hdG9ycykgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGEgPSByZXN1bHRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFh
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGIgPSByZXN1bHRbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
YiB8fCBhID09IGIpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGRvbWluYXRvcnMuZG9taW5hdGVzKGEsIGIpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA8IGopOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBpZiAobV9mb3JtID09IFNTQSB8fCBt
X2lzSW5TU0FDb252ZXJzaW9uKQotICAgICAgICAgICAgdmFsaWRhdGVSZXN1bHRzKGVuc3VyZVNT
QURvbWluYXRvcnMoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkYXRlUmVzdWx0
cyhlbnN1cmVDUFNEb21pbmF0b3JzKCkpOwotICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC05MDgsOCArODYzLDcgQEAgQmxvY2tMaXN0IEdyYXBoOjpibG9ja3NJblBvc3RPcmRlcigp
CiB7CiAgICAgQmxvY2tMaXN0IHJlc3VsdDsKICAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdv
cmtsaXN0OwotICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZW50cnlwb2ludHMp
Ci0gICAgICAgIHdvcmtsaXN0LnB1c2goZW50cnlwb2ludCk7CisgICAgd29ya2xpc3QucHVzaChi
bG9jaygwKSk7CiAgICAgd2hpbGUgKEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3Ao
KSkgewogICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKICAgICAgICAgY2FzZSBWaXNpdE9y
ZGVyOjpQcmU6CkBAIC05MjIsMzEgKzg3Niw2IEBAIEJsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5Q
b3N0T3JkZXIoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBp
ZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBhdXRvIHZhbGlkYXRlUmVzdWx0cyA9
IFsmXSAoYXV0byYgZG9taW5hdG9ycykgewotICAgICAgICAgICAgLy8gV2hlbiBpdGVyYXRpbmcg
b3ZlciByZXZlcnNlIHBvc3Qgb3JkZXIsIHdlIHNob3VsZCBzZWUgZG9taW5hdG9ycwotICAgICAg
ICAgICAgLy8gYmVmb3JlIHRoaW5ncyB0aGV5IGRvbWluYXRlLgotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGEgPSByZXN1bHRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFhKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgcmVzdWx0LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGIgPSByZXN1bHRbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYiB8fCBh
ID09IGIpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGRvbWluYXRvcnMuZG9taW5hdGVzKGEsIGIpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaSA+IGopOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBpZiAobV9mb3JtID09IFNTQSB8fCBtX2lzSW5T
U0FDb252ZXJzaW9uKQotICAgICAgICAgICAgdmFsaWRhdGVSZXN1bHRzKGVuc3VyZVNTQURvbWlu
YXRvcnMoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkYXRlUmVzdWx0cyhlbnN1
cmVDUFNEb21pbmF0b3JzKCkpOwotICAgIH0KLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTE1NDMsNDQgKzE0NzIsMzAgQEAgdm9pZCBHcmFwaDo6bG9nQXNzZXJ0aW9uRmFpbHVyZSgKICAg
ICBsb2dERkdBc3NlcnRpb25GYWlsdXJlKCp0aGlzLCB0b0NTdHJpbmcoIldoaWxlIGhhbmRsaW5n
IGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuXG4iKSwgZmlsZSwgbGluZSwgZnVuY3Rp
b24sIGFzc2VydGlvbik7CiB9CiAKLUNQU0RvbWluYXRvcnMmIEdyYXBoOjplbnN1cmVDUFNEb21p
bmF0b3JzKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2Zvcm0gIT0gU1NBICYmICFtX2lzSW5T
U0FDb252ZXJzaW9uKTsKLSAgICBpZiAoIW1fY3BzRG9taW5hdG9ycykKLSAgICAgICAgbV9jcHNE
b21pbmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxDUFNEb21pbmF0b3JzPigqdGhpcyk7Ci0gICAg
cmV0dXJuICptX2Nwc0RvbWluYXRvcnM7Ci19Ci0KLVNTQURvbWluYXRvcnMmIEdyYXBoOjplbnN1
cmVTU0FEb21pbmF0b3JzKCkKK0RvbWluYXRvcnMmIEdyYXBoOjplbnN1cmVEb21pbmF0b3JzKCkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2Zvcm0gPT0gU1NBIHx8IG1faXNJblNTQUNvbnZlcnNp
b24pOwotICAgIGlmICghbV9zc2FEb21pbmF0b3JzKQotICAgICAgICBtX3NzYURvbWluYXRvcnMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNTQURvbWluYXRvcnM+KCp0aGlzKTsKLSAgICByZXR1cm4gKm1f
c3NhRG9taW5hdG9yczsKKyAgICBpZiAoIW1fZG9taW5hdG9ycykKKyAgICAgICAgbV9kb21pbmF0
b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxEb21pbmF0b3JzPigqdGhpcyk7CisgICAgcmV0dXJuICpt
X2RvbWluYXRvcnM7CiB9CiAKLUNQU05hdHVyYWxMb29wcyYgR3JhcGg6OmVuc3VyZUNQU05hdHVy
YWxMb29wcygpCitQcmVQb3N0TnVtYmVyaW5nJiBHcmFwaDo6ZW5zdXJlUHJlUG9zdE51bWJlcmlu
ZygpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtICE9IFNTQSAmJiAhbV9pc0luU1NBQ29u
dmVyc2lvbik7Ci0gICAgZW5zdXJlQ1BTRG9taW5hdG9ycygpOwotICAgIGlmICghbV9jcHNOYXR1
cmFsTG9vcHMpCi0gICAgICAgIG1fY3BzTmF0dXJhbExvb3BzID0gc3RkOjptYWtlX3VuaXF1ZTxD
UFNOYXR1cmFsTG9vcHM+KCp0aGlzKTsKLSAgICByZXR1cm4gKm1fY3BzTmF0dXJhbExvb3BzOwor
ICAgIGlmICghbV9wcmVQb3N0TnVtYmVyaW5nKQorICAgICAgICBtX3ByZVBvc3ROdW1iZXJpbmcg
PSBzdGQ6Om1ha2VfdW5pcXVlPFByZVBvc3ROdW1iZXJpbmc+KCp0aGlzKTsKKyAgICByZXR1cm4g
Km1fcHJlUG9zdE51bWJlcmluZzsKIH0KIAotU1NBTmF0dXJhbExvb3BzJiBHcmFwaDo6ZW5zdXJl
U1NBTmF0dXJhbExvb3BzKCkKK05hdHVyYWxMb29wcyYgR3JhcGg6OmVuc3VyZU5hdHVyYWxMb29w
cygpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtID09IFNTQSk7Ci0gICAgZW5zdXJlU1NB
RG9taW5hdG9ycygpOwotICAgIGlmICghbV9zc2FOYXR1cmFsTG9vcHMpCi0gICAgICAgIG1fc3Nh
TmF0dXJhbExvb3BzID0gc3RkOjptYWtlX3VuaXF1ZTxTU0FOYXR1cmFsTG9vcHM+KCp0aGlzKTsK
LSAgICByZXR1cm4gKm1fc3NhTmF0dXJhbExvb3BzOworICAgIGVuc3VyZURvbWluYXRvcnMoKTsK
KyAgICBpZiAoIW1fbmF0dXJhbExvb3BzKQorICAgICAgICBtX25hdHVyYWxMb29wcyA9IHN0ZDo6
bWFrZV91bmlxdWU8TmF0dXJhbExvb3BzPigqdGhpcyk7CisgICAgcmV0dXJuICptX25hdHVyYWxM
b29wczsKIH0KIAogQmFja3dhcmRzQ0ZHJiBHcmFwaDo6ZW5zdXJlQmFja3dhcmRzQ0ZHKCkKIHsK
LSAgICAvLyBXZSBjb3VsZCBlYXNpbHkgcmVsYXggdGhpcyBpbiB0aGUgZnV0dXJlIHRvIHdvcmsg
b3ZlciBDUFMsIGJ1dCB0b2RheSwgaXQncyBvbmx5IHVzZWQgaW4gU1NBLgotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZm9ybSA9PSBTU0EpOyAKICAgICBpZiAoIW1fYmFja3dhcmRzQ0ZHKQogICAgICAg
ICBtX2JhY2t3YXJkc0NGRyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dhcmRzQ0ZHPigqdGhpcyk7
CiAgICAgcmV0dXJuICptX2JhY2t3YXJkc0NGRzsKQEAgLTE1ODgsNyArMTUwMyw2IEBAIEJhY2t3
YXJkc0NGRyYgR3JhcGg6OmVuc3VyZUJhY2t3YXJkc0NGRygpCiAKIEJhY2t3YXJkc0RvbWluYXRv
cnMmIEdyYXBoOjplbnN1cmVCYWNrd2FyZHNEb21pbmF0b3JzKCkKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChtX2Zvcm0gPT0gU1NBKTsKICAgICBpZiAoIW1fYmFja3dhcmRzRG9taW5hdG9ycykKICAg
ICAgICAgbV9iYWNrd2FyZHNEb21pbmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxCYWNrd2FyZHNE
b21pbmF0b3JzPigqdGhpcyk7CiAgICAgcmV0dXJuICptX2JhY2t3YXJkc0RvbWluYXRvcnM7CkBA
IC0xNTk2LDcgKzE1MTAsNiBAQCBCYWNrd2FyZHNEb21pbmF0b3JzJiBHcmFwaDo6ZW5zdXJlQmFj
a3dhcmRzRG9taW5hdG9ycygpCiAKIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBHcmFwaDo6
ZW5zdXJlQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKQogewotICAgIFJFTEVBU0VfQVNTRVJU
KG1fZm9ybSA9PSBTU0EpOwogICAgIGlmICghbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcykK
ICAgICAgICAgbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM+KCp0aGlzKTsKICAgICByZXR1cm4gKm1fY29udHJv
bEVxdWl2YWxlbmNlQW5hbHlzaXM7CkBAIC0xNjE0LDkgKzE1MjcsNyBAQCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5v
ZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1
bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
ICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwot
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50
IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9lbnRyeXBvaW50VG9Bcmd1bWVu
dHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSogYXJndW1lbnROb2RlID0gbV9hcmd1bWVudHNbYXJndW1lbnRdOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWFyZ3VtZW50Tm9kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkgIT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKQEAgLTE3ODcsMTMg
KzE2OTgsNiBAQCBib29sIEdyYXBoOjpjYW5Eb0Zhc3RTcHJlYWQoTm9kZSogbm9kZSwgY29uc3Qg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJuIGFsbEdvb2Q7CiB9CiAKLXZvaWQgR3Jh
cGg6OmNsZWFyQ1BTQ0ZHRGF0YSgpCi17Ci0gICAgbV9jcHNOYXR1cmFsTG9vcHMgPSBudWxscHRy
OwotICAgIG1fY3BzRG9taW5hdG9ycyA9IG51bGxwdHI7Ci0gICAgbV9jcHNDRkcgPSBudWxscHRy
OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCAzMzRlYTk3ZmU1ZWJi
NzczZDNlZGU3MDM2ODllYjA3MWI4YzE2ZmIxLi42NmNhNTExNTM5YWU3N2NhZTkzZmY5NzdiNTFm
MTZjMGYxOWYwMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC00NSwx
MCArNDUsNiBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKLW5hbWVzcGFjZSBXVEYgewotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IFNpbmdsZVJvb3RHcmFwaDsKLX0KLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9j
azsKQEAgLTU5LDIwICs1NSwxMyBAQCBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEJhY2t3YXJkc0NG
RzsKIGNsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBjbGFzcyBDRkc7Ci1jbGFzcyBDUFNDRkc7
CiBjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBjbGFzcyBEb21pbmF0b3JzOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIE5hdHVyYWxM
b29wczsKK2NsYXNzIERvbWluYXRvcnM7CiBjbGFzcyBGbG93SW5kZXhpbmc7Ci10ZW1wbGF0ZTx0
eXBlbmFtZT4gY2xhc3MgRmxvd01hcDsKK2NsYXNzIE5hdHVyYWxMb29wczsKK2NsYXNzIFByZVBv
c3ROdW1iZXJpbmc7CiAKLXVzaW5nIEFyZ3VtZW50c1ZlY3RvciA9IFZlY3RvcjxOb2RlKiwgOD47
Ci0KLXVzaW5nIFNTQUNGRyA9IENGRzsKLXVzaW5nIENQU0RvbWluYXRvcnMgPSBEb21pbmF0b3Jz
PENQU0NGRz47Ci11c2luZyBTU0FEb21pbmF0b3JzID0gRG9taW5hdG9yczxTU0FDRkc+OwotdXNp
bmcgQ1BTTmF0dXJhbExvb3BzID0gTmF0dXJhbExvb3BzPENQU0NGRz47Ci11c2luZyBTU0FOYXR1
cmFsTG9vcHMgPSBOYXR1cmFsTG9vcHM8U1NBQ0ZHPjsKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFz
cyBGbG93TWFwOwogCiAjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2Rl
LCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCiAgICAgICAgIE5vZGUqIF9ub2RlID0gKG5v
ZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC05MTIs
NDkgKzkwMSwyNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRGVidWdnZXJFbmFibGVkOyB9CiAKLSAgICBDUFNEb21pbmF0b3Jz
JiBlbnN1cmVDUFNEb21pbmF0b3JzKCk7Ci0gICAgU1NBRG9taW5hdG9ycyYgZW5zdXJlU1NBRG9t
aW5hdG9ycygpOwotICAgIENQU05hdHVyYWxMb29wcyYgZW5zdXJlQ1BTTmF0dXJhbExvb3BzKCk7
Ci0gICAgU1NBTmF0dXJhbExvb3BzJiBlbnN1cmVTU0FOYXR1cmFsTG9vcHMoKTsKKyAgICBEb21p
bmF0b3JzJiBlbnN1cmVEb21pbmF0b3JzKCk7CisgICAgUHJlUG9zdE51bWJlcmluZyYgZW5zdXJl
UHJlUG9zdE51bWJlcmluZygpOworICAgIE5hdHVyYWxMb29wcyYgZW5zdXJlTmF0dXJhbExvb3Bz
KCk7CiAgICAgQmFja3dhcmRzQ0ZHJiBlbnN1cmVCYWNrd2FyZHNDRkcoKTsKICAgICBCYWNrd2Fy
ZHNEb21pbmF0b3JzJiBlbnN1cmVCYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAgICAgQ29udHJvbEVx
dWl2YWxlbmNlQW5hbHlzaXMmIGVuc3VyZUNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7CiAK
LSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgb25seSBtYWtlcyBzZW5zZSB0byBjYWxsIGFmdGVyIGJ5
dGVjb2RlIHBhcnNpbmcKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgdG8g
Y2FsbCBhZnRlciBieXRlY29kZSBwYXJzaW5nCiAgICAgLy8gYmVjYXVzZSBpdCBxdWVyaWVzIHRo
ZSBtX2hhc0V4Y2VwdGlvbkhhbmRsZXJzIGJvb2xlYW4gd2hvc2UgdmFsdWUKICAgICAvLyBpcyBv
bmx5IGZ1bGx5IGRldGVybWluZWQgYWZ0ZXIgYnl0Y29kZSBwYXJzaW5nLgotICAgIGJvb2wgd2ls
bENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotICAg
IHsKLSAgICAgICAgQ29kZU9yaWdpbiBpZ25vcmVkOwotICAgICAgICBIYW5kbGVySW5mbyogaWdu
b3JlZDI7Ci0gICAgICAgIHJldHVybiB3aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShj
b2RlT3JpZ2luLCBpZ25vcmVkLCBpZ25vcmVkMik7Ci0gICAgfQogICAgIGJvb2wgd2lsbENhdGNo
RXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUoQ29kZU9yaWdpbiwgQ29kZU9yaWdpbiYgb3BDYXRjaE9y
aWdpbk91dCwgSGFuZGxlckluZm8qJiBjYXRjaEhhbmRsZXJPdXQpOwogICAgIAogICAgIGJvb2wg
bmVlZHNTY29wZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWJ1Z2dlckVuYWJsZWQg
fHwgbV9jb2RlQmxvY2stPnVzZXNFdmFsKCk7IH0KICAgICBib29sIG5lZWRzRmx1c2hlZFRoaXMo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+dXNlc0V2YWwoKTsgfQogCi0gICAgdm9pZCBj
bGVhckNQU0NGR0RhdGEoKTsKLQotICAgIGJvb2wgaXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJs
b2NrKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fZW50cnlwb2ludHMuc2l6ZSgpIDw9IDQp
IHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9lbnRyeXBvaW50cy5jb250YWlucyhibG9j
ayk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fZW50cnlwb2ludFRvQXJndW1lbnRz
LmNvbnRhaW5zKGJsb2NrKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY29udGFpbnMo
YmxvY2spOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fZW50cnlwb2ludHMuY29udGFpbnMo
YmxvY2spKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KICAgICBWTSYgbV92bTsK
ICAgICBQbGFuJiBtX3BsYW47CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2Rl
QmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAKLSAgICBWZWN0b3I8UmVmUHRyPEJhc2ljQmxv
Y2s+LCA4PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IG1fZW50cnlwb2lu
dHM7CisgICAgVmVjdG9yPCBSZWZQdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBW
ZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAKICAgICBIYXNoTWFwPEVuY29kZWRK
U1ZhbHVlLCBGcm96ZW5WYWx1ZSosIEVuY29kZWRKU1ZhbHVlSGFzaCwgRW5jb2RlZEpTVmFsdWVI
YXNoVHJhaXRzPiBtX2Zyb3plblZhbHVlTWFwOwpAQCAtOTg5LDExICs5NTYsMTEgQEAgcHVibGlj
OgogICAgIC8vCiAgICAgLy8gSWYgd2UgRENFIHRoZSBBcml0aEFkZCBhbmQgd2UgcmVtb3ZlIHRo
ZSBpbnQgY2hlY2sgb24geCwgdGhlbiB0aGlzIHdvbid0IGRvIHRoZSBzaWRlCiAgICAgLy8gZWZm
ZWN0cy4KLSAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBBcmd1bWVudHNWZWN0b3I+IG1fZW50cnlw
b2ludFRvQXJndW1lbnRzOworICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7CiAgICAg
CiAgICAgLy8gSW4gQ1BTLCB0aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMgaXMgdGhl
IGFyZ3VtZW50IHNwZWN1bGF0aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluLgogICAgIFZlY3RvcjxG
bHVzaEZvcm1hdD4gbV9hcmd1bWVudEZvcm1hdHM7Ci0KKyAgICAKICAgICBTZWdtZW50ZWRWZWN0
b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAg
ICAgQmFnPFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkBAIC0xMDE1LDEyICs5ODIsMTAgQEAg
cHVibGljOgogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+
PiBtX3NhZmVUb0xvYWQ7CiAgICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXksIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogICAgIFZlY3RvcjxSZWY8U25pcHBldD4+
IG1fZG9tSklUU25pcHBldHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENQU0RvbWluYXRvcnM+IG1f
Y3BzRG9taW5hdG9yczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1NBRG9taW5hdG9ycz4gbV9zc2FE
b21pbmF0b3JzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDUFNOYXR1cmFsTG9vcHM+IG1fY3BzTmF0
dXJhbExvb3BzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTU0FOYXR1cmFsTG9vcHM+IG1fc3NhTmF0
dXJhbExvb3BzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTU0FDRkc+IG1fc3NhQ0ZHOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDUFNDRkc+IG1fY3BzQ0ZHOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEb21p
bmF0b3JzPiBtX2RvbWluYXRvcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFByZVBvc3ROdW1iZXJp
bmc+IG1fcHJlUG9zdE51bWJlcmluZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmF0dXJhbExvb3Bz
PiBtX25hdHVyYWxMb29wczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9sRXF1
aXZhbGVuY2VBbmFseXNpczsKQEAgLTEwNDQsOCArMTAwOSw2IEBAIHB1YmxpYzoKICAgICBSZWZD
b3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKICAgICBib29sIG1faGFzRGVidWdnZXJFbmFibGVk
OwogICAgIGJvb2wgbV9oYXNFeGNlcHRpb25IYW5kbGVycyB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2lzSW5TU0FDb252ZXJzaW9uIHsgZmFsc2UgfTsKLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dJ
bmRleGluZz4gbV9pbmRleGluZ0NhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFwPEFi
c3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggYzRh
NThjZWFiOTdiZDY1Yzg2ZTIwZTY3ZGJiNGM5N2I3MmQzYTIzYi4uMjViNGE2YjU5NmMyNDcwMDE3
ODM3OWE3Mjg1NjE5ZDU4OTFmYTFhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTkzLDYxICs5Myw1NCBAQCBz
dGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+JiB2
YWx1ZXMsIGNvbnN0IFZlY3RvcjxObwogCiB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKCkKIHsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGVudHJ5cG9pbnQgOiBtX2dyYXBoLm1f
ZW50cnlwb2ludHMpIHsKLSAgICAgICAgZW50cnlwb2ludC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRy
dWU7Ci0gICAgICAgIGVudHJ5cG9pbnQtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKLSAgICAgICAg
ZW50cnlwb2ludC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKLSAgICAgICAgZW50cnlwb2lu
dC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7
Ci0gICAgICAgIGVudHJ5cG9pbnQtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9IFN0
cnVjdHVyZXNBcmVXYXRjaGVkOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50
cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAg
ICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0KLSAg
ICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiBzdXBwb3J0aW5n
IG11bHRpcGxlIGVudHJ5cG9pbnRzIGluIHRoZSBGVEwsIHdlIG5lZWQgdG8gY2hhbmdlCi0gICAg
ICAgICAgICAgICAgLy8gd2hhdCB3ZSBkbyBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1Mzk2Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gbV9ncmFwaC5t
X2FyZ3VtZW50Rm9ybWF0c1tpXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChlbnRy
eXBvaW50KS0+dmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAg
ICAgICAgICAgICBmb3JtYXQgPSBGbHVzaGVkSlNWYWx1ZTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
OwotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICBjYXNl
IEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
YXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZW50
cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVl
c0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDAp
OworICAgIHJvb3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIHJvb3QtPmNmYUhhc1Zp
c2l0ZWQgPSBmYWxzZTsKKyAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAg
IHJvb3QtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZCA9IFN0cnVjdHVyZXNBcmVXYXRj
aGVkOworICAgIHJvb3QtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVy
ZXNBcmVXYXRjaGVkOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICByb290LT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKKworICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQ7Cisg
ICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpCisgICAgICAgICAgICBmb3JtYXQgPSBt
X2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRzW2ldOworICAgICAgICAgICAgaWYgKCFu
b2RlKQorICAgICAgICAgICAgICAgIGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQpOworICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5mbHVzaEZvcm1hdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkgewotICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkp
LmNsZWFyKCk7Ci0gICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwubG9jYWwoaSku
Y2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNh
c2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1
bWVudChpKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhl
YWQuYXJndW1lbnQoaSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBudWxscHRyLCAi
QmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQotCi0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICBpZiAobV9ncmFwaC5pc0VudHJ5cG9pbnQo
YmxvY2spKSB7Ci0gICAgICAgICAgICAvLyBXZSBib290c3RyYXBwZWQgdGhlIGVudHJ5cG9pbnRz
IGFib3ZlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwo
aSkuY2xlYXIoKTsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7
CisgICAgfQorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQogICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxz
ZTsKICAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKQEAgLTM3MSw3ICszNjQs
NyBAQCBpbmxpbmUgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMo
QmFzaWNCbG9jayogYmFzaWNCbG9jaykKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFz
aWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKTsKICAgICAgICAgcmV0dXJuIGNo
YW5nZWQ7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGFp
bENhbGw6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuY3BwCmluZGV4IDY5MjlhZjFjZDdiMWE0M2U0M2E4YjQ1YjVhOTZlY2QxYTdi
ZDJiM2IuLmYzODRlNDRkMWRkZDEwMjYwMzlkYzgwM2VkOTdmYzA4N2JlODg4MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcApAQCAtNjMsNyArNjMsNiBAQCB2b2lk
IEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICBjb21tb24uc2hyaW5rVG9GaXQoKTsKICAgICBv
c3JFbnRyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG9zckV4aXQuc2hyaW5rVG9GaXQoKTsKLSAgICBj
YXRjaEVudHJ5cG9pbnRzLnNocmlua1RvRml0KCk7CiAgICAgc3BlY3VsYXRpb25SZWNvdmVyeS5z
aHJpbmtUb0ZpdCgpOwogICAgIG1pbmlmaWVkREZHLnByZXBhcmVBbmRTaHJpbmsoKTsKICAgICB2
YXJpYWJsZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7CkBAIC0yMzgsMjQgKzIzNyw2IEBAIHN0
ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFBDKENvZGVCbG9jayosIHZvaWQq
IHBjKQogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXZvaWQgSklUQ29kZTo6ZmluYWxp
emVPU1JFbnRyeXBvaW50cygpCi17Ci0gICAgYXV0byBjb21wYXJhdG9yID0gW10gKGNvbnN0IGF1
dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgcmV0dXJuIGEubV9ieXRlY29kZUluZGV4
IDwgYi5tX2J5dGVjb2RlSW5kZXg7Ci0gICAgfTsKLSAgICBzdGQ6OnNvcnQoY2F0Y2hFbnRyeXBv
aW50cy5iZWdpbigpLCBjYXRjaEVudHJ5cG9pbnRzLmVuZCgpLCBjb21wYXJhdG9yKTsKLSAgICBz
dGQ6OnNvcnQob3NyRW50cnkuYmVnaW4oKSwgb3NyRW50cnkuZW5kKCksIGNvbXBhcmF0b3IpOwot
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGF1dG8gdmVyaWZ5SXNTb3J0ZWQgPSBbJl0gKGF1
dG8mIG9zclZlY3RvcikgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICsgMSA8IG9z
clZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIEFTU0VSVChvc3JWZWN0b3JbaV0ubV9i
eXRlY29kZUluZGV4IDw9IG9zclZlY3RvcltpICsgMV0ubV9ieXRlY29kZUluZGV4KTsKLSAgICB9
OwotICAgIHZlcmlmeUlzU29ydGVkKGNhdGNoRW50cnlwb2ludHMpOwotICAgIHZlcmlmeUlzU29y
dGVkKG9zckVudHJ5KTsKLSNlbmRpZgotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgKaW5kZXggMzQzZWFhNjQxYzJlNDQ5YTdiYzQ2NDk5NGZmYjI5NTQzODQ1ZWY3OC4uMDI0
NGUyNzlhMmEyMDVhMjA3MzgzOWE1YzU1MGRhZDY5Y2RlZDhjOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmgKQEAgLTY5LDIwICs2OSw2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG9zckVudHJ5LCBvc3JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAg
ICBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KTsKICAgICB9Ci0KLSAgICBDYXRjaEVudHJ5
cG9pbnREYXRhKiBjYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8Q2F0Y2hF
bnRyeXBvaW50RGF0YSwgdW5zaWduZWQ+KAotICAgICAgICAgICAgY2F0Y2hFbnRyeXBvaW50cywg
Y2F0Y2hFbnRyeXBvaW50cy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgICAgICBbXSAo
Y29uc3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSogaXRlbSkgeyByZXR1cm4gaXRlbS0+bV9ieXRlY29k
ZUluZGV4OyB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmFsaXplT1NSRW50cnlwb2ludHMoKTsK
LQotICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0LCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1l
bnRGb3JtYXRzKQotICAgIHsKLSAgICAgICAgY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hF
bnRyeXBvaW50RGF0YSB7IGJ5dGVjb2RlSW5kZXgsIG1hY2hpbmVDb2RlT2Zmc2V0LCBXVEZNb3Zl
KGFyZ3VtZW50Rm9ybWF0cykgfSk7Ci0gICAgfQogICAgIAogICAgIHVuc2lnbmVkIGFwcGVuZE9T
UkV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCkKICAgICB7CkBAIC0xNDYsMTMgKzEzMiwxMCBAQCBw
cml2YXRlOgogcHVibGljOgogICAgIENvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxERkc6
Ok9TUkVudHJ5RGF0YT4gb3NyRW50cnk7Ci0gICAgVmVjdG9yPENhdGNoRW50cnlwb2ludERhdGE+
IGNhdGNoRW50cnlwb2ludHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgOD4g
b3NyRXhpdDsKICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBzcGVjdWxhdGlv
blJlY292ZXJ5OwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3Ry
ZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKLSAgICBTY3JhdGNoQnVm
ZmVyKiBjYXRjaE9TUkVudHJ5QnVmZmVyOwotCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgdWlu
dDhfdCBuZXZlckV4ZWN1dGVkRW50cnkgeyAxIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggZWIwY2JjZTRmM2FmNDFjMDBjOGM3MTgxNDFi
Mzc4ZTAyOTkyODBhNy4uNmQyYjE4NzAwMmU0ZmNkOTgyNGQ4MjdjMjUwMGViOWYzOTBkZGYyMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTM2
Nyw4ICszNjcsNiBAQCBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBp
bGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgcwogCiB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlKCkKIHsKLSAgICBtYWtlQ2F0Y2hPU1JFbnRyeUJ1ZmZlcigpOwotCiAgICAgc2V0
U3RhcnRPZkNvZGUoKTsKICAgICBjb21waWxlRW50cnkoKTsKICAgICBtX3NwZWN1bGF0aXZlID0g
c3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUpJVD4oKnRoaXMpOwpAQCAtNDI4LDggKzQyNiw2
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlRnVuY3Rpb24oKQogewotICAgIG1ha2VDYXRjaE9TUkVudHJ5QnVmZmVyKCk7Ci0KICAgICBz
ZXRTdGFydE9mQ29kZSgpOwogICAgIGNvbXBpbGVFbnRyeSgpOwogCkBAIC01NTUsMjMgKzU1MSwx
NCBAQCB2b2lkKiBKSVRDb21waWxlcjo6YWRkcmVzc09mRG91YmxlQ29uc3RhbnQoTm9kZSogbm9k
ZSkKIH0KICNlbmRpZgogCi12b2lkIEpJVENvbXBpbGVyOjpub3RpY2VDYXRjaEVudHJ5cG9pbnQo
QmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlu
a0J1ZmZlciYgbGlua0J1ZmZlciwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0
cykKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBvaW50KTsK
LSAgICBSRUxFQVNFX0FTU0VSVChiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRl
ZCk7IC8vIEFuIGVudHJ5cG9pbnQgaXMgcmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0gICAgbV9q
aXRDb2RlLT5hcHBlbmRDYXRjaEVudHJ5cG9pbnQoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBs
aW5rQnVmZmVyLm9mZnNldE9mKGJsb2NrSGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7
Ci19Ci0KIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2lj
QmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWJhc2ljQmxvY2suaXNDYXRjaEVudHJ5cG9pbnQp
OwotCiAgICAgLy8gT1NSIGVudHJ5IGlzIG5vdCBhbGxvd2VkIGludG8gYmxvY2tzIGRlZW1lZCB1
bnJlYWNoYWJsZSBieSBjb250cm9sIGZsb3cgYW5hbHlzaXMuCiAgICAgaWYgKCFiYXNpY0Jsb2Nr
LmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkKICAgICAgICAgcmV0dXJuOwotCisgICAgICAg
IAogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBtX2ppdENvZGUtPmFwcGVuZE9TUkVudHJ5RGF0
YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGxpbmtCdWZmZXIub2Zmc2V0T2YoYmxvY2tIZWFk
KSk7Ci0KKyAgICAKICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9IGJhc2ljQmxvY2suaW50
ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkOwogICAgICAgICAKICAgICAvLyBGaXggdGhlIGV4
cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFibGUgd2lsbCBoYXZl
IGFuIGV4cGVjdGVkCkBAIC02ODMsMTQgKzY3MCw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OnNldEVu
ZE9mQ29kZSgpCiAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5n
V2F0Y2hwb2ludHMoKSk7CiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6Om1ha2VDYXRjaE9TUkVudHJ5
QnVmZmVyKCkKLXsKLSAgICBpZiAobV9ncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnkp
IHsKLSAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMaXZlTG9jYWxzID0gc3RkOjptYXgoKm1fZ3Jh
cGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5LCAxdSk7IC8vIE1ha2Ugc3VyZSB3ZSBhbHdh
eXMgYWxsb2NhdGUgYSBub24tbnVsbCBjYXRjaE9TUkVudHJ5QnVmZmVyLgotICAgICAgICBtX2pp
dENvZGUtPmNhdGNoT1NSRW50cnlCdWZmZXIgPSB2bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
aXplb2YoSlNWYWx1ZSkgKiBudW1iZXJPZkxpdmVMb2NhbHMpOwotICAgIH0KLX0KLQogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggYTNhMjJkNmVkOWY4OWE3
MGQ5YzZmYzk5N2M0ZTcyOGIzYjM1ODg5My4uYmQ0OTI5ZjNiNmI4Y2U5YjA5YTVjZTI0NjE2YmY3
NTFiODA1ZWVjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aApAQCAtMjU2LDcgKzI1Niw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIG5vdGljZU9T
UkVudHJ5KEJhc2ljQmxvY2smLCBKSVRDb21waWxlcjo6TGFiZWwgYmxvY2tIZWFkLCBMaW5rQnVm
ZmVyJik7Ci0gICAgdm9pZCBub3RpY2VDYXRjaEVudHJ5cG9pbnQoQmFzaWNCbG9jayYsIEpJVENv
bXBpbGVyOjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+
JiYgYXJndW1lbnRGb3JtYXRzKTsKICAgICAKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgp
IHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgIApAQCAtMjg1LDggKzI4NCw2IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGFwcGVuZEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdChFeGl0S2luZCwgdW5z
aWduZWQgZXZlbnRTdHJlYW1JbmRleCwgQ29kZU9yaWdpbiwgSGFuZGxlckluZm8qIGV4Y2VwdGlv
bkhhbmRsZXIsIENhbGxTaXRlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wc1Rv
RmFpbCA9IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpKTsKIAotICAgIHZvaWQgbWFrZUNhdGNo
T1NSRW50cnlCdWZmZXIoKTsKLQogICAgIC8vIFRoZSBkYXRhZmxvdyBncmFwaCBjdXJyZW50bHkg
YmVpbmcgZ2VuZXJhdGVkLgogICAgIEdyYXBoJiBtX2dyYXBoOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKaW5kZXggNDhjNDQyMjkyOTNmY2UzMGY0MWMyYzY2
MzFkZDlhNzFjOWU0MDJiYi4uZjQ0MDQ5MTM5ZDA5YjRlN2I5MjMwOGIxMmE1NTFhYTZmZjExZjli
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcApAQCAtNDcs
OCArNDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7
CiAKLXVzaW5nIE5hdHVyYWxMb29wID0gU1NBTmF0dXJhbExvb3A7Ci0KIHN0cnVjdCBMb29wRGF0
YSB7CiAgICAgTG9vcERhdGEoKQogICAgICAgICA6IHByZUhlYWRlcihudWxscHRyKQpAQCAtNzYs
OCArNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51
bGxwdHIsIG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIAotICAgICAgICBtX2dyYXBo
LmVuc3VyZVNTQURvbWluYXRvcnMoKTsKLSAgICAgICAgbV9ncmFwaC5lbnN1cmVTU0FOYXR1cmFs
TG9vcHMoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CisgICAgICAgIG1f
Z3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CiAgICAgICAgIG1fZ3JhcGguZW5zdXJlQ29udHJv
bEVxdWl2YWxlbmNlQW5hbHlzaXMoKTsKIAogICAgICAgICBpZiAodmVyYm9zZSkgewpAQCAtODUs
NyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgbV9kYXRhLnJlc2l6ZShtX2dyYXBoLm1fc3NhTmF0dXJhbExv
b3BzLT5udW1Mb29wcygpKTsKKyAgICAgICAgbV9kYXRhLnJlc2l6ZShtX2dyYXBoLm1fbmF0dXJh
bExvb3BzLT5udW1Mb29wcygpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgdGhl
IHNldCBvZiB0aGluZ3MgZWFjaCBsb29wIHdyaXRlcyB0bywgbm90IGluY2x1ZGluZyBibG9ja3Mg
dGhhdAogICAgICAgICAvLyBiZWxvbmcgdG8gaW5uZXIgbG9vcHMuIFdlIGZpeCB0aGlzIGxhdGVy
LgpAQCAtMTAwLDcgKzk4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jay0+Y2Zh
SGFzVmlzaXRlZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fc3NhTmF0dXJhbExv
b3BzLT5pbm5lck1vc3RMb29wT2YoYmxvY2spOworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExv
b3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLT5pbm5lck1vc3RMb29wT2YoYmxvY2sp
OwogICAgICAgICAgICAgaWYgKCFsb29wKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2RhdGFbbG9vcC0+aW5kZXgoKV07CkBAIC0xMTgs
MTQgKzExNiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEZvciBlYWNoIGxvb3A6CiAgICAgICAg
IC8vIC0gSWRlbnRpZnkgaXRzIHByZS1oZWFkZXIuCiAgICAgICAgIC8vIC0gTWFrZSBzdXJlIGl0
cyBvdXRlciBsb29wcyBrbm93IHdoYXQgaXQgY2xvYmJlcnMuCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgbG9vcEluZGV4ID0gbV9ncmFwaC5tX3NzYU5hdHVyYWxMb29wcy0+bnVtTG9vcHMoKTsgbG9v
cEluZGV4LS07KSB7Ci0gICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3Jh
cGgubV9zc2FOYXR1cmFsTG9vcHMtPmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBsb29wSW5kZXggPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLT5udW1Mb29wcygpOyBsb29w
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbV9ncmFw
aC5tX25hdHVyYWxMb29wcy0+bG9vcChsb29wSW5kZXgpOwogICAgICAgICAgICAgTG9vcERhdGEm
IGRhdGEgPSBtX2RhdGFbbG9vcC5pbmRleCgpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Zm9yICgKLSAgICAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogb3V0ZXJMb29wID0gbV9n
cmFwaC5tX3NzYU5hdHVyYWxMb29wcy0+aW5uZXJNb3N0T3V0ZXJMb29wKGxvb3ApOworICAgICAg
ICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBvdXRlckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJh
bExvb3BzLT5pbm5lck1vc3RPdXRlckxvb3AobG9vcCk7CiAgICAgICAgICAgICAgICAgb3V0ZXJM
b29wOwotICAgICAgICAgICAgICAgIG91dGVyTG9vcCA9IG1fZ3JhcGgubV9zc2FOYXR1cmFsTG9v
cHMtPmlubmVyTW9zdE91dGVyTG9vcCgqb3V0ZXJMb29wKSkKKyAgICAgICAgICAgICAgICBvdXRl
ckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLT5pbm5lck1vc3RPdXRlckxvb3AoKm91dGVy
TG9vcCkpCiAgICAgICAgICAgICAgICAgbV9kYXRhW291dGVyTG9vcC0+aW5kZXgoKV0ud3JpdGVz
LmFkZEFsbChkYXRhLndyaXRlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGhlYWRlciA9IGxvb3AuaGVhZGVyKCk7CkBAIC0xMzksNyArMTM3LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBoZWFkZXItPnByZWRl
Y2Vzc29ycy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvciA9IGhlYWRlci0+cHJlZGVjZXNzb3JzW2ldOwotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fc3NhRG9taW5hdG9ycy0+ZG9taW5hdGVzKGhlYWRlciwgcHJlZGVjZXNzb3IpKQor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGhlYWRl
ciwgcHJlZGVjZXNzb3IpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICAgICAgICAgIHByZUhlYWRlciA9IHByZWRlY2Vzc29yOwpAQCAtMTkzLDcgKzE5MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcFN0YWNrOwogICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7Ci0gICAgICAgICAgICBjb25zdCBOYXR1
cmFsTG9vcCogbG9vcCA9IG1fZ3JhcGgubV9zc2FOYXR1cmFsTG9vcHMtPmlubmVyTW9zdExvb3BP
ZihibG9jayk7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHMtPmlubmVyTW9zdExvb3BPZihibG9jayk7CiAgICAgICAgICAgICBpZiAo
IWxvb3ApCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKQEAgLTIwMSw3
ICsxOTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgIGNv
bnN0IE5hdHVyYWxMb29wKiBjdXJyZW50ID0gbG9vcDsKICAgICAgICAgICAgICAgICBjdXJyZW50
OwotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBtX2dyYXBoLm1fc3NhTmF0dXJhbExvb3BzLT5p
bm5lck1vc3RPdXRlckxvb3AoKmN1cnJlbnQpKQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBt
X2dyYXBoLm1fbmF0dXJhbExvb3BzLT5pbm5lck1vc3RPdXRlckxvb3AoKmN1cnJlbnQpKQogICAg
ICAgICAgICAgICAgIGxvb3BTdGFjay5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIFJlbWVtYmVyOiB0aGUgbG9vcCBzdGFjayBoYXMgdGhlIGlubmVyLW1vc3Qg
bG9vcCBhdCBpbmRleCAwLCBzbyBpZiB3ZSB3YW50CkBAIC0zMjAsNyArMzE4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gYmVjYXVzZSBtb3N0IGxvb3BzIGFyZSBzbWFsbCBhbmQgbW9zdCBibG9j
a3MgYmVsb25nIHRvIGZldyBsb29wcy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBib2R5SW5kZXgg
PSBsb29wLT5zaXplKCk7IGJvZHlJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
c3ViQmxvY2sgPSBsb29wLT5hdChib2R5SW5kZXgpOwotICAgICAgICAgICAgY29uc3QgTmF0dXJh
bExvb3AqIHN1Ykxvb3AgPSBtX2dyYXBoLm1fc3NhTmF0dXJhbExvb3BzLT5oZWFkZXJPZihzdWJC
bG9jayk7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogc3ViTG9vcCA9IG1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHMtPmhlYWRlck9mKHN1YkJsb2NrKTsKICAgICAgICAgICAgIGlmICghc3Vi
TG9vcCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHN1YlByZUhlYWRlciA9IG1fZGF0YVtzdWJMb29wLT5pbmRleCgpXS5wcmVIZWFkZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJl
c2VydmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCBmYTkwYzNmM2Y2ODE3NTcyM2M1
NWZkOWExMGRhMWM0MjI2OTlkNWE5Li5kYjM2OTk5N2ZmNjE4OWFkYjc5N2ZhNjAyNmU4NmM0YzYy
ZmI2ODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTI5LDcg
KzI5LDYgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiREZHQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdHcmFwaC5o
IgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCkBA
IC00NywxODYgKzQ2LDEwOSBAQCBwdWJsaWM6CiAKICAgICBib29sIHJ1bigpCiAgICAgeworICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9oYXNFeGNlcHRpb25IYW5kbGVycykKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFw
aC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKIAotICAgICAgICBpZiAoIW1fZ3JhcGgubV9oYXNFeGNl
cHRpb25IYW5kbGVycykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2tMaXZlbmVzcy5yZXNpemUobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mTG9jYWxzKCkpOwogCiAgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQo
bV9ncmFwaCk7Ci0gICAgICAgIGlmIChtX2dyYXBoLm1faGFzRXhjZXB0aW9uSGFuZGxlcnMpIHsK
LSAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKGJs
b2NrLCBpbnNlcnRpb25TZXQpOwotICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRl
KGJsb2NrKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgaGFuZGxlQmxv
Y2soYmxvY2ssIGluc2VydGlvblNldCk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShibG9jayk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBib29sIGlzVmFsaWRGbHVzaExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVu
c2lnbmVkIGluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBib29sIHdpbGxDYXRj
aEV4Y2VwdGlvbihDb2RlT3JpZ2luIG9yaWdpbikKICAgICB7Ci0gICAgICAgIC8vIFRoaXMgY29k
ZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4gV2UganVzdCB1c2UgaXQgZm9yIGFzc2VydGlvbnMu
IElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywKLSAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3b3Vs
ZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2ggdGhhdCB3ZSBpbnNlcnQuCi0gICAgICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgND4gd29ya2xpc3Q7Ci0gICAgICAgIEJsb2NrU2V0IHNlZW47Ci0KLSAg
ICAgICAgYXV0byBhZGRQcmVkZWNlc3NvcnMgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSB7Ci0g
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2stPnByZWRlY2Vzc29ycykg
ewotICAgICAgICAgICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IHNlZW4uYWRkKGJsb2NrKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBh
dXRvIGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVu
c2lnbmVkIGluZGV4KSB7Ci0gICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAg
IGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkp
LT5sb2NhbCgpID09IG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2tMaXZlbmVzcy5jbGVhckFsbCgpOworCisgICAgICAgIHdo
aWxlICgxKSB7CisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgeworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNhdGNoQnl0ZWNvZGVJbmRleCA9IGhhbmRsZXItPnRhcmdldDsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hC
eXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrTGl2ZW5lc3Nbb3BlcmFu
ZC50b0xvY2FsKCldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGFsbEdvb2Qp
CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmIChibG9jay0+cHJlZGVjZXNzb3JzLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByb290IGJsb2NrLiBXZSBwcm92ZWQg
d2UgcmVhY2hlZCBoZXJlLCB0aGVyZWZvcmUgd2UgY2FuJ3QgRmx1c2gsIGFzCi0gICAgICAgICAg
ICAgICAgLy8gaXQnbGwgbWFrZSB0aGlzIGxvY2FsIGxpdmUgYXQgdGhlIHN0YXJ0IG9mIGEgcm9v
dCBibG9jaywgd2hpY2ggaXMgaW52YWxpZCBJUi4KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gaW5s
aW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIG9y
aWdpbiA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOworICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgICAgICBhZGRQcmVkZWNlc3NvcnMoYmxvY2spOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9OworICAgIHZvaWQgaGFuZGxlQmxvY2soQmFzaWNCbG9jayogYmxv
Y2ssIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQorICAgIHsKKyAgICAgICAgLy8gQmVjYXVz
ZSBwcmVjaXNlIGp1bXAgdGFyZ2V0cyBlbnN1cmVzIHRoYXQgdGhlIHN0YXJ0IG9mIGEgInRyeSIg
YmxvY2sgaXMgaXRzCisgICAgICAgIC8vIG93biBiYXNpYyBibG9jaywgd2Ugd2lsbCBuZXZlciBo
YXZlIHR3byAidHJ5IiBzdGF0ZW1lbnRzIGluIHRoZSBzYW1lIERGRworICAgICAgICAvLyBiYXNp
YyBibG9jay4gVGhlcmVmb3JlLCBjaGVja2luZyB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgYmxvY2sg
aXMgc3VmZmljaWVudCAKKyAgICAgICAgLy8gdG8gY2hlY2tpbmcgaWYgd2UncmUgaW4gYSB0cnkg
YmxvY2suCisgICAgICAgIGlmICghd2lsbENhdGNoRXhjZXB0aW9uKGJsb2NrLT5hdCgwKS0+b3Jp
Z2luLnNlbWFudGljKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoZmx1c2hJ
c0RlZmluaXRlbHlJbnZhbGlkKHN0YXJ0aW5nQmxvY2ssIGluZGV4KSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVu
dEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbnVsbHB0cik7Cisg
ICAgICAgIEhhc2hTZXQ8SW5saW5lQ2FsbEZyYW1lKj4gc2VlbklubGluZUNhbGxGcmFtZXM7CiAK
LSAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGlmIChmbHVz
aElzRGVmaW5pdGVseUludmFsaWQoYmxvY2ssIGJsb2NrLT5zaXplKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkp
OworICAgICAgICAgICAgICAgIGJvb2wgaXNQcmltb3JkaWFsU2V0QXJndW1lbnQgPSBub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50ICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpICYmIG5vZGUg
PT0gbV9ncmFwaC5tX2FyZ3VtZW50c1tub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKV07CisgICAg
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIHNlZW5JbmxpbmVDYWxsRnJhbWVzLmFkZChp
bmxpbmVDYWxsRnJhbWUpOwogCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwgfHwgKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgIWlzUHJpbW9yZGlhbFNldEFy
Z3VtZW50KSkgeworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IG5vZGUtPmxvY2FsKCk7CiAKLSAgICB2b2lkIGhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2goQmFzaWNC
bG9jayogYmxvY2ssIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQotICAgIHsKLSAgICAgICAg
SGFuZGxlckluZm8qIGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAg
RmFzdEJpdFZlY3RvciBsaXZlQXRDYXRjaEhlYWQ7Ci0gICAgICAgIGxpdmVBdENhdGNoSGVhZC5y
ZXNpemUobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkp
OwotCi0gICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0OwotICAgICAgICBD
b2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47Ci0gICAgICAgIGF1dG8gY2F0Y2hIYW5kbGVyID0g
WyZdIChDb2RlT3JpZ2luIG9yaWdpbikgLT4gSGFuZGxlckluZm8qIHsKLSAgICAgICAgICAgIEFT
U0VSVChvcmlnaW4pOwotICAgICAgICAgICAgaWYgKG9yaWdpbiA9PSBjYWNoZWRDb2RlT3JpZ2lu
KQotICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0OwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4VG9DaGVjayA9IG9yaWdpbi5ieXRlY29kZUluZGV4
OwotCi0gICAgICAgICAgICBjYWNoZWRDb2RlT3JpZ2luID0gb3JpZ2luOwotCi0gICAgICAgICAg
ICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gb3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZy
YW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxv
Y2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2F0Y2hCeXRlY29kZUluZGV4ID0gaGFuZGxlci0+dGFyZ2V0
OwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRD
YXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCA6IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICgob3BlcmFu
ZC5pc0xvY2FsKCkgJiYgbV9jdXJyZW50QmxvY2tMaXZlbmVzc1tvcGVyYW5kLnRvTG9jYWwoKV0p
CisgICAgICAgICAgICAgICAgICAgICAgICB8fCAob3BlcmFuZC5vZmZzZXQoKSA9PSBzdGFja09m
ZnNldCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3Vy
cmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
aSwgU3BlY05vbmUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoLCBub2RlLT5v
cmlnaW4sIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXhUb0No
ZWNrID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgICAgICAgICBvcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhhbmRsZXJSZXN1bHQ7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0
YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbnVsbHB0cik7Ci0gICAgICAgIEhhc2hTZXQ8
SW5saW5lQ2FsbEZyYW1lKj4gc2VlbklubGluZUNhbGxGcmFtZXM7Ci0KLSAgICAgICAgYXV0byBm
bHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleCkg
ewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpOwot
ICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIGJv
b2wgYWx3YXlzSW5zZXJ0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwo
KSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSAKKyAgICAgICAgLy8gSW5z
ZXJ0IEZsdXNoIGZvciBldmVyeXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorICAgICAg
ICB7CisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IGJsb2NrLT5hdChibG9jay0+c2l6
ZSgpIC0gMSktPm9yaWdpbjsKKyAgICAgICAgICAgIGF1dG8gcHJlc2VydmVMaXZlbmVzc0F0RW5k
T2ZCbG9jayA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIGJvb2wgYWx3YXlzSW5zZXJ0
KSB7CisgICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBtX2N1cnJlbnRC
bG9ja0xpdmVuZXNzW29wZXJhbmQudG9Mb2NhbCgpXSkgCiAgICAgICAgICAgICAgICAgICAgIHx8
IG9wZXJhbmQuaXNBcmd1bWVudCgpCiAgICAgICAgICAgICAgICAgICAgIHx8IGFsd2F5c0luc2Vy
dCkgewotCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlvbihi
bG9jaywgaW5kZXgsIG9wZXJhbmQpKTsKLQogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIGFjY2Vzc0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzRGF0YSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7
CiAKICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9w
ZXJhbmQpID0gYWNjZXNzRGF0YTsKIAotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShpbmRleCwgU3BlY05vbmUsIAorICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShibG9jay0+c2l6ZSgpLCBTcGVjTm9uZSwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICBGbHVzaCwgb3JpZ2luLCBPcEluZm8oYWNjZXNzRGF0YSkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH07Ci0KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9j
YWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsg
bG9jYWwrKykKLSAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChs
b2NhbCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcmVzZXJ2ZUxpdmVuZXNzQXRFbmRPZkJs
b2NrKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKSwgZmFsc2UpOwogICAgICAgICAgICAg
Zm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6IHNlZW5JbmxpbmVDYWxsRnJh
bWVzKQotICAgICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSksIHRydWUp
OwotICAgICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkpLCB0cnVlKTsKLQotICAgICAgICAgICAgc2VlbklubGluZUNhbGxGcmFtZXMu
Y2xlYXIoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleCsrKSB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0KLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBIYW5kbGVySW5mbyogbmV3SGFuZGxlciA9IGNhdGNoSGFuZGxlcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAgICAgICAgIGlmIChuZXdIYW5kbGVyICE9IGN1
cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyKQotICAgICAg
ICAgICAgICAgICAgICBmbHVzaEV2ZXJ5dGhpbmcobm9kZS0+b3JpZ2luLCBub2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyID0gbmV3SGFuZGxlcjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYm
IChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpKSB7
Ci0gICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgICAgIHNlZW5JbmxpbmVDYWxsRnJhbWVz
LmFkZChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKLQotICAgICAgICAgICAgICAgIGludCBzdGFja09mZnNl
dCA9IGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwot
ICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2ZUF0Q2F0Y2hIZWFk
W29wZXJhbmQudG9Mb2NhbCgpXSkKLSAgICAgICAgICAgICAgICAgICAgfHwgb3BlcmFuZC5pc0Fy
Z3VtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG9wZXJhbmQub2Zmc2V0KCkgPT0gc3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSkgewotCi0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgbm9kZUluZGV4
LCBvcGVyYW5kKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFu
ZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOwotCi0gICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIAotICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2gs
IG5vZGUtPm9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3Rh
Y2sobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luID0gYmxvY2stPmF0KGJsb2NrLT5zaXplKCkgLSAxKS0+b3JpZ2lu
OwotICAgICAgICAgICAgZmx1c2hFdmVyeXRoaW5nKG9yaWdpbiwgYmxvY2stPnNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgcHJlc2VydmVMaXZlbmVzc0F0RW5kT2ZCbG9jayhWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkpLCB0cnVlKTsKKyAgICAgICAgICAgIHByZXNlcnZlTGl2ZW5lc3NBdEVuZE9mQmxv
Y2soVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpLCB0cnVl
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM3LDYgKzE1OSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRh
Lmxhc3QoKTsKICAgICB9CisKKyAgICBGYXN0Qml0VmVjdG9yIG1fY3VycmVudEJsb2NrTGl2ZW5l
c3M7CiB9OwogCiBib29sIHBlcmZvcm1MaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
KEdyYXBoJiBncmFwaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKaW5kZXggNThiOTU4ZTJjZDMxOThl
MTc3ODdkOTQzZDdjYzFiNDMxMjJmYzkzYy4uZDBiM2FkNGQxNDM5MjU5MDEyY2IyYmU4OTgwZjEz
OTAwYjg0ZWUzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKQEAgLTQxLDggKzQxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBCYXNpY0Jsb2NrKiBjcmVhdGVQcmVIZWFk
ZXIoR3JhcGgmIGdyYXBoLCBCbG9ja0luc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBCYXNpY0Js
b2NrKiBibG9jaykKIHsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFncmFwaC5pc0VudHJ5cG9p
bnQoYmxvY2spLCAiQW4gZW50cnlwb2ludCBzaG91bGQgbm90IGJlIGluIGEgbG9vcCIpOwotCiAg
ICAgLy8gRklYTUU6IElmIHdlIHJ1biB0aGlzIHV0aWxpdHkgb24gU1NBIElSLCB0aGVuIHdlIG1h
eSBlbmQgdXAgd2l0aCBhIGJpemFycmUgYXJyYW5nZW1lbnQgb2YKICAgICAvLyBVcHNpbG9ucyBh
bmQgUGhpcywgbGlrZToKICAgICAvLwpAQCAtNzEsOCArNjksNyBAQCBCYXNpY0Jsb2NrKiBjcmVh
dGVQcmVIZWFkZXIoR3JhcGgmIGdyYXBoLCBCbG9ja0luc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0
LCBCYXNpYwogICAgIC8vIEluc3RlYWQsIHdlIHVzZSB0aGUgbWF4IG9mIHRoZSBmcmVxdWVuY2ll
cyBvZiB0aGUgbG9vcCBib2R5J3Mgbm9uLWxvb3AgcHJlZGVjZXNzb3JzLgogICAgIGZsb2F0IGZy
ZXF1ZW5jeSA9IDA7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5w
cmVkZWNlc3NvcnMpIHsKLSAgICAgICAgQVNTRVJUKGdyYXBoLm1fZm9ybSAhPSBTU0EpOwotICAg
ICAgICBpZiAoZ3JhcGgubV9jcHNEb21pbmF0b3JzLT5kb21pbmF0ZXMoYmxvY2ssIHByZWRlY2Vz
c29yKSkKKyAgICAgICAgaWYgKGdyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGJsb2NrLCBw
cmVkZWNlc3NvcikpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZnJlcXVlbmN5ID0g
c3RkOjptYXgoZnJlcXVlbmN5LCBwcmVkZWNlc3Nvci0+ZXhlY3V0aW9uQ291bnQpOwogICAgIH0K
QEAgLTEwNiw3ICsxMDMsNyBAQCBCYXNpY0Jsb2NrKiBjcmVhdGVQcmVIZWFkZXIoR3JhcGgmIGdy
YXBoLCBCbG9ja0luc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBCYXNpYwogICAgIAogICAgIGZv
ciAodW5zaWduZWQgcHJlZGVjZXNzb3JJbmRleCA9IDA7IHByZWRlY2Vzc29ySW5kZXggPCBibG9j
ay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleCsrKSB7CiAgICAgICAgIEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1twcmVkZWNlc3Nvcklu
ZGV4XTsKLSAgICAgICAgaWYgKGdyYXBoLm1fY3BzRG9taW5hdG9ycy0+ZG9taW5hdGVzKGJsb2Nr
LCBwcmVkZWNlc3NvcikpCisgICAgICAgIGlmIChncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRl
cyhibG9jaywgcHJlZGVjZXNzb3IpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJs
b2NrLT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRleC0tXSA9IGJsb2NrLT5wcmVkZWNlc3Nv
cnMubGFzdCgpOwogICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKQEAg
LTEzMywxNiArMTMwLDE2IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgewot
ICAgICAgICBtX2dyYXBoLmVuc3VyZUNQU0RvbWluYXRvcnMoKTsKLSAgICAgICAgbV9ncmFwaC5l
bnN1cmVDUFNOYXR1cmFsTG9vcHMoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3Jz
KCk7CisgICAgICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CiAgICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fZ3JhcGgubV9jcHNOYXR1cmFsTG9vcHMt
Pm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgewotICAgICAgICAgICAgY29uc3QgQ1BTTmF0dXJh
bExvb3AmIGxvb3AgPSBtX2dyYXBoLm1fY3BzTmF0dXJhbExvb3BzLT5sb29wKGxvb3BJbmRleCk7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBleGlzdGluZ1ByZUhlYWRlciA9IG51bGxwdHI7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+
bnVtTG9vcHMoKTsgbG9vcEluZGV4LS07KSB7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9v
cCYgbG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmxvb3AobG9vcEluZGV4KTsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGV4aXN0aW5nUHJlSGVhZGVyID0gMDsKICAgICAgICAgICAgIGJv
b2wgbmVlZHNOZXdQcmVIZWFkZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
cHJlZGVjZXNzb3JJbmRleCA9IGxvb3AuaGVhZGVyKCkubm9kZSgpLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpOyBwcmVkZWNlc3NvckluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IgPSBsb29wLmhlYWRlcigpLm5vZGUoKS0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vz
c29ySW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fY3BzRG9taW5hdG9ycy0+
ZG9taW5hdGVzKGxvb3AuaGVhZGVyKCkubm9kZSgpLCBwcmVkZWNlc3NvcikpCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29ySW5kZXggPSBsb29wLmhlYWRlcigpLT5wcmVkZWNl
c3NvcnMuc2l6ZSgpOyBwcmVkZWNlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgPSBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnNbcHJlZGVj
ZXNzb3JJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5k
b21pbmF0ZXMobG9vcC5oZWFkZXIoKSwgcHJlZGVjZXNzb3IpKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUHJlSGVhZGVyKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUHJlSGVhZGVyID0gcHJlZGVjZXNzb3I7CkBAIC0x
NjgsMTQgKzE2NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBBIHByZS1oZWFkZXIgaXMg
bW9zdCB1c2VmdWwgaWYgaXQncyBwb3NzaWJsZSB0byBleGl0IGZyb20gaXRzIHRlcm1pbmFsLiBI
ZW5jZQogICAgICAgICAgICAgLy8gaWYgdGhlIHRlcm1pbmFsIG9mIHRoZSBleGlzdGluZyBwcmUt
aGVhZGVyIGRvZXNuJ3QgYWxsb3cgZm9yIGV4aXQsIGJ1dCB0aGUgZmlyc3QKICAgICAgICAgICAg
IC8vIG9yaWdpbiBvZiB0aGUgbG9vcCBoZWFkZXIgZG9lcywgdGhlbiB3ZSBzaG91bGQgY3JlYXRl
IGEgbmV3IHByZS1oZWFkZXIuCi0gICAgICAgICAgICBpZiAoIW5lZWRzTmV3UHJlSGVhZGVyICYm
IGxvb3AuaGVhZGVyKCkubm9kZSgpLT5hdCgwKS0+b3JpZ2luLmV4aXRPSworICAgICAgICAgICAg
aWYgKCFuZWVkc05ld1ByZUhlYWRlciAmJiBsb29wLmhlYWRlcigpLT5hdCgwKS0+b3JpZ2luLmV4
aXRPSwogICAgICAgICAgICAgICAgICYmICFleGlzdGluZ1ByZUhlYWRlci0+dGVybWluYWwoKS0+
b3JpZ2luLmV4aXRPSykKICAgICAgICAgICAgICAgICBuZWVkc05ld1ByZUhlYWRlciA9IHRydWU7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbmVlZHNOZXdQcmVIZWFkZXIpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNyZWF0ZVBy
ZUhlYWRlcihtX2dyYXBoLCBtX2luc2VydGlvblNldCwgbG9vcC5oZWFkZXIoKS5ub2RlKCkpOwor
ICAgICAgICAgICAgY3JlYXRlUHJlSGVhZGVyKG1fZ3JhcGgsIG1faW5zZXJ0aW9uU2V0LCBsb29w
LmhlYWRlcigpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggZjk2NmU0MzNmNDBk
Y2Y2NzZiYTg5NjI1NWU2YTBjNDcwYmVlMzNhYi4uNjVlNTE4Njk1NmU4Y2M0MGE0OGFkNzdlYzUy
MDQ2OTIwMmY1YmI3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAKQEAgLTUzLDEwICs1Myw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9l
bnRyeXBvaW50cykgewotICAgICAgICAgICAgdHJlYXRSb290QmxvY2soZW50cnlwb2ludCwgaW5z
ZXJ0aW9uU2V0KTsKLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGVudHJ5cG9pbnQp
OwotICAgICAgICB9CisgICAgICAgIHRyZWF0Um9vdEJsb2NrKG1fZ3JhcGguYmxvY2soMCksIGlu
c2VydGlvblNldCk7CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKG1fZ3JhcGguYmxvY2so
MCkpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY5LDEzICs2Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaSk7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc1ByaW1vcmRpYWxTZXRBcmd1bWVudCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50ICYmIG5v
ZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRl
ciA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChibG9jayk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVyICE9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMu
ZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpc1ByaW1vcmRpYWxTZXRBcmd1bWVudCA9
IG5vZGUgPT0gaXRlci0+dmFsdWVbbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCldOwotICAgICAg
ICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgIGJvb2wgaXNQcmltb3JkaWFsU2V0QXJndW1l
bnQgPSBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50ICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpICYmIG5vZGUgPT0gbV9ncmFwaC5tX2FyZ3VtZW50c1tub2RlLT5sb2NhbCgpLnRvQXJndW1l
bnQoKV07CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgKG5v
ZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgIWlzUHJpbW9yZGlhbFNldEFyZ3VtZW50KSkgewog
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2Fs
KCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZmx1c2hBY2Nlc3NE
YXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMTM2LDEy
ICsxMjgsMTIgQEAgcHVibGljOgogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGkrKykgewogICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsK
KyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogYWNjZXNzRGF0YTsKICAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgaW5pdGlhbEFjY2Vzc05vZGVzLm9wZXJhbmQo
b3BlcmFuZCktPm9wKCkgPT0gRmx1c2gpOyAvLyBXZSBzaG91bGQgaGF2ZSBpbnNlcnRlZCBhIEZs
dXNoIGJlZm9yZSBhbnkgU2V0TG9jYWwvU2V0QXJndW1lbnQgZm9yIHRoZSBsb2NhbCB0aGF0IHdl
IGFyZSBhbmFseXppbmcgbm93LgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBhY2Nl
c3NEYXRhID0gaW5pdGlhbEFjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAg
IGFjY2Vzc0RhdGEgPSBpbml0aWFsQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBhY2Nlc3NEYXRhKTsKICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNOb25lLCAKICAgICAgICAgICAgICAg
ICBTZXRMb2NhbCwgb3JpZ2luLCBPcEluZm8oYWNjZXNzRGF0YSksIEVkZ2UodW5kZWZpbmVkKSk7
Ci0gICAgICAgICAgICBhY2Nlc3NEYXRhLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7IC8v
IFdlIGRvbid0IGtub3cgaWYgd2UgY2FuIGV4aXQgaGVyZS4KICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggNmIyOTllYjY2ODFl
NmYxMzFlN2Y3Zjg5Y2Y5MTViNDRiNTQzZWI4ZC4uNDVhMWNjYjMzNmUwNmEyOWE2MjJlMWY0YzQ4
NGUzMjkyNTRhYmM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3Bw
CkBAIC04NCw3ICs4NCw2IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIEludDUyUmVwOgogICAgIGNhc2Ug
VmFsdWVSZXA6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKLSAgICBjYXNlIEV4dHJh
Y3RDYXRjaExvY2FsOgogICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICBjYXNlIE5vdGlmeVdyaXRl
OgogICAgIGNhc2UgUHV0U3RydWN0dXJlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TmF0dXJhbExvb3BzLmgKaW5kZXggMTAyOTkxOGI3MTc5YWZmMWI1OGYxZmRiZGEwZGI5NTFlMjMz
ZTczOS4uZjdjNTMyYTlhMWFkOTg0NGJkMmM3OWY3NjZiZjZkZGNjODgyM2NjYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCkBAIC0zNCwyMCArMzQsMTgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ0ZHS2luZD4KLWNsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBXVEY6Ok5hdHVyYWxMb29w
czxDRkdLaW5kPiB7Cit0eXBlZGVmIFdURjo6TmF0dXJhbExvb3A8Q0ZHPiBOYXR1cmFsTG9vcDsK
KworY2xhc3MgTmF0dXJhbExvb3BzIDogcHVibGljIFdURjo6TmF0dXJhbExvb3BzPENGRz4gewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5hdHVyYWxMb29wcyk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgTmF0dXJhbExvb3BzKEdyYXBoJiBncmFwaCkKLSAg
ICAgICAgOiBXVEY6Ok5hdHVyYWxMb29wczxDRkdLaW5kPihzZWxlY3RDRkc8Q0ZHS2luZD4oZ3Jh
cGgpLCBlbnN1cmVEb21pbmF0b3JzRm9yQ0ZHPENGR0tpbmQ+KGdyYXBoKSwgdmFsaWRhdGlvbkVu
YWJsZWQoKSkKKyAgICAgICAgOiBXVEY6Ok5hdHVyYWxMb29wczxDRkc+KCpncmFwaC5tX2NmZywg
Z3JhcGguZW5zdXJlRG9taW5hdG9ycygpLCB2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgIHsKICAg
ICB9CiB9OwogCi11c2luZyBTU0FOYXR1cmFsTG9vcCA9IFdURjo6TmF0dXJhbExvb3A8U1NBQ0ZH
PjsKLXVzaW5nIENQU05hdHVyYWxMb29wID0gV1RGOjpOYXR1cmFsTG9vcDxDUFNDRkc+OwotCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggZTcwZGI5NjExYzRiMDQyODI5NTk2MzQz
MDI1YTczMzkzZjE3Y2IxNC4uY2Y0Y2IwNGJhM2E0YjlhMjIyYzZjZTE2ZTFhNzY5OTE3NzNkZDA2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTEyOTIsNyArMTI5Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQnJhbmNoOwogICAgIH0KICAgICAKLSAg
ICBib29sIGlzU3dpdGNoKCkgY29uc3QKKyAgICBib29sIGlzU3dpdGNoKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBvcCgpID09IFN3aXRjaDsKICAgICB9CkBAIC0xMzg3LDcgKzEzODcsNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA9PSBzd2l0Y2hEYXRhKCkt
PmNhc2VzLnNpemUoKSk7CiAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgpLT5mYWxsVGhy
b3VnaC5ibG9jazsKICAgICAgICAgfQotCiAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICAg
ICAgY2FzZSAwOgogICAgICAgICAgICAgaWYgKGlzSnVtcCgpKQpAQCAtMTU1OSwxOCArMTU1OCw2
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG9wKCkgPT0gSWRlbnRpdHlXaXRoUHJvZmlsZSk7
CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxTcGVjdWxhdGVkVHlwZT4oKTsKICAgICB9Ci0K
LSAgICB1aW50MzJfdCBjYXRjaE9TUkVudHJ5SW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKG9wKCkgPT0gRXh0cmFjdENhdGNoTG9jYWwpOwotICAgICAgICByZXR1cm4gbV9vcElu
Zm8uYXM8dWludDMyX3Q+KCk7Ci0gICAgfQotCi0gICAgU3BlY3VsYXRlZFR5cGUgY2F0Y2hMb2Nh
bFByZWRpY3Rpb24oKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0gRXh0cmFjdENhdGNo
TG9jYWwpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8yLmFzPFNwZWN1bGF0ZWRUeXBlPigpOwot
ICAgIH0KICAgICAKICAgICBib29sIGhhc0NlbGxPcGVyYW5kKCkKICAgICB7CkBAIC0xOTcwLDcg
KzE5NTcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0
ZXIuaXNWYWxpZCgpOwogICAgIH0KLQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA2OGZkNmY4YzBmMDkwMWVhOTIxMWNi
NzllZGUwYTcxZjE2YjU3NTgxLi44NjdhOTJjOWExNWVlOTExMWNhNTc3MmM2MTc1MDBmYzNlNGIz
ZWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC05Miw3ICs5
Miw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBTcGVjaWFsIG5v
ZGUgZm9yIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwuIEluZGljYXRlcyB0aGF0IHdlJ3JlIGxvYWRp
bmcgYSBsb2NhbCAqL1wKICAgICAvKiB2YXJpYWJsZSBmcm9tIHRoZSBzY3JhdGNoIGJ1ZmZlci4g
Ki9cCiAgICAgbWFjcm8oRXh0cmFjdE9TUkVudHJ5TG9jYWwsIE5vZGVSZXN1bHRKUykgXAotICAg
IG1hY3JvKEV4dHJhY3RDYXRjaExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyog
VGllci11cCBjaGVja3MgZnJvbSB0aGUgREZHIHRvIHRoZSBGVEwuICovXAogICAgIG1hY3JvKENo
ZWNrVGllclVwSW5Mb29wLCBOb2RlTXVzdEdlbmVyYXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDAwMTM0ZDgyOTJlYjdiNmNkYmJkNGYyNGRlYWFh
YWMzMjkzYTM0MWMuLjE4MThiNGQ3NmNjMTA3NDA2MGQ3OTA1ZmY0NTVlMjRhNDUzMjRlM2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKICNpbmNs
dWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVz
LmgiCkBAIC0zMzcsNzEgKzMzNiw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUq
IGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluCiAgICAgcmV0
dXJuIHNjcmF0Y2g7CiB9CiAKLXZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0g
ICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKLSAgICBERkc6OkpJVENvZGUqIGppdENvZGUg
PSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaml0Q29k
ZSk7Ci0KLSAgICBERkc6OkNhdGNoRW50cnlwb2ludERhdGEqIGNhdGNoRW50cnlwb2ludCA9IGpp
dENvZGUtPmNhdGNoT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
LSAgICBpZiAoIWNhdGNoRW50cnlwb2ludCkgewotICAgICAgICAvLyBUaGlzIGNhbiBiZSBudWxs
IHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcy4gVGhlIG1vc3QgY29tbW9uIGlzIHRoYXQgd2UgZGlk
bid0Ci0gICAgICAgIC8vIGNvbXBpbGUgdGhpcyBvcF9jYXRjaCBhcyBhbiBlbnRyeXBvaW50IHNp
bmNlIGl0IGhhZCBuZXZlciBleGVjdXRlZCB3aGVuIHN0YXJ0aW5nCi0gICAgICAgIC8vIHRoZSBj
b21waWxhdGlvbi4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gV2Un
cmUgb25seSBhbGxvd2VkIHRvIE9TUiBlbnRlciBpZiB3ZSd2ZSBwcm92ZW4gd2UgaGF2ZSBjb21w
YXRpYmxlIGFyZ3VtZW50IHR5cGVzLgotICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IGNhdGNoRW50cnlwb2ludC0+bV9hcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyArK2Fy
Z3VtZW50KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRSKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkuanNWYWx1ZSgpOwotICAgICAgICBzd2l0
Y2ggKGNhdGNoRW50cnlwb2ludC0+bV9hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdKSB7Ci0gICAg
ICAgIGNhc2UgREZHOjpGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzSW50
MzIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZENlbGw6Ci0gICAgICAgICAgICBpZiAoIXZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBERkc6OkRlYWRGbHVzaDoKLSAgICAgICAg
ICAgIC8vIFRoaXMgbWVhbnMgdGhlIGFyZ3VtZW50IGlzIG5vdCBhbGl2ZS4gVGhlcmVmb3JlLCBp
dCdzIGFsbG93ZWQgdG8gYmUgYW55IHR5cGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBERkc6OkZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgLy8gQW4gYXJndW1lbnQgaXMg
dHJpdmlhbGx5IGEgSlNWYWx1ZS4KLSAgICAgICAgICAgIGJyZWFrOyAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JDaGVjayA9IGppdENvZGUtPmNvbW1v
bi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCk7Ci0gICAgaWYgKFVO
TElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKCZleGVjLT5yZWdpc3RlcnMoKVt2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVGb3JDaGVjaykub2Zmc2V0KCldKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKEludGVycHJldGVyOjpnZXRPcGNvZGVJ
RChleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbZXhlYy0+Ynl0ZWNvZGVPZmZzZXQo
KV0udS5vcGNvZGUpID09IG9wX2NhdGNoKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4o
ZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2V4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkg
KyAzXS51LnBvaW50ZXIpOwotICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9j
YXN0PEpTVmFsdWUqPihqaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkp
OwotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7Ci0gICAgICAgIGlmICghVmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kKS5pc0xvY2FsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRhdGFCdWZmZXJbaW5kZXhdID0gZXhlYy0+dW5jaGVja2VkUihwcm9maWxlLm1fb3Bl
cmFuZCkuanNWYWx1ZSgpOwotICAgICAgICArK2luZGV4OwotICAgIH0pOwotCi0gICAgaml0Q29k
ZS0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3RoKHNpemVvZihKU1ZhbHVlKSAq
IGluZGV4KTsKLQotICAgIHJldHVybiBqaXRDb2RlLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0
KGNhdGNoRW50cnlwb2ludC0+bV9tYWNoaW5lQ29kZU9mZnNldCk7Ci19Ci0KIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCmluZGV4IDcxMjU5MmMxYWU0NWEwYjY3NDQyNzAwYWIz
M2M1YzU4Y2NjYTc5OTcuLjQxYTkzMzA5MmM1ZjRhNDI2NGRhYjMyNGIyYTgzZjZmNjc2NTk2OGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKQEAgLTI2LDcgKzI2LDYg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgotI2luY2x1
ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3
dGYvQml0VmVjdG9yLmg+CiAKQEAgLTcwLDIwICs2OSw5IEBAIGlubGluZSB1bnNpZ25lZCBnZXRP
U1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQogICAg
IHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IENhdGNo
RW50cnlwb2ludERhdGEgewotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKLSAgICB1bnNp
Z25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OwotICAgIC8vIFdlIHVzZSB0aGlzIHdoZW4gZG9pbmcg
T1NSIGVudHJ5IGF0IGNhdGNoLiBXZSBwcm92ZSB0aGUgYXJndW1lbnRzCi0gICAgLy8gYXJlIG9m
IHRoZSBleHBlY3RlZCB0eXBlIGJlZm9yZSBlbnRlcmluZyBhdCBhIGNhdGNoIGJsb2NrLgotICAg
IFZlY3RvcjxGbHVzaEZvcm1hdD4gbV9hcmd1bWVudEZvcm1hdHM7Ci19OwotCiAvLyBSZXR1cm5z
IGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyIHRoYXQgdGhlIE9TUiBlbnRyeSB0aHVuayB3aWxs
IHJlY29nbml6ZSBhbmQKIC8vIHBhcnNlLiBJZiB0aGlzIHJldHVybnMgbnVsbCwgaXQgbWVhbnMg
CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCk7Ci0KLS8vIElmIG51bGwgaXMgcmV0dXJuZWQsIHdlIGNhbid0IE9TUiBl
bnRlci4gSWYgaXQncyBub3QgbnVsbCwgaXQncyB0aGUgUEMgdG8ganVtcCB0by4KLXZvaWQqIHBy
ZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcAppbmRleCBkMTY5NjViZTgxYjE4MTBhMDhmYWRjOTgwZjc2YmViZDFhYjQwNDZi
Li41ZDIyZWRkNjBjNWY4ODVmMWM2MDAzYTY1ZjA1Mzc2ZWI3MDBhNjEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgotI2luY2x1ZGUgIkRG
R0NGRy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtNTUsNyArNTQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9N
QVgpOwogICAgICAgICAKICAgICAgICAgLy8gTmVlZGVkIGJ5IGNyZWF0ZVByZUhlYWRlcigpLgot
ICAgICAgICBtX2dyYXBoLmVuc3VyZUNQU0RvbWluYXRvcnMoKTsKKyAgICAgICAgbV9ncmFwaC5l
bnN1cmVEb21pbmF0b3JzKCk7CiAgICAgICAgIAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
ID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2s7CiAgICAgICAgIApAQCAtMTEzLDE3ICsxMTIsMTYg
QEAgcHVibGljOgogICAgICAgICAvLyB0eXBlIGNoZWNrcyB0byBoZXJlLgogICAgICAgICBvcmln
aW4gPSB0YXJnZXQtPmF0KDApLT5vcmlnaW47CiAgICAgICAgIAotICAgICAgICBBcmd1bWVudHNW
ZWN0b3IgbmV3QXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5k
KG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIE5vZGUqIG9sZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVu
dChhcmd1bWVudCk7CiAgICAgICAgICAgICBpZiAoIW9sZE5vZGUpIHsKICAgICAgICAgICAgICAg
ICAvLyBKdXN0IGZvciBzYW5pdHksIGFsd2F5cyBoYXZlIGEgU2V0QXJndW1lbnQgZXZlbiBpZiBp
dCdzIG5vdCBuZWVkZWQuCi0gICAgICAgICAgICAgICAgb2xkTm9kZSA9IG5ld0FyZ3VtZW50c1th
cmd1bWVudF07CisgICAgICAgICAgICAgICAgb2xkTm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNb
YXJndW1lbnRdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5ld1Jv
b3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFy
Z3VtZW50LCBvcmlnaW4sCiAgICAgICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpKSk7Ci0gICAgICAgICAgICBuZXdBcmd1bWVudHNbYXJndW1lbnRdID0gbm9k
ZTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gbm9kZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+
bV9udW1DYWxsZWVMb2NhbHM7ICsrbG9jYWwpIHsKQEAgLTE0MSwxNyArMTM5LDggQEAgcHVibGlj
OgogICAgICAgICAgICAgT3BJbmZvKGNyZWF0ZVByZUhlYWRlcihtX2dyYXBoLCBpbnNlcnRpb25T
ZXQsIHRhcmdldCkpKTsKICAgICAgICAgCiAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7
Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9
PSAxKTsKLSAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzWzBdID0gbmV3Um9vdDsKLSAgICAg
ICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5jbGVhcigpOwotICAgICAgICBtX2dy
YXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmFkZChuZXdSb290LCBuZXdBcmd1bWVudHMpOwot
Ci0gICAgICAgIG1fZ3JhcGgubV9jcHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVlPENQU0NGRz4obV9n
cmFwaCk7Ci0KICAgICAgICAgbV9ncmFwaC5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgICAgICBt
X2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwotCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggNmI5NDkwMjA3M2RhZDRkNjkxNzY1ZjQzYWQ2ZWIx
NzRjYWYyNmM4OS4uZjc2Y2NiODhiYjFlNGM3YTc3YTQ5NDZkNTc3ODg0Yzk3MjUwMjBhZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcApAQCAtMzksMTUgKzM5LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAogdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBP
U1JFeGl0QmFzZSYgZXhpdCkKIHsKLSAgICBpZiAoIWV4aXRLaW5kTWF5SmV0dGlzb24oZXhpdC5t
X2tpbmQpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCB0byBub3RpY2UgdGhhdCB3
ZSdyZSBmcmVxdWVudGx5IGV4aXRpbmcKLSAgICAgICAgLy8gYXQgYW4gb3BfY2F0Y2ggdGhhdCB3
ZSBkaWRuJ3QgY29tcGlsZSBhbiBlbnRyeXBvaW50IGZvciwgYW5kCi0gICAgICAgIC8vIHRoZW4g
dHJpZ2dlciBhIHJlb3B0aW1pemF0aW9uIG9mIHRoaXMgQ29kZUJsb2NrOgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQyCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBqaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZleGl0Lm1fY291bnQpKTsK
KworICAgIGlmICghZXhpdEtpbmRNYXlKZXR0aXNvbihleGl0Lm1fa2luZCkpCisgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aml0LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5jcHAKaW5kZXggNTA1NTk3ZTAyNzExZDA5ZTNlNGU3MDk1MTg3ZDg2YzlhZjE3Njc3NS4u
M2FhZDBlMjczZGQyY2Q1Y2MyMGM1Njk2NGUzNzI1MWFjOTYxNDc3YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCkBAIC03MzAsNyArNzMwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygpOwogICAgICAgICBtX2dyYXBoLmluaXRpYWxpemVO
b2RlT3duZXJzKCk7Ci0gICAgICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygpOworICAg
ICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNz
QW5hbHlzaXMobV9ncmFwaCk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNp
cyhtX2dyYXBoKTsKICAgICAgICAgbV9jb21iaW5lZExpdmVuZXNzID0gQ29tYmluZWRMaXZlbmVz
cyhtX2dyYXBoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IGY1MTdm
ZTllYWZkYTU2NTNlOTU1OTUxNjQwZDE2NWJkZDI1Y2VkZDAuLmEyNDI5OTg2ZTUyMGQ1NTY0OGZi
ZDdiMDc3MzA2MzhmMDQxZjk2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cApAQCAtMzY2LDggKzM2Niw5IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHJlYWRJbXBsKCkKICAgICAvLyBJZiB3ZSdyZSBkb2luZyB2YWxpZGF0aW9uLCB0aGVuIHJ1
biBzb21lIGFuYWx5c2VzLCB0byBnaXZlIHRoZW0gYW4gb3Bwb3J0dW5pdHkKICAgICAvLyB0byBz
ZWxmLXZhbGlkYXRlLiBOb3cgaXMgYXMgZ29vZCBhIHRpbWUgYXMgYW55IHRvIGRvIHRoaXMuCiAg
ICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgZGZnLmVuc3VyZUNQU0RvbWlu
YXRvcnMoKTsKLSAgICAgICAgZGZnLmVuc3VyZUNQU05hdHVyYWxMb29wcygpOworICAgICAgICBk
ZmcuZW5zdXJlRG9taW5hdG9ycygpOworICAgICAgICBkZmcuZW5zdXJlTmF0dXJhbExvb3BzKCk7
CisgICAgICAgIGRmZy5lbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7CiAgICAgfQogCiAgICAgc3dp
dGNoIChtb2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZVBvc3ROdW1iZXJpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Yjc5MjMxOTBjNDlhOGEyMzVkNWE4ZDY0OWViZDQ5
NTg2ZTM3MzJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3Qu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK1ByZVBvc3ROdW1iZXJpbmc6OlByZVBvc3ROdW1iZXJpbmcoR3JhcGgmIGdyYXBoKQor
eworICAgIG1fbWFwID0gQmxvY2tNYXA8TnVtYmVyaW5nPihncmFwaCk7CisgICAgCisgICAgUG9z
dE9yZGVyQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmJs
b2NrKDApKTsKKyAgICB1bnNpZ25lZCBuZXh0UHJlTnVtYmVyID0gMDsKKyAgICB1bnNpZ25lZCBu
ZXh0UG9zdE51bWJlciA9IDA7CisgICAgd2hpbGUgKEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3Jr
bGlzdC5wb3AoKSkgeworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKKyAgICAgICAgY2Fz
ZSBWaXNpdE9yZGVyOjpQcmU6CisgICAgICAgICAgICBtX21hcFtpdGVtLm5vZGVdLm1fcHJlTnVt
YmVyID0gbmV4dFByZU51bWJlcisrOworICAgICAgICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRl
bS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogaXRlbS5u
b2RlLT5zdWNjZXNzb3JzKCkpCisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzdWNjZXNz
b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9zdDoK
KyAgICAgICAgICAgIG1fbWFwW2l0ZW0ubm9kZV0ubV9wb3N0TnVtYmVyID0gbmV4dFBvc3ROdW1i
ZXIrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitQcmVQb3N0
TnVtYmVyaW5nOjp+UHJlUG9zdE51bWJlcmluZygpIHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFZGdlS2luZCBraW5kKQorewor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgRm9yd2FyZEVkZ2U6CisgICAgICAgIG91dC5w
cmludCgiRm9yd2FyZEVkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ3Jvc3NFZGdl
OgorICAgICAgICBvdXQucHJpbnQoIkNyb3NzRWRnZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBCYWNrRWRnZToKKyAgICAgICAgb3V0LnByaW50KCJCYWNrRWRnZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjRlZmRhY2Q3Y2NkNmIxMGIyYTAxZWQ2YzcxMTc0MDk0MzQzZjUzNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5o
CkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gRWRnZUtpbmQgeworICAgIEZvcndhcmRF
ZGdlLAorICAgIENyb3NzRWRnZSwKKyAgICBCYWNrRWRnZQorfTsKKworY2xhc3MgUHJlUG9zdE51
bWJlcmluZyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJlUG9zdE51bWJlcmluZyk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJlUG9zdE51bWJlcmlu
ZyhHcmFwaCYpOworICAgIH5QcmVQb3N0TnVtYmVyaW5nKCk7CisKKyAgICB1bnNpZ25lZCBwcmVO
dW1iZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3By
ZU51bWJlcjsgfQorICAgIHVuc2lnbmVkIHBvc3ROdW1iZXIoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3Bvc3ROdW1iZXI7IH0KKyAgICAKKyAgICAvLyBJ
cyBmcm9tIGEgc3RyaWN0IGFuY2VzdG9yIG9mIHRvPworICAgIGJvb2wgaXNTdHJpY3RBbmNlc3Rv
ck9mKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHByZU51bWJlcihmcm9tKSA8IHByZU51bWJlcih0bykKKyAgICAgICAgICAgICYm
IHBvc3ROdW1iZXIoZnJvbSkgPiBwb3N0TnVtYmVyKHRvKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc0FuY2VzdG9yT2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBpc1N0cmljdEFuY2VzdG9yT2YoZnJv
bSwgdG8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3RyaWN0RGVzY2VuZGFudE9mKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzU3RyaWN0QW5jZXN0b3JPZih0bywgZnJvbSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNE
ZXNjZW5kYW50T2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNBbmNlc3Rvck9mKHRvLCBmcm9tKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhpcyB3aWxsIGdpdmUgYSBib2d1cyBhbnN3ZXIgaWYgdGhlcmUgaXMgYWN0dWFsbHkg
bm8gc3VjaCBlZGdlLiBJZiB5b3Ugd2FudCB0byBkZXRlcm1pbmUKKyAgICAvLyBpZiB0aGVyZSBp
cyBhbnkgc3VjaCBlZGdlLCB5b3UgaGF2ZSB0byBkbyBpdCB5b3Vyc2VsZi4KKyAgICBFZGdlS2lu
ZCBlZGdlS2luZChCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpc1N0cmljdERlc2NlbmRhbnRPZih0bywgZnJvbSkpCisgICAgICAgICAg
ICByZXR1cm4gRm9yd2FyZEVkZ2U7CisgICAgICAgIAorICAgICAgICBpZiAoaXNBbmNlc3Rvck9m
KHRvLCBmcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBCYWNrRWRnZTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBDcm9zc0VkZ2U7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
TnVtYmVyaW5nIHsKKyAgICAgICAgdW5zaWduZWQgbV9wcmVOdW1iZXI7CisgICAgICAgIHVuc2ln
bmVkIG1fcG9zdE51bWJlcjsKKyAgICB9OworCisgICAgQmxvY2tNYXA8TnVtYmVyaW5nPiBtX21h
cDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpFZGdlS2luZCk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKaW5kZXggODExZGVjMGM2MmRjYjM1YzQwZDIzODM5MjgyNjEwZjgyZjQ5M2VmZC4u
YjAwYWQ2ZDkxMGU4ZmVkNjIxMzJiZmI0YmRlZTJhZTVhNTgyZjM4MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmNwcApAQCAtNTEsMTMgKzUxLDkgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2soKS0+bV9sb2NrKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugb25seSBkbyB0aGlzIGZvciB0aGUgYXJndW1lbnRz
IGF0IHRoZSBmaXJzdCBibG9jay4gVGhlIGFyZ3VtZW50cyBmcm9tCi0gICAgICAgICAgICAvLyBv
dGhlciBlbnRyeXBvaW50cyBoYXZlIGFscmVhZHkgYmVlbiBwb3B1bGF0ZWQgd2l0aCB0aGVpciBw
cmVkaWN0aW9ucy4KLSAgICAgICAgICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRy
eXBvaW50VG9Bcmd1bWVudHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7Ci0KICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CiAgICAgICAgICAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gcHJvZmlsZWRCbG9jaygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1
bWVudChhcmcpOwotICAgICAgICAgICAgICAgIGFyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdCgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2Fy
Z10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAogICAgICAgICAgICAgICAgICAgICBw
cm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCA1YjBiOWVmNjM3YzIxZmVmMDQ1
M2ZlYTkzYzU3YjRiZDFlNzFlYjNlLi44OTFkNWUwOTUyZjNmZTA5NDE4MmUwM2RmYzI0NTI4MTc1
ZTJlYzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtOTk1LDExICs5OTUsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEV4dHJh
Y3RDYXRjaExvY2FsOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1fY3VycmVudE5vZGUt
PmNhdGNoTG9jYWxQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCBkM2RhNTUyN2Q2M2JjMDc2OTgw
ZWQ0MDRkNTczMDY1ZDRhODUxNmJhLi5hYzM3MTI3MGRlYWJmMjM2ODMzODVmYTk5MTRlZjIwMzNh
NjgyYzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fZ3JhcGguZW5zdXJlU1NB
RG9taW5hdG9ycygpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKICAgICAg
ICAgCiAgICAgICAgIFNTQUNhbGN1bGF0b3Igc3NhQ2FsY3VsYXRvcihtX2dyYXBoKTsKICAgICAg
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCmluZGV4IDM0YzQyN2I2ODUxZjg4Njc2
MTRiYjQyZGIwMjZlNzZjZTFmZTkxYWQuLjg5OWZhMTVmOWZkYTI1YTU4YzYxN2QxYzU1NjJlZGZh
ZjAxNjBlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxh
dG9yLmNwcApAQCAtOTUsMTIgKzk1LDEyIEBAIFNTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3Vs
YXRvcjo6bmV3RGVmKFZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2ssCiAKIFNT
QUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxSZWFjaGluZ0RlZihCYXNp
Y0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQogewotICAgIHJldHVybiByZWFjaGlu
Z0RlZkF0VGFpbChtX2dyYXBoLm1fc3NhRG9taW5hdG9ycy0+aWRvbShibG9jayksIHZhcmlhYmxl
KTsKKyAgICByZXR1cm4gcmVhY2hpbmdEZWZBdFRhaWwobV9ncmFwaC5tX2RvbWluYXRvcnMtPmlk
b20oYmxvY2spLCB2YXJpYWJsZSk7CiB9CiAKIFNTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3Vs
YXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJp
YWJsZSkKIHsKLSAgICBmb3IgKDsgYmxvY2s7IGJsb2NrID0gbV9ncmFwaC5tX3NzYURvbWluYXRv
cnMtPmlkb20oYmxvY2spKSB7CisgICAgZm9yICg7IGJsb2NrOyBibG9jayA9IG1fZ3JhcGgubV9k
b21pbmF0b3JzLT5pZG9tKGJsb2NrKSkgewogICAgICAgICBpZiAoRGVmKiBkZWYgPSBtX2RhdGFb
YmxvY2tdLm1fZGVmcy5nZXQodmFyaWFibGUpKQogICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCmluZGV4
IGEyNWIwMDEzOGQ0ZjZkYWVhMTU0ZjA3NTgwMDQ5ZmExM2UxNTM3Y2QuLjE0OTNiMDVjZDkyNjQx
Yjg2MmNlMDk5OGNkNDA5MjM2NDZjNTBmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ2FsY3VsYXRvci5oCkBAIC0xNzUsMTAgKzE3NSwxMCBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgUGhpSW5zZXJ0aW9uRnVuY3Rvcj4KICAgICB2b2lkIGNvbXB1dGVQ
aGlzKGNvbnN0IFBoaUluc2VydGlvbkZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9zc2FEb21pbmF0b3JzKTsKKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZG9taW5hdG9ycyk7
CiAgICAgICAgIAogICAgICAgICBmb3IgKFZhcmlhYmxlJiB2YXJpYWJsZSA6IG1fdmFyaWFibGVz
KSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fc3NhRG9taW5hdG9ycy0+Zm9yQWxsQmxvY2tzSW5Q
cnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgICAgICBtX2dyYXBoLm1f
ZG9taW5hdG9ycy0+Zm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVy
T2YoCiAgICAgICAgICAgICAgICAgdmFyaWFibGUubV9ibG9ja3NXaXRoRGVmcywKICAgICAgICAg
ICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IGZ1bmN0b3IoJnZhcmlhYmxlLCBibG9jayk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5k
ZXggOWRlYTg1ODhmYzhkZmE1NzYyNzdjMjAzNDI3OGM0MDIxNzMwZjVlNi4uY2RlMDc0MDA3Yzk2
NTc0MWIzZmFiNzM0NDJiZTAxYWZmOGM1YmQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtNTQsOCArNTQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVk
Q1BTKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKLSAg
ICAgICAgbV9ncmFwaC5jbGVhckNQU0NGR0RhdGEoKTsKLSAgICAgICAgbV9ncmFwaC5lbnN1cmVT
U0FEb21pbmF0b3JzKCk7CisgICAgICAgIG1fZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpOwogICAg
ICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBo
IGJlZm9yZSBTU0EgdHJhbnNmb3JtYXRpb246XG4iKTsKQEAgLTExMSw3ICsxMTAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIERlY2lkZSB3aGVyZSBQaGlzIGFy
ZSB0byBiZSBpbnNlcnRlZC4gVGhpcyBjcmVhdGVzIHRoZSBQaGkncyBidXQgZG9lc24ndCBpbnNl
cnQgdGhlbQotICAgICAgICAvLyB5ZXQuIFdlIHdpbGwgbGF0ZXIga25vdyB3aGVyZSB0byBpbnNl
cnQgYmFzZWQgb24gd2hlcmUgU1NBQ2FsY3VsYXRvciB0ZWxscyB1cyB0by4KKyAgICAgICAgLy8g
eWV0LiBXZSB3aWxsIGxhdGVyIGtub3cgd2hlcmUgdG8gaW5zZXJ0IHRoZW0gYmVjYXVzZSBTU0FD
YWxjdWxhdG9yIGlzIHN1Y2ggYSBicm8uCiAgICAgICAgIG1fY2FsY3VsYXRvci5jb21wdXRlUGhp
cygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxl
LCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewogICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUt
PmluZGV4KCldOwpAQCAtMzgyLDIyICszODEsMTggQEAgcHVibGljOgogICAgICAgICAgICAgYmxv
Y2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOwogICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6
bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZHIFNTQToK
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5
NgotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpID09
IDEpOwotICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJn
dW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOwotICAgICAgICBtX2dyYXBoLm1f
YXJndW1lbnRGb3JtYXRzLnJlc2l6ZShhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYXJndW1lbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAKKyAgICAgICAg
bV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUobV9ncmFwaC5tX2FyZ3VtZW50cy5zaXpl
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fYXJndW1lbnRzLnNpemUo
KTsgaS0tOykgewogICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFs
dWU7CiAKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQoYXJn
dW1lbnRzW2ldKTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5n
ZXQobV9ncmFwaC5tX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG5vZGUpOwogICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50Rm9ybWF0c1tpXSA9IGZvcm1hdDsKLSAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IG5v
ZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBi
ZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50
c1tpXSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMg
Zm9yIHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKQEAgLTQyMSwxMiArNDE2LDcgQEAgcHJpdmF0
ZToKIAogYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoIWdyYXBoLm1faXNJblNTQUNvbnZlcnNpb24pOwotICAgIGdyYXBoLm1faXNJ
blNTQUNvbnZlcnNpb24gPSB0cnVlOwotICAgIGJvb2wgcmVzdWx0ID0gcnVuUGhhc2U8U1NBQ29u
dmVyc2lvblBoYXNlPihncmFwaCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZ3JhcGgubV9pc0luU1NB
Q29udmVyc2lvbik7Ci0gICAgZ3JhcGgubV9pc0luU1NBQ29udmVyc2lvbiA9IGZhbHNlOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJ1blBoYXNlPFNTQUNvbnZlcnNpb25QaGFzZT4o
Z3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IGFkNzZiMzNiMGZhYWYxODdkYjQ2
YTMwODkyZjQ3ZmNhN2UzYjQ0OWQuLjFiZGM1OWVhMmMyZThjZWU4YjBiZDM5ZWUxMDQ3YzM3YTQy
ZTA1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CkBAIC0zMjYsNyArMzI2LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBl
JiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTmV3VHlwZWRBcnJh
eToKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6
Ci0gICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29w
OgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNlIENoZWNrVGllclVwQW5k
T1NSRW50ZXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCmluZGV4IGY4MzYwYjlmZGI5MDFiYWMyMTQ5Yjk0MzJiMGVlNzJlZWMwYWQ5OTYuLjdj
MmM4NmI3NDVjMDViMTNhMjA4YmYyMTAwZjFhMTc5YzBhZmQ4MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xNzA3LDEzICsxNzA3
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9ibG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpIHsK
LSAgICAgICAgbV9qaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1faml0Lmdy
YXBoKCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICAgICAgbV9qaXQuZW1pdFNhdmVDYWxsZWVTYXZlcygpOwotICAgICAgICBtX2ppdC5lbWl0
TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwotICAgICAgICBtX2ppdC5lbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIobV9qaXQuY29kZUJsb2NrKCksIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayk7Ci0gICAgfQotCiAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojpy
ZXNldCgpKTsKICAgICAKICAgICBtX2ppdC5qaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwpA
QCAtMTgwOCw5ICsxODAxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5
cGVzKCkKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwogICAgIG1fb3JpZ2luID0gTm9kZU9y
aWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKIAotICAgIGF1dG8mIGFy
Z3VtZW50cyA9IG1faml0LmdyYXBoKCkubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChtX2pp
dC5ncmFwaCgpLmJsb2NrKDApKS0+dmFsdWU7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2pp
dC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9k
ZSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1faml0LmdyYXBoKCkubV9h
cmd1bWVudHNbaV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgLy8gVGhlIGFy
Z3VtZW50IGlzIGRlYWQuIFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRz
LgogICAgICAgICAgICAgY29udGludWU7CkBAIC0xODk0LDExICsxODg2LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVudHJpZXMoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2sp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGJsb2NrLT5pc09TUlRhcmdldCB8
fCBibG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3
ZSBkb24ndCBoYXZlIE9TUiBlbnRyeSB0cmFtcG9saW5lcy4gV2UgY291bGQgYWRkIHRoZW0KLSAg
ICAgICAgICAgIC8vIGhlcmUgaWYgbmVlZCBiZS4KLSAgICAgICAgICAgIG1fb3NyRW50cnlIZWFk
cy5hcHBlbmQobV9qaXQuYmxvY2tIZWFkcygpW2Jsb2NrSW5kZXhdKTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgLy8gQ3VycmVudGx5IHdlIGRvbid0IGhhdmUgT1NSIGVudHJ5IHRyYW1w
b2xpbmVzLiBXZSBjb3VsZCBhZGQgdGhlbQorICAgICAgICAvLyBoZXJlIGlmIG5lZWQgYmUuCisg
ICAgICAgIG1fb3NyRW50cnlIZWFkcy5hcHBlbmQobV9qaXQuYmxvY2tIZWFkcygpW2Jsb2NrSW5k
ZXhdKTsKICAgICB9CiB9CiAKQEAgLTE5MDksMjkgKzE5MDIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bGlua09TUkVudHJpZXMoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghYmxvY2st
PmlzT1NSVGFyZ2V0ICYmICFibG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpCisgICAgICAgIGlmICgh
YmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChi
bG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKLSAgICAgICAgICAgIGF1dG8mIGFyZ3VtZW50c1Zl
Y3RvciA9IG1faml0LmdyYXBoKCkubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChibG9jaykt
PnZhbHVlOwotICAgICAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHM7
Ci0gICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1
bWVudHNWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoTm9kZSogc2V0QXJndW1lbnQg
OiBhcmd1bWVudHNWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0QXJndW1lbnQpIHsK
LSAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQgPSBzZXRBcmd1bWVu
dC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChmbHVzaEZvcm1hdCA9PSBGbHVzaGVkSW50MzIgfHwgZmx1c2hGb3JtYXQgPT0g
Rmx1c2hlZENlbGwgfHwgZmx1c2hGb3JtYXQgPT0gRmx1c2hlZEJvb2xlYW4gfHwgZmx1c2hGb3Jt
YXQgPT0gRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudEZvcm1h
dHMudW5jaGVja2VkQXBwZW5kKGZsdXNoRm9ybWF0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnVuY2hlY2tlZEFwcGVuZChEZWFk
Rmx1c2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9qaXQubm90aWNlQ2F0Y2hFbnRy
eXBvaW50KCpibG9jaywgbV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5kZXgrK10sIGxpbmtCdWZm
ZXIsIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoYmxvY2stPmlzT1NSVGFyZ2V0KTsKLSAgICAgICAgICAgIG1faml0Lm5vdGlj
ZU9TUkVudHJ5KCpibG9jaywgbV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5kZXgrK10sIGxpbmtC
dWZmZXIpOwotICAgICAgICB9CisgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KCpibG9jaywg
bV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5kZXgrK10sIGxpbmtCdWZmZXIpOwogICAgIH0KLQot
ICAgIG1faml0LmppdENvZGUoKS0+ZmluYWxpemVPU1JFbnRyeXBvaW50cygpOwotCiAgICAgQVNT
RVJUKG9zckVudHJ5SW5kZXggPT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7CiAgICAgCiAgICAg
aWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggMzU0NDllMzVk
ZjY0N2I5MDJkNGYzNTYzNDljZDI4YjI1YjhjYTU2NC4uMTAzMTY1MjhmOTIzNjNkOWJlMDY0YTRi
ODc1NzA3ZjNmZTAxYzFjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC01NjM0LDIzICs1NjM0LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB1bnJlYWNoYWJsZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOiB7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGFn
KHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcGF5bG9hZCh0aGlzKTsKLQotICAgICAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0YWdHUFIgPSB0YWcu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gcGF5bG9hZC5ncHIoKTsKLQotICAg
ICAgICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0
Q29kZSgpLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpW25vZGUtPmNhdGNoT1NS
RW50cnlJbmRleCgpXTsKLSAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIocHRyKSwgdGVtcEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3ModGVtcEdQUiwgVGFnT2Zmc2V0KSwgdGFnR1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyh0ZW1wR1BSLCBQYXlsb2FkT2Zmc2V0KSwgcGF5bG9h
ZEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQodGFnR1BSLCBwYXlsb2FkR1BSLCBub2RlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgY2Fz
ZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggZDRjMzgzNGI3ZGZjYjU4NmViZjJiMzM3
MGRhNTdjMGZhNDAwMDBmYy4uODMyNjI0MTk1NmFlMDBlMWI0ZDI1MDQ5MDZjNWFmY2I4MGY2YzU2
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCkBAIC01OTk4LDE2ICs1OTk4LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlQ2hlY2tTdWJDbGFzcyhub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAKLSAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOiB7Ci0gICAgICAgIEpTVmFs
dWUqIHB0ciA9ICZyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihtX2ppdC5qaXRDb2RlKCktPmNh
dGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlbbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4
KCldOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihwdHIpLCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyh0ZW1wR1BSKSwgdGVtcEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQo
dGVtcEdQUiwgbm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQogI2lmIEVOQUJMRShGVExf
SklUKSAgICAgICAgCiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDogewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBjYWxsVGllclVwID0gbV9qaXQuYnJhbmNoQWRkMzIoCkBAIC02MDk2
LDcgKzYwODYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIH0pOwogICAgICAgICBicmVhazsKICAgICB9Ci0KICNlbHNlIC8vIEVOQUJMRShGVExf
SklUKQogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0
UmV0dXJuOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAppbmRleCA1YTEw
NGFmYzMzNWM1NjBiYmNjMmE5OTQ4N2RmODE5Y2I4OWE2OGMxLi5iNmUzNWNmNGNiYjA1OTE4ODQ5
NzFiYmIyNTA3OWE0ZWEwMzUwMDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmNwcApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQog
ICAgIHsKLSAgICAgICAgbV9ncmFwaC5lbnN1cmVDUFNOYXR1cmFsTG9vcHMoKTsKKyAgICAgICAg
bV9ncmFwaC5lbnN1cmVOYXR1cmFsTG9vcHMoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVzdGlt
YXRlIGJhc2ljIGJsb2NrIGV4ZWN1dGlvbiBjb3VudHMgYmFzZWQgb24gbG9vcCBkZXB0aC4KICAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBi
bG9ja0luZGV4LS07KSB7CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlm
ICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGJsb2Nr
LT5leGVjdXRpb25Db3VudCA9IHBvdygxMCwgbV9ncmFwaC5tX2Nwc05hdHVyYWxMb29wcy0+bG9v
cERlcHRoKGJsb2NrKSk7CisgICAgICAgICAgICBibG9jay0+ZXhlY3V0aW9uQ291bnQgPSBwb3co
MTAsIG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmxvb3BEZXB0aChibG9jaykpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBFc3RpbWF0ZSBicmFuY2ggd2VpZ2h0cyBiYXNlZCBvbiBl
eGVjdXRpb24gY291bnRzLiBUaGlzIGlzbid0IHF1aXRlIGNvcnJlY3QuIEl0J2xsCkBAIC04MCw3
ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5mYWxs
VGhyb3VnaCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KKyAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAppbmRleCA2NWFmYjRhZTg5NWFkNDg3YmY1ZmFi
ZWNkZmViNTk3OGVjZWMwMDRkLi45NWFlMTliYTNhMzlhNzYxNTI5MmEwYmVhNzdiY2I1ODE1ZGQy
NzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTI2OCwyNyArMjY4LDE4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaDogewogICAgICAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtICE9IFNTQSk7Ci0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLndpbGxDYXRjaEV4
Y2VwdGlvbkluTWFjaGluZUZyYW1lKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkgewotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byByZWxheCB0aGlzOgotICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA4MjQKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRyOwogICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGxvY2FsID0gbV9ub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKLQogICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKICAg
ICAgICAgICAgICAgICAgICAgc2V0TG9jYWwgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNP
dmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgbG9jYWwpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKCFzZXRMb2NhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDAzYWY1ZDk1
MjhiNzE4ZDFhNzc3YjY2ZTAxZWM4Y2U5YWEwZjBhZWUuLjBhM2NiOWVkZWZlYjIzZTJjMzQ1ZDY0
NGJhMmM2ZjY4YTMzMjJmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcApAQCAtNTAsOCArNTAsNiBA
QCBzdGF0aWMgRnVuY3Rpb25XaGl0ZWxpc3QmIGVuc3VyZUdsb2JhbEZUTFdoaXRlbGlzdCgpCiAg
ICAgcmV0dXJuIGZ0bFdoaXRlbGlzdDsKIH0KIAotdXNpbmcgTmF0dXJhbExvb3AgPSBDUFNOYXR1
cmFsTG9vcDsKLQogY2xhc3MgVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CiBwdWJsaWM6CiAgICAgVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CkBAIC04Myw4ICs4MSw4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JF
bnRyeVRvRlRMKCkpCiAgICAgICAgICAgICBsZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKICAgICAg
ICAgCi0gICAgICAgIG1fZ3JhcGguZW5zdXJlQ1BTTmF0dXJhbExvb3BzKCk7Ci0gICAgICAgIENQ
U05hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzID0gKm1fZ3JhcGgubV9jcHNOYXR1cmFsTG9vcHM7
CisgICAgICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CisgICAgICAgIE5hdHVyYWxM
b29wcyYgbmF0dXJhbExvb3BzID0gKm1fZ3JhcGgubV9uYXR1cmFsTG9vcHM7CiAgICAgICAgIEhh
c2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gbmF0dXJhbExvb3BUb0xvb3BIaW50
ID0gYnVpbGROYXR1cmFsTG9vcFRvTG9vcEhpbnRNYXAobmF0dXJhbExvb3BzKTsKIAogICAgICAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBMb29wSGludERlc2NyaXB0b3I+IHRpZXJVcEhpZXJhcmNoeTsK
QEAgLTE4NCw3ICsxODIsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+IGJ1aWxkTmF0dXJh
bExvb3BUb0xvb3BIaW50TWFwKGNvbnN0IENQU05hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKQor
ICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gYnVpbGROYXR1cmFsTG9v
cFRvTG9vcEhpbnRNYXAoY29uc3QgTmF0dXJhbExvb3BzJiBuYXR1cmFsTG9vcHMpCiAgICAgewog
ICAgICAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+IG5hdHVyYWxMb29w
c1RvTG9vcEhpbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDMxZjBkZDVlMmZlOTg2MDM1ZWU0YmFm
Zjg2MzAwYTFiOGQxY2I4MTguLjM5ZmU3MTBlNjlmOWI5NWUyYWQ4YmEyYmUxMGE5NTZmMWQxYTZk
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTM0LDExICsxMzQsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlICYmICFpdGVyLT52YWx1
ZS5tX2FycmF5TW9kZUlzVmFsaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ugc2hvdWxkIG9ubHkgYmUgZG9pbmcg
dGhpcyBob2lzdGluZyBmb3IgU2V0QXJndW1lbnRzIGF0IGFuIGVudHJ5cG9pbnQuCi0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzRW50cnlwb2ludChibG9jaykpOworICAgICAg
ICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ugc2hvdWxkIG9ubHkgYmUgZG9pbmcgdGhpcyBo
b2lzdGluZyBmb3IgU2V0QXJndW1lbnRzIGF0IHRoZSBwcm9sb2d1ZS4KKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFibG9ja0luZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQob3JpZ2luLmV4aXRPSyk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBnZXRMb2NhbCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgdmFyaWFibGUtPnByZWRpY3Rpb24o
KSwgR2V0TG9jYWwsIG9yaWdpbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKaW5kZXggMWJjMWRhNjNmZjk2YTNlOGEwMjk4YTAzNzkzMDg4MDFjYThiNGUzMC4uNjhh
ZmQyNDU2NTg2NWVkMDE1NzVhMDkxOWYxMDI2OGNiZmEzY2UzOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTgzLDEzICs4MywxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIE5CLiBUaGlzIGNvZGUgaXMgbm90IHdyaXR0ZW4gZm9yIHBlcmZvcm1hbmNlLCBz
aW5jZSBpdCBpcyBub3QgaW50ZW5kZWQgdG8gcnVuCiAgICAgICAgIC8vIGluIHJlbGVhc2UgYnVp
bGRzLgogCi0gICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5pc0Vu
dHJ5cG9pbnQobV9ncmFwaC5ibG9jaygwKSkpOwotCi0gICAgICAgIC8vIFZhbGlkYXRlIHRoYXQg
YWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwgZW50cnlwb2ludHMgYXJlIGRl
YWQuCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9lbnRy
eXBvaW50cykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5cG9p
bnQtPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICAg
ICAgVl9FUVVBTCgodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGVudHJ5cG9pbnQpLCBzdGF0
aWNfY2FzdDxOb2RlKj4obnVsbHB0ciksIGVudHJ5cG9pbnQtPnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCBhbGwgbG9jYWwgdmFy
aWFibGVzIGF0IHRoZSBoZWFkIG9mIHRoZSByb290IGJsb2NrIGFyZSBkZWFkLgorICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kp
CisgICAgICAgICAgICBWX0VRVUFMKCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgcm9vdCks
IHN0YXRpY19jYXN0PE5vZGUqPigwKSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFZhbGlkYXRlIHJlZiBjb3VudHMgYW5kIHVzZXMuCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKaW5kZXggNjc2YjM5MDljODdkMGRhOTBjNWQ4ZGI2NjA4YWQyMTRjNTk4OTY2OS4uYWM4
YjViMzRlNTI0Zjg3N2MwMjM0NDQxNGRkM2VmYzc1NjNlY2NmMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgbGluayhTdGF0ZSYgc3Rh
dGUpCiAgICAgICAgICAgICBQcm9maWxlcjo6T3JpZ2luU3RhY2soKSwKICAgICAgICAgICAgIHRv
Q1N0cmluZygiR2VuZXJhdGVkIEZUTCBKSVQgY29kZSBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5
cGUoY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlvbiBjb3VudCA9ICIs
IGdyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6XG4iKSk7CiAgICAgICAg
IAotICAgICAgICBncmFwaC5lbnN1cmVTU0FEb21pbmF0b3JzKCk7Ci0gICAgICAgIGdyYXBoLmVu
c3VyZVNTQU5hdHVyYWxMb29wcygpOworICAgICAgICBncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7
CisgICAgICAgIGdyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOwogICAgICAgICAKICAgICAgICAg
Y29uc3QgY2hhciogcHJlZml4ID0gIiAgICAiOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAzZWUyMTY5ZmZkOTE4MzU0ZDQx
NzU1MjIxOGUyYzE1ZWQ1MTk1MWVhLi5lYmQ3YjVhYTEzNTk0YWNmY2EzZmNkYTIyZmUzZDQ5Mjlj
MmUyMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIG5hbWUgPSAianNCb2R5IjsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguZW5zdXJlU1NB
RG9taW5hdG9ycygpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKIAogICAg
ICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgZGF0YUxv
ZygiRnVuY3Rpb24gcmVhZHksIGJlZ2lubmluZyBsb3dlcmluZy5cbiIpOwpAQCAtMjY2LDkgKzI2
Niw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBtX25vZGUgPSBudWxscHRyOwogICAg
ICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwg
dHJ1ZSk7Ci0gICAgICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9B
cmd1bWVudHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKICAgICAgICAgICAgIG1fb3V0LnNldE9yaWdpbihub2Rl
KTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSk7CiAgICAgICAgICAgICAKQEAgLTQ0NCw3ICs0NDMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgREZHOjpCYXNpY0Jsb2NrKiB0YXJnZXQgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX3NzYURvbWluYXRvcnMtPmRvbWluYXRl
cyhtX2hpZ2hCbG9jaywgdGFyZ2V0KSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21p
bmF0b3JzLT5kb21pbmF0ZXMobV9oaWdoQmxvY2ssIHRhcmdldCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJCbG9jayAiLCAqdGFyZ2V0LCAiIHdpbGwgYmFpbCBhbHNvLlxuIik7CiAgICAgICAg
ICAgICAgICAgdGFyZ2V0LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CkBAIC0xNDQ3Myw3ICsxNDQ3
Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zc2FEb21pbmF0b3JzLT5kb21p
bmF0ZXModmFsdWUuYmxvY2soKSwgbV9oaWdoQmxvY2spKQorICAgICAgICBpZiAoIW1fZ3JhcGgu
bV9kb21pbmF0b3JzLT5kb21pbmF0ZXModmFsdWUuYmxvY2soKSwgbV9oaWdoQmxvY2spKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAppbmRleCA3Y2JhZTM1NDM1OGU0ZWIwMmI3N2RiNDkwMjFiMTRiOWY2
MzBlOWUwLi5kZDQ1OTRjMDMyNTkzY2Q2ZDZlMmNmYmY0Yzc0MGYxNDk2NTJjNzU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKQEAgLTc5OCw3ICs3OTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
WlosIGludCwgaW50MzJfdCwgaW50MzJfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpTLCBHUFJSZWcsIHNpemVfdCk7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRp
b25fRVVpLCB1aW50MzJfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19KSVRPcGVyYXRpb25fRUNDLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiwg
UmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
U19KSVRPcGVyYXRpb25fRUpJLCBHUFJSZWcsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDMzNWU3Njc4YzlhZDg4ZTAwN2FjYWJm
MTllMTFiMjllNDBkNWNjYTcuLmUxOWUzOTNlNTBmZTE1NGE1ZDRjNDBmYzZiNmJjNDQ5MTE5MmNm
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00NjMsMTMgKzQ2
Myw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBvcGVyCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFBfSklU
T3BlcmF0aW9uX0VVaSBvcGVyYXRpb24sIHVpbnQzMl90IGFyZzEpCi17Ci0gICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSk7Ci0gICAgdXBkYXRlVG9wQ2Fs
bEZyYW1lKCk7Ci0gICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKLX0KLQogI2lmIFVT
RShKU1ZBTFVFNjQpCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2Fs
bE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIGlu
dDMyX3QgYXJnMiwgaW50MzJfdCBhcmczKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKaW5kZXggM2NiYzU0ZmMyZDY3M2YyY2U4NjNhZTQ5NzdjNjc1ZjI4NTZiOTgw
Yy4uZTg0MTljMDdmZTcwNDlkOTUwNzQ1Mzk2YTNjOTA1ZDQyYjZjZWMyMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC01NTQsMjYgKzU1NCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAg
ICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpKSwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5s
aW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKLSAg
ICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwg
ZXRjCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAotCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsIG1fYnl0
ZWNvZGVPZmZzZXQpOwotICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJv
LCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGp1
bXAocmV0dXJuVmFsdWVHUFIpOwotICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFu
ZEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZl
cio+KGN1cnJlbnRJbnN0cnVjdGlvblszXS51LnBvaW50ZXIpOwotICAgICAgICBidWZmZXItPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShwcm9maWxlLm1fcHJvZmlsZSk7Ci0gICAgICAgIH0pOwotICAgIH0KLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYXNzZXJ0KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggN2U0OTk1MDMxMDM1NDZlMjg1MzgzMDJjOTUwNWQy
MmRhMjMyNTExZi4uMjA0NjY0ZGJhMjhlMWNmMjdmNGE2Mzk2M2M0MGJiOGUyNWM2NjZlNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtODU2
LDI2ICs4NTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogCiAgICAgdW5zaWduZWQgdGhyb3duVmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGVtaXRTdG9yZSh0aHJvd25WYWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIC8vIEZJWE1FOiBjb25zaWRlciBpbmxp
bmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGluZwotICAg
IC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBl
dGMKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4
Ci0KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgbV9ieXRl
Y29kZU9mZnNldCk7Ci0gICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAganVt
cChyZXR1cm5WYWx1ZUdQUik7Ci0gICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYg
KHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
Kj4oY3VycmVudEluc3RydWN0aW9uWzNdLnUucG9pbnRlcik7Ci0gICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKLSAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShwcm9maWxlLm1fcHJvZmlsZSk7Ci0gICAgICAgIH0pOwotICAgIH0K
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYXNzZXJ0
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBmZTI3ZDMyMzhkOWYwYzgwMDc2MmI0Mzk2ZGYy
N2NkOTA5Mzc4Y2JjLi5hYzNiZDNmMWFlY2MwNDExYjI0N2U4NjE0M2Q4ZWIyNWY5ZDcxZTMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE1MjYs
MTkgKzE1MjYsNiBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25P
cHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYnl0ZQogICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29kZUJsb2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJPU1IgZmFpbGVkIikpOwog
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoMCwgMCk7CiB9Ci0KLWNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0
ZWNvZGVJbmRleCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLQotICAgIENvZGVCbG9jayogb3B0aW1pemVk
UmVwbGFjZW1lbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+cmVwbGFjZW1lbnQoKTsKLSAgICBpZiAo
b3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihERkc6
OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29k
ZUluZGV4KSk7Ci19Ci0KICNlbmRpZgogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcnJheVZhbHVl
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IGMzNTU1MWE4ZTkyZjhkZDAzMzlm
Y2IwZmVkNmQ2ZGExY2EwZWI2ZjcuLjRjNWE5NjU1MmQzMmVmMWJjZGZhYjY0YzdiYzJkMmY2Mjdm
YTMxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0z
MTgsNyArMzE4LDYgQEAgdHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRp
b25fRVN0WlApKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMKIHR5cGVkZWYgY2hhciogKEpJ
VF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50
MzJfdCk7CiB0eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FUVop
KEV4ZWNTdGF0ZSosIGludDY0X3QsIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiAoSklUX09QRVJB
VElPTiAqUF9KSVRPcGVyYXRpb25fRURaKShFeGVjU3RhdGUqLCBkb3VibGUsIGludDMyX3QpOwot
dHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRVVpKShFeGVjU3Rh
dGUqLCB1aW50MzJfdCk7CiB0eXBlZGVmIFNsb3dQYXRoUmV0dXJuVHlwZSAoSklUX09QRVJBVElP
TiAqU3BydF9KSVRPcGVyYXRpb25fRUNsaSkoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKik7CiB0
eXBlZGVmIFN0cmluZ0ltcGwqIChKSVRfT1BFUkFUSU9OICpUX0pJVE9wZXJhdGlvbl9FSnNzKShF
eGVjU3RhdGUqLCBKU1N0cmluZyopOwogdHlwZWRlZiBKU1N0cmluZyogKEpJVF9PUEVSQVRJT04g
Kkpzc19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwpAQCAtNDAxLDcgKzQw
MCw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRl
YnVnKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKEV4
ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoKEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBXVEZfSU5URVJO
QUw7CiAjZW5kaWYKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUluZGV4KEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyQnlJZChFeGVjU3RhdGUqLCBKU0NlbGwqLCBV
bmlxdWVkU3RyaW5nSW1wbCosIGludDMyX3Qgb3B0aW9ucywgSlNDZWxsKikgV1RGX0lOVEVSTkFM
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5k
ZXggODFmMDBkYTM1NjQxMzZmZjAyMjI4M2JmMjNmNjk2OGFmOWY5YWYyNC4uNGVlYTc0MWEyZmE2
OTIwYjE0ZjAyYWRiYWM2Zjg0NzgzMGU1MTI5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xNjYxLDE4ICsxNjYxLDYgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogICAgIExM
SU5UX0VORCgpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9j
YXRjaCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotCi0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFu
ZEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZl
cio+KHBjWzNdLnUucG9pbnRlcik7Ci0gICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewotICAgICAgICBwcm9maWxlLm1fcHJvZmlsZS5tX2J1
Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dW5jaGVja2VkUihwcm9maWxlLm1fb3Bl
cmFuZCkuanNWYWx1ZSgpKTsKLSAgICB9KTsKLQotICAgIExMSU5UX0VORCgpOwotfQotCiBleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJv
cihWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0ZyYW1lKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHZtLT50b3BDYWxsRnJhbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5oCmluZGV4IGQ5OTU0ZDI2ZWI5OGNmZmJmZWE5MDA4MTBhMmU2ZDYxOTcy
MWI5ZTQuLjkzYzg5ZmJkMWZmZDY5ODJjNTUzNzllMmFlODhhY2E2Nzc3MDlhZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xMjYsNyArMTI2
LDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9oYW5kbGVfZXhjZXB0
aW9uKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2Nv
cGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jaGVja19pZl9leGNlcHRp
b25faXNfdW5jYXRjaGFibGVfYW5kX25vdGlmeV9wcm9maWxlcik7Ci1MTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk7
CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxv
d19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQppbmRleCAxNmFkMDAyOGQxODVlMmMxMDMwNzUzOGE1YWY1MTBlMjMzNmQ1OWE3Li43MGFlOGJj
NmYxODFiNzNhNGZlZjdjZjhmYTM4MTZkNWUzYzY2NzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAt
MTk5NywxMCArMTk5Nyw3IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICBzdG9yZWkgdDEsIFRhZ09m
ZnNldFtjZnIsIHQyLCA4XQogCiAgICAgdHJhY2VFeGVjdXRpb24oKSAgIyBUaGlzIG5lZWRzIHRv
IGJlIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNsb2JiZXIgdDAsIHQxLCB0MiwgdDMg
YWJvdmUuCi0KLSAgICBjYWxsT3Bjb2RlU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wcm9maWxl
X2NhdGNoKQotCi0gICAgZGlzcGF0Y2goY29uc3RleHByIG9wX2NhdGNoX2xlbmd0aCkKKyAgICBk
aXNwYXRjaCgzKQogCiBfbGxpbnRfb3BfZW5kOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KaW5kZXggODk4NWJhNDk0MjNiZjQ2OTFmZmI2YmNmMDMwOTYzNTkzMTBkNDZhYy4uOGU1ZTQ1
NzQ0NzVmYzhiNjZlNjdhOGQyNjc3YTViM2VkYWY3ODcyMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTE5NzQs
OSArMTk3NCw2IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICBzdG9yZXEgdDMsIFtjZnIsIHQyLCA4
XQogCiAgICAgdHJhY2VFeGVjdXRpb24oKQotCi0gICAgY2FsbE9wY29kZVNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfcHJvZmlsZV9jYXRjaCkKLQogICAgIGRpc3BhdGNoKGNvbnN0ZXhwciBvcF9j
YXRjaF9sZW5ndGgpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMjE1NjNhYWI2MDM2MmM3MWIzZDEyYmE4Mzk0OWE5NWQ5Njg0N2ZhYS4uMDUyNjk1MTQx
NjAyOGU5MjVhMzc4NDU4YWYxZDU5OWU5ZWYxMzc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMzUsNyArMzM1LDYgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2
ODAwNDQ5NzM5IC8qIFN5bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3ltYm9sSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFC
MDI0MjY4MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTc5NTIxMjAyMUY0MjU4ODgwMEJENjQyMSAvKiBTaW5nbGVSb290R3Jh
cGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2luZ2xlUm9vdEdyYXBoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRkVDNkFFMUVCMjJBQzYwMERBREUzNiAv
KiBVVUlELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVVSUQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVVJRC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y3MjM5MUQ3ODgxMTkwMDY3NEUyNiAvKiBCcmln
YW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJyaWdhbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0MSw3ICs5NDAsNiBAQAogCQkJCTE0Njk0MTk0MTZF
QUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQx
MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLAogCQkJCTE0Njk0MTk1MTZFQUFGRjgw
MDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCi0JCQkJNzk1MjEyMDIxRjQyNTg4ODAw
QkQ2NDIxIC8qIFNpbmdsZVJvb3RHcmFwaC5oICovLAogCQkJCTFBMzUyNEFBMUQ2M0EyRkYwMDMx
NzI5QiAvKiBTY29wZS5oICovLAogCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29w
ZWRMYW1iZGEuaCAqLywKIAkJCQkwRjY2QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5j
cHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFwaC5oIGIvU291
cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGguaAppbmRleCAzYWM3MDJkOWM3MjVkMThkYjdkNGNk
MTZlYWQwZGQzMWE2MmY1Mjg3Li42NTMzN2JhZjE4NWUyZmJjYzEwMGIxMzRhN2JjYzZiYmM1MmEz
Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFwaC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9TaW5nbGVSb290R3Jh
cGguaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpA
QCAtMzksOSArMzgsMTMzIEBAIGNsYXNzIEJhY2t3YXJkc0dyYXBoIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShCYWNrd2FyZHNHcmFwaCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgdXNpbmcgTm9kZSA9IFNpbmdsZVJvb3RHcmFwaE5vZGU8R3JhcGg+Owot
ICAgIHVzaW5nIFNldCA9IFNpbmdsZVJvb3RHcmFwaFNldDxHcmFwaD47Ci0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IFNpbmdsZVJvb3RNYXA8VCwgR3JhcGg+OworICAgIC8v
IFdlIHVzZSAiI2VuZCIgdG8gcmVmZXIgdG8gdGhlIHN5bnRoZXRpYyByb290IHdlIGhhdmUgY3Jl
YXRlZC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogcm9vdE5hbWUoKSB7IHJldHVybiAiI2VuZCI7
IH07CisKKyAgICBjbGFzcyBOb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vZGUodHlwZW5h
bWUgR3JhcGg6Ok5vZGUgbm9kZSA9IHR5cGVuYW1lIEdyYXBoOjpOb2RlKCkpCisgICAgICAgICAg
ICA6IG1fbm9kZShub2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
Tm9kZSByb290KCkKKyAgICAgICAgeworICAgICAgICAgICAgTm9kZSByZXN1bHQ7CisgICAgICAg
ICAgICByZXN1bHQubV9ub2RlID0gMDsKKyAgICAgICAgICAgIHJlc3VsdC5tX2lzUm9vdCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE5vZGUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9kZQorICAgICAgICAgICAgICAgICYmIG1f
aXNSb290ID09IG90aGVyLm1faXNSb290OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IE5vZGUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gTm9kZSgpOyB9CisKKyAgICAg
ICAgYm9vbCBpc1Jvb3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9p
c1Jvb3Q7CisgICAgICAgIH0KKworICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlbmFt
ZSBHcmFwaDo6Tm9kZSBtX25vZGU7CisgICAgICAgIGJvb2wgbV9pc1Jvb3QgeyBmYWxzZSB9Owor
ICAgIH07CisKKyAgICBjbGFzcyBTZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2V0KCkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFkZChjb25zdCBOb2Rl
JiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9oYXNSb290LCB0cnVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX3NldC5hZGQobm9kZS5ub2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCByZW1vdmUoY29uc3QgTm9kZSYgbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1faGFz
Um9vdCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIG1fc2V0LnJlbW92ZShub2RlLm5vZGUo
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IE5vZGUmIG5vZGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtX2hhc1Jvb3Q7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnMo
bm9kZS5ub2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2hhc1Jvb3QpCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KHJvb3ROYW1lKCksICIgIik7CisgICAgICAgICAgICBvdXQu
cHJpbnQobV9zZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IHR5cGVuYW1lIEdyYXBoOjpTZXQgbV9zZXQ7CisgICAgICAgIGJvb2wgbV9oYXNSb290IHsgZmFs
c2UgfTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBNYXAg
eworICAgIHB1YmxpYzoKKyAgICAgICAgTWFwKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAgIDog
bV9tYXAoZ3JhcGgudGVtcGxhdGUgbmV3TWFwPFQ+KCkpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX21hcC5jbGVh
cigpOworICAgICAgICAgICAgbV9yb290ID0gVCgpOworICAgICAgICB9CisKKyAgICAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCkgKyAxOyB9CisKKyAgICAgICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
aW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcm9vdDsKKyAgICAgICAgICAgIHJldHVy
biBtX21hcFtpbmRleCAtIDFdOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVCYgb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAo
KmNvbnN0X2Nhc3Q8TWFwKj4odGhpcykpW2luZGV4XTsKKyAgICAgICAgfQorCisgICAgICAgIFQm
IG9wZXJhdG9yW10oY29uc3QgTm9kZSYgbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcm9vdDsKKyAgICAgICAg
ICAgIHJldHVybiBtX21hcFtub2RlLm5vZGUoKV07CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBUJiBvcGVyYXRvcltdKGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8TWFwKj4odGhpcykpW25vZGVdOworICAgICAgICB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjp0ZW1wbGF0
ZSBNYXA8VD4gbV9tYXA7CisgICAgICAgIFQgbV9yb290OworICAgIH07CisKICAgICB0eXBlZGVm
IFZlY3RvcjxOb2RlLCA0PiBMaXN0OwogCiAgICAgQmFja3dhcmRzR3JhcGgoR3JhcGgmIGdyYXBo
KQpAQCAtMTMyLDcgKzI1NSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFub2RlKQogICAgICAg
ICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS5pc1Jvb3Qo
KSkKLSAgICAgICAgICAgIG91dC5wcmludChOb2RlOjpyb290TmFtZSgpKTsKKyAgICAgICAgICAg
IG91dC5wcmludChyb290TmFtZSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0LnBy
aW50KG1fZ3JhcGguZHVtcChub2RlLm5vZGUoKSkpOwogICAgICAgICByZXR1cm4gb3V0LnRvQ1N0
cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oIGIvU291cmNl
L1dURi93dGYvRG9taW5hdG9ycy5oCmluZGV4IDdiZjJlYWUzNzJmOTcyYzgxODc5ZWQ3YTc0YTUz
NmNkMjdlMGEwYjMuLjdjNzYwZGMwNDE1MTFkNmE4ZDBjOTA5ODI4NzBlMWNhNWIyMjhhZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9Eb21pbmF0b3JzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw4ICs0MCw2IEBAIG5hbWVzcGFjZSBXVEYgewog
dGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CiBjbGFzcyBEb21pbmF0b3JzIHsKIHB1YmxpYzoKLSAg
ICB1c2luZyBMaXN0ID0gdHlwZW5hbWUgR3JhcGg6Okxpc3Q7Ci0KICAgICBEb21pbmF0b3JzKEdy
YXBoJiBncmFwaCwgYm9vbCBzZWxmQ2hlY2sgPSBmYWxzZSkKICAgICAgICAgOiBtX2dyYXBoKGdy
YXBoKQogICAgICAgICAsIG1fZGF0YShncmFwaC50ZW1wbGF0ZSBuZXdNYXA8QmxvY2tEYXRhPigp
KQpAQCAtNDksNiArNDcsOCBAQCBwdWJsaWM6CiAgICAgICAgIExlbmdhdWVyVGFyamFuIGxlbmdh
dWVyVGFyamFuKG1fZ3JhcGgpOwogICAgICAgICBsZW5nYXVlclRhcmphbi5jb21wdXRlKCk7CiAK
KyAgICAgICAgbV9kYXRhID0gbV9ncmFwaC50ZW1wbGF0ZSBuZXdNYXA8QmxvY2tEYXRhPigpOwor
ICAgIAogICAgICAgICAvLyBGcm9tIGhlcmUgd2Ugd2FudCB0byBidWlsZCBhIHNwYW5uaW5nIHRy
ZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93bndhcmQgbGlua3MgYW5kIHdlIHdhbnQKICAgICAg
ICAgLy8gdG8gZG8gYSBzZWFyY2ggb3ZlciB0aGlzIHRyZWUgdG8gY29tcHV0ZSBwcmUgYW5kIHBv
c3QgbnVtYmVycyB0aGF0IGNhbiBiZSB1c2VkIGZvciBkb21pbmFuY2UKICAgICAgICAgLy8gdGVz
dHMuCkBAIC0yNDAsNyArMjQwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWlu
YW5jZUZyb250aWVyT2YoY29uc3QgTGlzdCYgZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0
IHR5cGVuYW1lIEdyYXBoOjpMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKICAgICAgICAgZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVy
T2YoCiAgICAgICAgICAgICBmcm9tLApAQCAtMjU1LDcgKzI1NSw3IEBAIHB1YmxpYzoKICAgICAv
LyBVc2VmdWwgZm9yIGNvbXB1dGluZyBwcnVuZWQgU1NBIGZvcm0uCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbEJsb2Nrc0luUHJ1bmVkSXRlcmF0ZWREb21p
bmFuY2VGcm9udGllck9mKAotICAgICAgICBjb25zdCBMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgICAgICBjb25zdCB0eXBlbmFtZSBHcmFwaDo6TGlzdCYgZnJvbSwgY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQg
c2V0OwogICAgICAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZklt
cGwoCkBAIC0yNjcsNyArMjY3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfSk7CiAgICAgfQog
ICAgIAotICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KGNvbnN0IExpc3QmIGZyb20pIGNvbnN0CisgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBpdGVyYXRl
ZERvbWluYW5jZUZyb250aWVyT2YoY29uc3QgdHlwZW5hbWUgR3JhcGg6Okxpc3QmIGZyb20pIGNv
bnN0CiAgICAgewogICAgICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IHJlc3VsdDsKICAgICAgICAg
Zm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKApAQCAtNzEyLDkg
KzcxMiw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
ICAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgK
LSAgICAgICAgY29uc3QgTGlzdCYgZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QK
KyAgICAgICAgY29uc3QgdHlwZW5hbWUgR3JhcGg6Okxpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0CiAgICAgewotICAgICAgICBMaXN0IHdvcmtsaXN0ID0gZnJvbTsKKyAg
ICAgICAgdHlwZW5hbWUgR3JhcGg6Okxpc3Qgd29ya2xpc3QgPSBmcm9tOwogICAgICAgICB3aGls
ZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5v
ZGUgYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICAgICAgZm9yQWxsQmxvY2tz
SW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Np
bmdsZVJvb3RHcmFwaC5oIGIvU291cmNlL1dURi93dGYvU2luZ2xlUm9vdEdyYXBoLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjFiNjUzZjM3YzZjYWY0ODJmZWMwM2FkZmQwMWU4
ZGU3MmU1MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dURi93dGYvU2luZ2xlUm9vdEdyYXBoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIFdURl9TaW5nbGVSb290R3JhcGhfaAotI2RlZmluZSBXVEZfU2luZ2xlUm9vdEdyYXBo
X2gKLQotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0dyYXBoTm9k
ZVdvcmtsaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEdyYXBoPgotY2xhc3MgU2luZ2xlUm9vdEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgLy8gV2Ug
dXNlICIjcm9vdCIgdG8gcmVmZXIgdG8gdGhlIHN5bnRoZXRpYyByb290IHdlIGhhdmUgY3JlYXRl
ZC4KLSAgICBzdGF0aWMgY29uc3QgY2hhciogcm9vdE5hbWUoKSB7IHJldHVybiAiI3Jvb3QiOyB9
OwotCi0gICAgU2luZ2xlUm9vdEdyYXBoTm9kZSh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlID0g
dHlwZW5hbWUgR3JhcGg6Ok5vZGUoKSkKLSAgICAgICAgOiBtX25vZGUobm9kZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFNpbmdsZVJvb3RHcmFwaE5vZGUgcm9vdCgpCi0gICAgewotICAg
ICAgICBTaW5nbGVSb290R3JhcGhOb2RlIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fbm9kZSA9
IDA7Ci0gICAgICAgIHJlc3VsdC5tX2lzUm9vdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbmdsZVJvb3RHcmFwaE5v
ZGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZSA9PSBvdGhlci5t
X25vZGUKLSAgICAgICAgICAgICYmIG1faXNSb290ID09IG90aGVyLm1faXNSb290OwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaW5nbGVSb290R3JhcGhOb2RlJiBvdGhlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0K
LSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gU2lu
Z2xlUm9vdEdyYXBoTm9kZSgpOyB9Ci0KLSAgICBib29sIGlzUm9vdCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9pc1Jvb3Q7Ci0gICAgfQotCi0gICAgdHlwZW5hbWUgR3JhcGg6Ok5v
ZGUgbm9kZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoIW1faXNSb290KTsKLSAgICAg
ICAgcmV0dXJuIG1fbm9kZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdHlwZW5hbWUgR3JhcGg6
Ok5vZGUgbV9ub2RlOwotICAgIGJvb2wgbV9pc1Jvb3QgeyBmYWxzZSB9OwotfTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEdyYXBoPgotY2xhc3MgU2luZ2xlUm9vdEdyYXBoU2V0IHsKLSAgICB1c2lu
ZyBOb2RlID0gU2luZ2xlUm9vdEdyYXBoTm9kZTxHcmFwaD47Ci1wdWJsaWM6Ci0gICAgU2luZ2xl
Um9vdEdyYXBoU2V0KCkgPSBkZWZhdWx0OwotICAgIAotICAgIGJvb2wgYWRkKGNvbnN0IE5vZGUm
IG5vZGUpCi0gICAgewotICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKLSAgICAgICAgICAgIHJl
dHVybiBjaGVja0FuZFNldChtX2hhc1Jvb3QsIHRydWUpOwotICAgICAgICByZXR1cm4gbV9zZXQu
YWRkKG5vZGUubm9kZSgpKTsKLSAgICB9Ci0KLSAgICBib29sIHJlbW92ZShjb25zdCBOb2RlJiBu
b2RlKQotICAgIHsKLSAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCi0gICAgICAgICAgICByZXR1
cm4gY2hlY2tBbmRTZXQobV9oYXNSb290LCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBtX3NldC5y
ZW1vdmUobm9kZS5ub2RlKCkpOwotICAgIH0KLQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgTm9k
ZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQotICAgICAgICAgICAg
cmV0dXJuIG1faGFzUm9vdDsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKG5vZGUubm9k
ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2hhc1Jvb3QpCi0gICAgICAgICAgICBvdXQucHJpbnQoTm9kZTo6
cm9vdE5hbWUoKSwgIiAiKTsKLSAgICAgICAgb3V0LnByaW50KG1fc2V0KTsKLSAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgbV9zZXQ7Ci0gICAgYm9vbCBtX2hh
c1Jvb3QgeyBmYWxzZSB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgR3Jh
cGg+Ci1jbGFzcyBTaW5nbGVSb290TWFwIHsKLSAgICB1c2luZyBOb2RlID0gU2luZ2xlUm9vdEdy
YXBoTm9kZTxHcmFwaD47Ci1wdWJsaWM6Ci0gICAgU2luZ2xlUm9vdE1hcChHcmFwaCYgZ3JhcGgp
Ci0gICAgICAgIDogbV9tYXAoZ3JhcGgudGVtcGxhdGUgbmV3TWFwPFQ+KCkpCi0gICAgewotICAg
IH0KLQotICAgIFNpbmdsZVJvb3RNYXAoU2luZ2xlUm9vdE1hcCYmIG90aGVyKQotICAgICAgICA6
IG1fbWFwKFdURk1vdmUob3RoZXIubV9tYXApKQotICAgICAgICAsIG1fcm9vdChXVEZNb3ZlKG90
aGVyLm1fcm9vdCkpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAg
ICAgICAgbV9tYXAuY2xlYXIoKTsKLSAgICAgICAgbV9yb290ID0gVCgpOwotICAgIH0KLQotICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpICsgMTsgfQotCi0gICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIWluZGV4KQot
ICAgICAgICAgICAgcmV0dXJuIG1fcm9vdDsKLSAgICAgICAgcmV0dXJuIG1fbWFwW2luZGV4IC0g
MV07Ci0gICAgfQotCi0gICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gKCpjb25zdF9jYXN0PFNpbmdsZVJvb3RNYXAqPih0aGlz
KSlbaW5kZXhdOwotICAgIH0KLQotICAgIFQmIG9wZXJhdG9yW10oY29uc3QgTm9kZSYgbm9kZSkK
LSAgICB7Ci0gICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQotICAgICAgICAgICAgcmV0dXJuIG1f
cm9vdDsKLSAgICAgICAgcmV0dXJuIG1fbWFwW25vZGUubm9kZSgpXTsKLSAgICB9Ci0KLSAgICBj
b25zdCBUJiBvcGVyYXRvcltdKGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gKCpjb25zdF9jYXN0PFNpbmdsZVJvb3RNYXAqPih0aGlzKSlbbm9kZV07Ci0gICAg
fQotICAgIAotcHJpdmF0ZToKLSAgICB0eXBlbmFtZSBHcmFwaDo6dGVtcGxhdGUgTWFwPFQ+IG1f
bWFwOwotICAgIFQgbV9yb290OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+Ci1jbGFz
cyBTaW5nbGVSb290R3JhcGggewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNpbmdsZVJvb3RH
cmFwaCk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0KLSAgICB1c2lu
ZyBOb2RlID0gU2luZ2xlUm9vdEdyYXBoTm9kZTxHcmFwaD47Ci0gICAgdXNpbmcgU2V0ID0gU2lu
Z2xlUm9vdEdyYXBoU2V0PEdyYXBoPjsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gU2luZ2xlUm9vdE1hcDxULCBHcmFwaD47Ci0gICAgdXNpbmcgTGlzdCA9IFZlY3RvcjxO
b2RlLCA0PjsKLQotICAgIFNpbmdsZVJvb3RHcmFwaChHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDog
bV9ncmFwaChncmFwaCkKLSAgICB7Ci0gICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUg
cmVhbFJvb3QgOiBtX2dyYXBoLnJvb3RzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
LnByZWRlY2Vzc29ycyhyZWFsUm9vdCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIG1fcm9vdFN1
Y2Nlc3Nvckxpc3QuYXBwZW5kKHJlYWxSb290KTsKLSAgICAgICAgICAgIG1fcm9vdFN1Y2Nlc3Nv
clNldC5hZGQocmVhbFJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChtX3Jvb3RTdWNj
ZXNzb3JMaXN0LnNpemUoKSk7Ci0gICAgfQotCi0gICAgTm9kZSByb290KCkgY29uc3QgeyByZXR1
cm4gTm9kZTo6cm9vdCgpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIE1hcDxU
PiBuZXdNYXAoKSB7IHJldHVybiBNYXA8VD4obV9ncmFwaCk7IH0KLQotICAgIExpc3Qgc3VjY2Vz
c29ycyhjb25zdCBOb2RlJiBub2RlKSBjb25zdAotICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDb25z
aXN0ZW50KCk7Ci0KLSAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9yb290U3VjY2Vzc29yTGlzdDsKLSAgICAgICAgTGlzdCByZXN1bHQ7Ci0gICAgICAgIGZv
ciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgc3VjY2Vzc29yIDogbV9ncmFwaC5zdWNjZXNzb3JzKG5v
ZGUubm9kZSgpKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBMaXN0IHByZWRlY2Vzc29ycyhjb25zdCBO
b2RlJiBub2RlKSBjb25zdAotICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDb25zaXN0ZW50KCk7Ci0K
LSAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCi0gICAgICAgICAgICByZXR1cm4gTGlzdCB7IH07
Ci0KLSAgICAgICAgaWYgKG1fcm9vdFN1Y2Nlc3NvclNldC5jb250YWlucyhub2RlLm5vZGUoKSkp
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLnByZWRlY2Vzc29ycyhub2RlLm5vZGUoKSku
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHJldHVybiBMaXN0IHsgcm9vdCgpIH07Ci0gICAgICAg
IH0KLQotICAgICAgICBMaXN0IHJlc3VsdDsKLSAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBwcmVkZWNlc3NvciA6IG1fZ3JhcGgucHJlZGVjZXNzb3JzKG5vZGUubm9kZSgpKSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJlZGVjZXNzb3IpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGluZGV4KGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gbV9ncmFwaC5pbmRleChub2RlLm5vZGUoKSkgKyAxOwotICAgIH0K
LQotICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
ICghaW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gcm9vdCgpOwotICAgICAgICByZXR1cm4gbV9n
cmFwaC5ub2RlKGluZGV4IC0gMSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbnVtTm9kZXMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubnVtTm9kZXMoKSArIDE7Ci0gICAg
fQotCi0gICAgQ1N0cmluZyBkdW1wKE5vZGUgbm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFN0
cmluZ1ByaW50U3RyZWFtIG91dDsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgb3V0
LnByaW50KCI8bnVsbD4iKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5pc1Jvb3QoKSkKLSAgICAg
ICAgICAgIG91dC5wcmludChOb2RlOjpyb290TmFtZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgb3V0LnByaW50KG1fZ3JhcGguZHVtcChub2RlLm5vZGUoKSkpOwotICAgICAgICByZXR1
cm4gb3V0LnRvQ1N0cmluZygpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU5v
ZGVzKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSBub2RlID0gdGhpcy0+bm9kZShpKTsKLSAg
ICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIG91dC5wcmludChkdW1wKG5vZGUpLCAiOlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQo
IiAgICBQcmVkczogIik7Ci0gICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAg
ICAgICBmb3IgKE5vZGUgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMobm9kZSkpCi0gICAgICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkdW1wKHByZWRlY2Vzc29yKSk7Ci0gICAgICAgICAg
ICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAgICBTdWNjczogIik7
Ci0gICAgICAgICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOwotICAgICAgICAgICAgZm9yIChO
b2RlIHN1Y2Nlc3NvciA6IHN1Y2Nlc3NvcnMobm9kZSkpCi0gICAgICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBkdW1wKHN1Y2Nlc3NvcikpOwotICAgICAgICAgICAgb3V0LnByaW50KCJcbiIp
OwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
c3NlcnRJc0NvbnNpc3RlbnQoKSBjb25zdAotICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIC8vIFdlIGV4cGVjdCB0aGUgcm9vdHMoKSBmdW5jdGlvbiB0byBiZSBpZGVtcG90ZW50
IHdoaWxlIHdlJ3JlIGFsaXZlIHNvIHdlIGNhbiBjYWNoZQotICAgICAgICAvLyB0aGUgcmVzdWx0
IGluIHRoZSBjb25zdHJ1Y3Rvci4gSWYgYSB1c2VyIG9mIHRoaXMgY2hhbmdlcyB0aGUgcmVzdWx0
IG9mIGl0cyByb290cygpCi0gICAgICAgIC8vIGZ1bmN0aW9uLCBpdCdzIGV4cGVjdGVkIHRoYXQg
dGhlIHVzZXIgd2lsbCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICAg
ICAgTGlzdCByb290U3VjY2Vzc29yTGlzdDsKLSAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6
Tm9kZSByZWFsUm9vdCA6IG1fZ3JhcGgucm9vdHMoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1f
Z3JhcGgucHJlZGVjZXNzb3JzKHJlYWxSb290KS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcm9v
dFN1Y2Nlc3Nvckxpc3QuYXBwZW5kKHJlYWxSb290KTsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlQocm9vdFN1Y2Nlc3Nvckxpc3Quc2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUKHJvb3RTdWNjZXNz
b3JMaXN0ID09IG1fcm9vdFN1Y2Nlc3Nvckxpc3QpOwotI2VuZGlmCi0gICAgfQotCi0gICAgR3Jh
cGgmIG1fZ3JhcGg7Ci0gICAgTGlzdCBtX3Jvb3RTdWNjZXNzb3JMaXN0OwotICAgIHR5cGVuYW1l
IEdyYXBoOjpTZXQgbV9yb290U3VjY2Vzc29yU2V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RG
Ci0KLXVzaW5nIFdURjo6U2luZ2xlUm9vdEdyYXBoOwotCi0jZW5kaWYgLy8gV1RGX1NpbmdsZVJv
b3RHcmFwaF9oCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDZmMzIwNTVmMGI2MTI3NTZkNzNlYzUwOTJhNzZiYjNjMTI1NjljMWMuLjg4MjI2
YWMwZGU1NzViMWI4ZmQ1ZTRmZWNkZjI0MGI4YjIwMjA4OTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTct
MDgtMjQgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjExMTksIHIyMjExMjQsIGFuZCByMjIxMTQzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1OTczCisK
KyAgICAgICAgIkkgdGhpbmsgaXQgcmVncmVzc2VkIEpTQmVuY2ggYnkgMjAlIiAoUmVxdWVzdGVk
IGJ5IHNhYW15am9vbgorICAgICAgICBvbiAjd2Via2l0KS4KKworICAgICAgICBSZXZlcnRlZCBj
aGFuZ2VzZXRzOgorCisgICAgICAgICJTdXBwb3J0IGNvbXBpbGluZyBjYXRjaCBpbiB0aGUgREZH
IgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NTkw
CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIyMTExOQorCisgICAg
ICAgICJVbnJldmlld2VkLCBidWlsZCBmaXggaW4gR1RLIHBvcnQiCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ1OTAKKyAgICAgICAgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjIxMTI0CisKKyAgICAgICAgIkRGRzo6SklUQ29kZTo6
b3NyRW50cnkgc2hvdWxkIGdldCBzb3J0ZWQgc2luY2Ugd2UgcGVyZm9ybSBhCisgICAgICAgIGJp
bmFyeSBzZWFyY2ggb24gaXQiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzU4OTMKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMjIxMTQzCisKIDIwMTctMDgtMjQgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFJlZ0V4cCAiZG90QWxsIiBmbGFnCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWx0YS1ibHVlLXRyeS1jYXRjaC5qcyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbHRhLWJsdWUtdHJ5LWNhdGNoLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzkxY2ZjM2YwMjgwNjVkNWQyNTVmNGI5NTRiYjQwNDk2
ZTZjMTBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbHRhLWJsdWUtdHJ5LWNhdGNoLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsOTA1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA4IHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQgMTk5NiBKb2huIE1hbG9u
ZXkgYW5kIE1hcmlvIFdvbGN6a28uCi0KLS8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0vLyBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQot
Ly8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IKLS8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0vLwot
Ly8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLS8vCi0vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLy8gYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLS8vIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0x
MzA3ICBVU0EKLQotCi0vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZWx0YUJsdWUgYmVu
Y2htYXJrIGlzIGRlcml2ZWQKLS8vIGZyb20gdGhlIFNtYWxsdGFsayBpbXBsZW1lbnRhdGlvbiBi
eSBKb2huIE1hbG9uZXkgYW5kIE1hcmlvCi0vLyBXb2xjemtvLiBTb21lIHBhcnRzIGhhdmUgYmVl
biB0cmFuc2xhdGVkIGRpcmVjdGx5LCB3aGVyZWFzCi0vLyBvdGhlcnMgaGF2ZSBiZWVuIG1vZGlm
aWVkIG1vcmUgYWdncmVzaXZlbHkgdG8gbWFrZSBpdCBmZWVsCi0vLyBtb3JlIGxpa2UgYSBKYXZh
U2NyaXB0IHByb2dyYW0uCi0KLWxldCBfX2V4Y2VwdGlvbkNvdW50ZXIgPSAwOwotZnVuY3Rpb24g
ZXhjZXB0aW9uKCkgewotICAgIGlmIChfX2V4Y2VwdGlvbkNvdW50ZXIrKyAlIDM1ID09PSAwKQot
ICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbkNvdW50ZXI7Ci19Ci0KLQotLyoqCi0gKiBBIEphdmFT
Y3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIERlbHRhQmx1ZSBjb25zdHJhaW50LXNvbHZpbmcK
LSAqIGFsZ29yaXRobSwgYXMgZGVzY3JpYmVkIGluOgotICoKLSAqICJUaGUgRGVsdGFCbHVlIEFs
Z29yaXRobTogQW4gSW5jcmVtZW50YWwgQ29uc3RyYWludCBIaWVyYXJjaHkgU29sdmVyIgotICog
ICBCam9ybiBOLiBGcmVlbWFuLUJlbnNvbiBhbmQgSm9obiBNYWxvbmV5Ci0gKiAgIEphbnVhcnkg
MTk5MCBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLAotICogICBhbHNvIGF2YWlsYWJsZSBhcyBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24gVFIgODktMDgtMDYuCi0gKgotICogQmV3YXJlOiB0aGlz
IGJlbmNobWFyayBpcyB3cml0dGVuIGluIGEgZ3JvdGVzcXVlIHN0eWxlIHdoZXJlCi0gKiB0aGUg
Y29uc3RyYWludCBtb2RlbCBpcyBidWlsdCBieSBzaWRlLWVmZmVjdHMgZnJvbSBjb25zdHJ1Y3Rv
cnMuCi0gKiBJJ3ZlIGtlcHQgaXQgdGhpcyB3YXkgdG8gYXZvaWQgZGV2aWF0aW5nIHRvbyBtdWNo
IGZyb20gdGhlIG9yaWdpbmFsCi0gKiBpbXBsZW1lbnRhdGlvbi4KLSAqLwotCi0KLS8qIC0tLSBP
IGIgaiBlIGMgdCAgIE0gbyBkIGUgbCAtLS0gKi8KLQotT2JqZWN0LmRlZmluZVByb3BlcnR5KE9i
amVjdC5wcm90b3R5cGUsICJpbmhlcml0c0Zyb20iLCB7Ci0gIAotICB2YWx1ZTogZnVuY3Rpb24g
KHNodXBlcikgewotICAgIGZ1bmN0aW9uIEluaGVyaXRlcigpIHsgfQotICAgIEluaGVyaXRlci5w
cm90b3R5cGUgPSBzaHVwZXIucHJvdG90eXBlOwotICAgIHRoaXMucHJvdG90eXBlID0gbmV3IElu
aGVyaXRlcigpOwotICAgIHRoaXMuc3VwZXJDb25zdHJ1Y3RvciA9IHNodXBlcjsKLSAgfQotfSk7
Ci0KLWZ1bmN0aW9uIE9yZGVyZWRDb2xsZWN0aW9uKCkgewotICB0aGlzLmVsbXMgPSBuZXcgQXJy
YXkoKTsKLX0KLQotT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChl
bG0pIHsKLSAgdGhpcy5lbG1zLnB1c2goZWxtKTsKLX0KLQotT3JkZXJlZENvbGxlY3Rpb24ucHJv
dG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4KSB7Ci0gIHJldHVybiB0aGlzLmVsbXNbaW5kZXhd
OwotfQotCi1PcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsK
LSAgcmV0dXJuIHRoaXMuZWxtcy5sZW5ndGg7Ci19Ci0KLU9yZGVyZWRDb2xsZWN0aW9uLnByb3Rv
dHlwZS5yZW1vdmVGaXJzdCA9IGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJuIHRoaXMuZWxtcy5wb3Ao
KTsKLX0KLQotT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChl
bG0pIHsKLSAgdmFyIGluZGV4ID0gMCwgc2tpcHBlZCA9IDA7Ci0gIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5lbG1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgdmFyIHZhbHVlID0gdGhpcy5lbG1zW2ld
OwotICAgIGlmICh2YWx1ZSAhPSBlbG0pIHsKLSAgICAgIHRoaXMuZWxtc1tpbmRleF0gPSB2YWx1
ZTsKLSAgICAgIGluZGV4Kys7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNraXBwZWQrKzsKLSAgICB9
Ci0gICAgdHJ5IHsgZXhjZXB0aW9uKCk7IH0gY2F0Y2goZSkgeyB9Ci0gIH0KLSAgZm9yICh2YXIg
aSA9IDA7IGkgPCBza2lwcGVkOyBpKyspIHsKLSAgICB0aGlzLmVsbXMucG9wKCk7Ci0gICAgdHJ5
IHsgZXhjZXB0aW9uKCk7IH0gY2F0Y2goZSkgeyB9Ci0gIH0KLX0KLQotLyogLS0tICoKLSAqIFMg
dCByIGUgbiBnIHQgaAotICogLS0tICovCi0KLS8qKgotICogU3RyZW5ndGhzIGFyZSB1c2VkIHRv
IG1lYXN1cmUgdGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2YgY29uc3RyYWludHMuCi0gKiBOZXcg
c3RyZW5ndGhzIG1heSBiZSBpbnNlcnRlZCBpbiB0aGUgc3RyZW5ndGggaGllcmFyY2h5IHdpdGhv
dXQKLSAqIGRpc3J1cHRpbmcgY3VycmVudCBjb25zdHJhaW50cy4gIFN0cmVuZ3RocyBjYW5ub3Qg
YmUgY3JlYXRlZCBvdXRzaWRlCi0gKiB0aGlzIGNsYXNzLCBzbyBwb2ludGVyIGNvbXBhcmlzb24g
Y2FuIGJlIHVzZWQgZm9yIHZhbHVlIGNvbXBhcmlzb24uCi0gKi8KLWZ1bmN0aW9uIFN0cmVuZ3Ro
KHN0cmVuZ3RoVmFsdWUsIG5hbWUpIHsKLSAgdGhpcy5zdHJlbmd0aFZhbHVlID0gc3RyZW5ndGhW
YWx1ZTsKLSAgdGhpcy5uYW1lID0gbmFtZTsKLX0KLQotU3RyZW5ndGguc3Ryb25nZXIgPSBmdW5j
dGlvbiAoczEsIHMyKSB7Ci0gIHJldHVybiBzMS5zdHJlbmd0aFZhbHVlIDwgczIuc3RyZW5ndGhW
YWx1ZTsKLX0KLQotU3RyZW5ndGgud2Vha2VyID0gZnVuY3Rpb24gKHMxLCBzMikgewotICByZXR1
cm4gczEuc3RyZW5ndGhWYWx1ZSA+IHMyLnN0cmVuZ3RoVmFsdWU7Ci19Ci0KLVN0cmVuZ3RoLndl
YWtlc3RPZiA9IGZ1bmN0aW9uIChzMSwgczIpIHsKLSAgcmV0dXJuIHRoaXMud2Vha2VyKHMxLCBz
MikgPyBzMSA6IHMyOwotfQotCi1TdHJlbmd0aC5zdHJvbmdlc3QgPSBmdW5jdGlvbiAoczEsIHMy
KSB7Ci0gIHJldHVybiB0aGlzLnN0cm9uZ2VyKHMxLCBzMikgPyBzMSA6IHMyOwotfQotCi1TdHJl
bmd0aC5wcm90b3R5cGUubmV4dFdlYWtlciA9IGZ1bmN0aW9uICgpIHsKLSAgc3dpdGNoICh0aGlz
LnN0cmVuZ3RoVmFsdWUpIHsKLSAgICBjYXNlIDA6IHJldHVybiBTdHJlbmd0aC5XRUFLRVNUOwot
ICAgIGNhc2UgMTogcmV0dXJuIFN0cmVuZ3RoLldFQUtfREVGQVVMVDsKLSAgICBjYXNlIDI6IHJl
dHVybiBTdHJlbmd0aC5OT1JNQUw7Ci0gICAgY2FzZSAzOiByZXR1cm4gU3RyZW5ndGguU1RST05H
X0RFRkFVTFQ7Ci0gICAgY2FzZSA0OiByZXR1cm4gU3RyZW5ndGguUFJFRkVSUkVEOwotICAgIGNh
c2UgNTogcmV0dXJuIFN0cmVuZ3RoLlJFUVVJUkVEOwotICB9Ci19Ci0KLS8vIFN0cmVuZ3RoIGNv
bnN0YW50cy4KLVN0cmVuZ3RoLlJFUVVJUkVEICAgICAgICA9IG5ldyBTdHJlbmd0aCgwLCAicmVx
dWlyZWQiKTsKLVN0cmVuZ3RoLlNUT05HX1BSRUZFUlJFRCA9IG5ldyBTdHJlbmd0aCgxLCAic3Ry
b25nUHJlZmVycmVkIik7Ci1TdHJlbmd0aC5QUkVGRVJSRUQgICAgICAgPSBuZXcgU3RyZW5ndGgo
MiwgInByZWZlcnJlZCIpOwotU3RyZW5ndGguU1RST05HX0RFRkFVTFQgID0gbmV3IFN0cmVuZ3Ro
KDMsICJzdHJvbmdEZWZhdWx0Iik7Ci1TdHJlbmd0aC5OT1JNQUwgICAgICAgICAgPSBuZXcgU3Ry
ZW5ndGgoNCwgIm5vcm1hbCIpOwotU3RyZW5ndGguV0VBS19ERUZBVUxUICAgID0gbmV3IFN0cmVu
Z3RoKDUsICJ3ZWFrRGVmYXVsdCIpOwotU3RyZW5ndGguV0VBS0VTVCAgICAgICAgID0gbmV3IFN0
cmVuZ3RoKDYsICJ3ZWFrZXN0Iik7Ci0KLS8qIC0tLSAqCi0gKiBDIG8gbiBzIHQgciBhIGkgbiB0
Ci0gKiAtLS0gKi8KLQotLyoqCi0gKiBBbiBhYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYSBz
eXN0ZW0tbWFpbnRhaW5hYmxlIHJlbGF0aW9uc2hpcAotICogKG9yICJjb25zdHJhaW50IikgYmV0
d2VlbiBhIHNldCBvZiB2YXJpYWJsZXMuIEEgY29uc3RyYWludCBzdXBwbGllcwotICogYSBzdHJl
bmd0aCBpbnN0YW5jZSB2YXJpYWJsZTsgY29uY3JldGUgc3ViY2xhc3NlcyBwcm92aWRlIGEgbWVh
bnMKLSAqIG9mIHN0b3JpbmcgdGhlIGNvbnN0cmFpbmVkIHZhcmlhYmxlcyBhbmQgb3RoZXIgaW5m
b3JtYXRpb24gcmVxdWlyZWQKLSAqIHRvIHJlcHJlc2VudCBhIGNvbnN0cmFpbnQuCi0gKi8KLWZ1
bmN0aW9uIENvbnN0cmFpbnQoc3RyZW5ndGgpIHsKLSAgdGhpcy5zdHJlbmd0aCA9IHN0cmVuZ3Ro
OwotfQotCi0vKioKLSAqIEFjdGl2YXRlIHRoaXMgY29uc3RyYWludCBhbmQgYXR0ZW1wdCB0byBz
YXRpc2Z5IGl0LgotICovCi1Db25zdHJhaW50LnByb3RvdHlwZS5hZGRDb25zdHJhaW50ID0gZnVu
Y3Rpb24gKCkgewotICB0aGlzLmFkZFRvR3JhcGgoKTsKLSAgcGxhbm5lci5pbmNyZW1lbnRhbEFk
ZCh0aGlzKTsKLX0KLQotLyoqCi0gKiBBdHRlbXB0IHRvIGZpbmQgYSB3YXkgdG8gZW5mb3JjZSB0
aGlzIGNvbnN0cmFpbnQuIElmIHN1Y2Nlc3NmdWwsCi0gKiByZWNvcmQgdGhlIHNvbHV0aW9uLCBw
ZXJoYXBzIG1vZGlmeWluZyB0aGUgY3VycmVudCBkYXRhZmxvdwotICogZ3JhcGguIEFuc3dlciB0
aGUgY29uc3RyYWludCB0aGF0IHRoaXMgY29uc3RyYWludCBvdmVycmlkZXMsIGlmCi0gKiB0aGVy
ZSBpcyBvbmUsIG9yIG5pbCwgaWYgdGhlcmUgaXNuJ3QuCi0gKiBBc3N1bWU6IEkgYW0gbm90IGFs
cmVhZHkgc2F0aXNmaWVkLgotICovCi1Db25zdHJhaW50LnByb3RvdHlwZS5zYXRpc2Z5ID0gZnVu
Y3Rpb24gKG1hcmspIHsKLSAgdGhpcy5jaG9vc2VNZXRob2QobWFyayk7Ci0gIGlmICghdGhpcy5p
c1NhdGlzZmllZCgpKSB7Ci0gICAgaWYgKHRoaXMuc3RyZW5ndGggPT0gU3RyZW5ndGguUkVRVUlS
RUQpCi0gICAgICBhbGVydCgiQ291bGQgbm90IHNhdGlzZnkgYSByZXF1aXJlZCBjb25zdHJhaW50
ISIpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0gIHRoaXMubWFya0lucHV0cyhtYXJrKTsKLSAg
dmFyIG91dCA9IHRoaXMub3V0cHV0KCk7Ci0gIHZhciBvdmVycmlkZGVuID0gb3V0LmRldGVybWlu
ZWRCeTsKLSAgaWYgKG92ZXJyaWRkZW4gIT0gbnVsbCkgb3ZlcnJpZGRlbi5tYXJrVW5zYXRpc2Zp
ZWQoKTsKLSAgb3V0LmRldGVybWluZWRCeSA9IHRoaXM7Ci0gIGlmICghcGxhbm5lci5hZGRQcm9w
YWdhdGUodGhpcywgbWFyaykpCi0gICAgYWxlcnQoIkN5Y2xlIGVuY291bnRlcmVkIik7Ci0gIG91
dC5tYXJrID0gbWFyazsKLSAgcmV0dXJuIG92ZXJyaWRkZW47Ci19Ci0KLUNvbnN0cmFpbnQucHJv
dG90eXBlLmRlc3Ryb3lDb25zdHJhaW50ID0gZnVuY3Rpb24gKCkgewotICBpZiAodGhpcy5pc1Nh
dGlzZmllZCgpKSBwbGFubmVyLmluY3JlbWVudGFsUmVtb3ZlKHRoaXMpOwotICBlbHNlIHRoaXMu
cmVtb3ZlRnJvbUdyYXBoKCk7Ci19Ci0KLS8qKgotICogTm9ybWFsIGNvbnN0cmFpbnRzIGFyZSBu
b3QgaW5wdXQgY29uc3RyYWludHMuICBBbiBpbnB1dCBjb25zdHJhaW50Ci0gKiBpcyBvbmUgdGhh
dCBkZXBlbmRzIG9uIGV4dGVybmFsIHN0YXRlLCBzdWNoIGFzIHRoZSBtb3VzZSwgdGhlCi0gKiBr
ZXlib3JkLCBhIGNsb2NrLCBvciBzb21lIGFyYml0cmF0eSBwaWVjZSBvZiBpbXBlcmF0aXZlIGNv
ZGUuCi0gKi8KLUNvbnN0cmFpbnQucHJvdG90eXBlLmlzSW5wdXQgPSBmdW5jdGlvbiAoKSB7Ci0g
IHJldHVybiBmYWxzZTsKLX0KLQotLyogLS0tICoKLSAqIFUgbiBhIHIgeSAgIEMgbyBuIHMgdCBy
IGEgaSBuIHQKLSAqIC0tLSAqLwotCi0vKioKLSAqIEFic3RyYWN0IHN1cGVyY2xhc3MgZm9yIGNv
bnN0cmFpbnRzIGhhdmluZyBhIHNpbmdsZSBwb3NzaWJsZSBvdXRwdXQKLSAqIHZhcmlhYmxlLgot
ICovCi1mdW5jdGlvbiBVbmFyeUNvbnN0cmFpbnQodiwgc3RyZW5ndGgpIHsKLSAgVW5hcnlDb25z
dHJhaW50LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzLCBzdHJlbmd0aCk7Ci0gIHRoaXMubXlP
dXRwdXQgPSB2OwotICB0aGlzLnNhdGlzZmllZCA9IGZhbHNlOwotICB0aGlzLmFkZENvbnN0cmFp
bnQoKTsKLX0KLQotVW5hcnlDb25zdHJhaW50LmluaGVyaXRzRnJvbShDb25zdHJhaW50KTsKLQot
LyoqCi0gKiBBZGRzIHRoaXMgY29uc3RyYWludCB0byB0aGUgY29uc3RyYWludCBncmFwaAotICov
Ci1VbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3JhcGggPSBmdW5jdGlvbiAoKSB7Ci0g
IHRoaXMubXlPdXRwdXQuYWRkQ29uc3RyYWludCh0aGlzKTsKLSAgdGhpcy5zYXRpc2ZpZWQgPSBm
YWxzZTsKLX0KLQotLyoqCi0gKiBEZWNpZGVzIGlmIHRoaXMgY29uc3RyYWludCBjYW4gYmUgc2F0
aXNmaWVkIGFuZCByZWNvcmRzIHRoYXQKLSAqIGRlY2lzaW9uLgotICovCi1VbmFyeUNvbnN0cmFp
bnQucHJvdG90eXBlLmNob29zZU1ldGhvZCA9IGZ1bmN0aW9uIChtYXJrKSB7Ci0gIHRoaXMuc2F0
aXNmaWVkID0gKHRoaXMubXlPdXRwdXQubWFyayAhPSBtYXJrKQotICAgICYmIFN0cmVuZ3RoLnN0
cm9uZ2VyKHRoaXMuc3RyZW5ndGgsIHRoaXMubXlPdXRwdXQud2Fsa1N0cmVuZ3RoKTsKLX0KLQot
LyoqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZCBpbiB0
aGUgY3VycmVudCBzb2x1dGlvbi4KLSAqLwotVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pc1Nh
dGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJuIHRoaXMuc2F0aXNmaWVkOwotfQotCi1V
bmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFyaykgewot
ICAvLyBoYXMgbm8gaW5wdXRzCi19Ci0KLS8qKgotICogUmV0dXJucyB0aGUgY3VycmVudCBvdXRw
dXQgdmFyaWFibGUuCi0gKi8KLVVuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUub3V0cHV0ID0gZnVu
Y3Rpb24gKCkgewotICByZXR1cm4gdGhpcy5teU91dHB1dDsKLX0KLQotLyoqCi0gKiBDYWxjdWxh
dGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcwot
ICogJ3N0YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzIGNvbnN0
cmFpbnQuIEFzc3VtZQotICogdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZC4KLSAqLwotVW5h
cnlDb25zdHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgdGhp
cy5teU91dHB1dC53YWxrU3RyZW5ndGggPSB0aGlzLnN0cmVuZ3RoOwotICB0aGlzLm15T3V0cHV0
LnN0YXkgPSAhdGhpcy5pc0lucHV0KCk7Ci0gIGlmICh0aGlzLm15T3V0cHV0LnN0YXkpIHRoaXMu
ZXhlY3V0ZSgpOyAvLyBTdGF5IG9wdGltaXphdGlvbgotfQotCi0vKioKLSAqIFJlY29yZHMgdGhh
dCB0aGlzIGNvbnN0cmFpbnQgaXMgdW5zYXRpc2ZpZWQKLSAqLwotVW5hcnlDb25zdHJhaW50LnBy
b3RvdHlwZS5tYXJrVW5zYXRpc2ZpZWQgPSBmdW5jdGlvbiAoKSB7Ci0gIHRoaXMuc2F0aXNmaWVk
ID0gZmFsc2U7Ci19Ci0KLVVuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaW5wdXRzS25vd24gPSBm
dW5jdGlvbiAoKSB7Ci0gIHJldHVybiB0cnVlOwotfQotCi1VbmFyeUNvbnN0cmFpbnQucHJvdG90
eXBlLnJlbW92ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKLSAgaWYgKHRoaXMubXlPdXRwdXQg
IT0gbnVsbCkgdGhpcy5teU91dHB1dC5yZW1vdmVDb25zdHJhaW50KHRoaXMpOwotICB0aGlzLnNh
dGlzZmllZCA9IGZhbHNlOwotfQotCi0vKiAtLS0gKgotICogUyB0IGEgeSAgIEMgbyBuIHMgdCBy
IGEgaSBuIHQKLSAqIC0tLSAqLwotCi0vKioKLSAqIFZhcmlhYmxlcyB0aGF0IHNob3VsZCwgd2l0
aCBzb21lIGxldmVsIG9mIHByZWZlcmVuY2UsIHN0YXkgdGhlIHNhbWUuCi0gKiBQbGFubmVycyBt
YXkgZXhwbG9pdCB0aGUgZmFjdCB0aGF0IGluc3RhbmNlcywgaWYgc2F0aXNmaWVkLCB3aWxsIG5v
dAotICogY2hhbmdlIHRoZWlyIG91dHB1dCBkdXJpbmcgcGxhbiBleGVjdXRpb24uICBUaGlzIGlz
IGNhbGxlZCAic3RheQotICogb3B0aW1pemF0aW9uIi4KLSAqLwotZnVuY3Rpb24gU3RheUNvbnN0
cmFpbnQodiwgc3RyKSB7Ci0gIFN0YXlDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0
aGlzLCB2LCBzdHIpOwotfQotCi1TdGF5Q29uc3RyYWludC5pbmhlcml0c0Zyb20oVW5hcnlDb25z
dHJhaW50KTsKLQotU3RheUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAo
KSB7Ci0gIC8vIFN0YXkgY29uc3RyYWludHMgZG8gbm90aGluZwotfQotCi0vKiAtLS0gKgotICog
RSBkIGkgdCAgIEMgbyBuIHMgdCByIGEgaSBuIHQKLSAqIC0tLSAqLwotCi0vKioKLSAqIEEgdW5h
cnkgaW5wdXQgY29uc3RyYWludCB1c2VkIHRvIG1hcmsgYSB2YXJpYWJsZSB0aGF0IHRoZSBjbGll
bnQKLSAqIHdpc2hlcyB0byBjaGFuZ2UuCi0gKi8KLWZ1bmN0aW9uIEVkaXRDb25zdHJhaW50KHYs
IHN0cikgewotICBFZGl0Q29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgdiwg
c3RyKTsKLX0KLQotRWRpdENvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKFVuYXJ5Q29uc3RyYWludCk7
Ci0KLS8qKgotICogRWRpdHMgaW5kaWNhdGUgdGhhdCBhIHZhcmlhYmxlIGlzIHRvIGJlIGNoYW5n
ZWQgYnkgaW1wZXJhdGl2ZSBjb2RlLgotICovCi1FZGl0Q29uc3RyYWludC5wcm90b3R5cGUuaXNJ
bnB1dCA9IGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUVkaXRDb25zdHJhaW50
LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewotICAvLyBFZGl0IGNvbnN0cmFpbnRz
IGRvIG5vdGhpbmcKLX0KLQotLyogLS0tICoKLSAqIEIgaSBuIGEgciB5ICAgQyBvIG4gcyB0IHIg
YSBpIG4gdAotICogLS0tICovCi0KLXZhciBEaXJlY3Rpb24gPSBuZXcgT2JqZWN0KCk7Ci1EaXJl
Y3Rpb24uTk9ORSAgICAgPSAwOwotRGlyZWN0aW9uLkZPUldBUkQgID0gMTsKLURpcmVjdGlvbi5C
QUNLV0FSRCA9IC0xOwotCi0vKioKLSAqIEFic3RyYWN0IHN1cGVyY2xhc3MgZm9yIGNvbnN0cmFp
bnRzIGhhdmluZyB0d28gcG9zc2libGUgb3V0cHV0Ci0gKiB2YXJpYWJsZXMuCi0gKi8KLWZ1bmN0
aW9uIEJpbmFyeUNvbnN0cmFpbnQodmFyMSwgdmFyMiwgc3RyZW5ndGgpIHsKLSAgQmluYXJ5Q29u
c3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3RyZW5ndGgpOwotICB0aGlzLnYx
ID0gdmFyMTsKLSAgdGhpcy52MiA9IHZhcjI7Ci0gIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9u
Lk5PTkU7Ci0gIHRoaXMuYWRkQ29uc3RyYWludCgpOwotfQotCi1CaW5hcnlDb25zdHJhaW50Lmlu
aGVyaXRzRnJvbShDb25zdHJhaW50KTsKLQotLyoqCi0gKiBEZWNpZGVzIGlmIHRoaXMgY29uc3Ry
YWludCBjYW4gYmUgc2F0aXNmaWVkIGFuZCB3aGljaCB3YXkgaXQKLSAqIHNob3VsZCBmbG93IGJh
c2VkIG9uIHRoZSByZWxhdGl2ZSBzdHJlbmd0aCBvZiB0aGUgdmFyaWFibGVzIHJlbGF0ZWQsCi0g
KiBhbmQgcmVjb3JkIHRoYXQgZGVjaXNpb24uCi0gKi8KLUJpbmFyeUNvbnN0cmFpbnQucHJvdG90
eXBlLmNob29zZU1ldGhvZCA9IGZ1bmN0aW9uIChtYXJrKSB7Ci0gIGlmICh0aGlzLnYxLm1hcmsg
PT0gbWFyaykgewotICAgIHRoaXMuZGlyZWN0aW9uID0gKHRoaXMudjIubWFyayAhPSBtYXJrICYm
IFN0cmVuZ3RoLnN0cm9uZ2VyKHRoaXMuc3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0cmVuZ3RoKSkK
LSAgICAgID8gRGlyZWN0aW9uLkZPUldBUkQKLSAgICAgIDogRGlyZWN0aW9uLk5PTkU7Ci0gIH0K
LSAgaWYgKHRoaXMudjIubWFyayA9PSBtYXJrKSB7Ci0gICAgdGhpcy5kaXJlY3Rpb24gPSAodGhp
cy52MS5tYXJrICE9IG1hcmsgJiYgU3RyZW5ndGguc3Ryb25nZXIodGhpcy5zdHJlbmd0aCwgdGhp
cy52MS53YWxrU3RyZW5ndGgpKQotICAgICAgPyBEaXJlY3Rpb24uQkFDS1dBUkQKLSAgICAgIDog
RGlyZWN0aW9uLk5PTkU7Ci0gIH0KLSAgaWYgKFN0cmVuZ3RoLndlYWtlcih0aGlzLnYxLndhbGtT
dHJlbmd0aCwgdGhpcy52Mi53YWxrU3RyZW5ndGgpKSB7Ci0gICAgdGhpcy5kaXJlY3Rpb24gPSBT
dHJlbmd0aC5zdHJvbmdlcih0aGlzLnN0cmVuZ3RoLCB0aGlzLnYxLndhbGtTdHJlbmd0aCkKLSAg
ICAgID8gRGlyZWN0aW9uLkJBQ0tXQVJECi0gICAgICA6IERpcmVjdGlvbi5OT05FOwotICB9IGVs
c2UgewotICAgIHRoaXMuZGlyZWN0aW9uID0gU3RyZW5ndGguc3Ryb25nZXIodGhpcy5zdHJlbmd0
aCwgdGhpcy52Mi53YWxrU3RyZW5ndGgpCi0gICAgICA/IERpcmVjdGlvbi5GT1JXQVJECi0gICAg
ICA6IERpcmVjdGlvbi5CQUNLV0FSRAotICB9Ci19Ci0KLS8qKgotICogQWRkIHRoaXMgY29uc3Ry
YWludCB0byB0aGUgY29uc3RyYWludCBncmFwaAotICovCi1CaW5hcnlDb25zdHJhaW50LnByb3Rv
dHlwZS5hZGRUb0dyYXBoID0gZnVuY3Rpb24gKCkgewotICB0aGlzLnYxLmFkZENvbnN0cmFpbnQo
dGhpcyk7Ci0gIHRoaXMudjIuYWRkQ29uc3RyYWludCh0aGlzKTsKLSAgdGhpcy5kaXJlY3Rpb24g
PSBEaXJlY3Rpb24uTk9ORTsKLX0KLQotLyoqCi0gKiBBbnN3ZXIgdHJ1ZSBpZiB0aGlzIGNvbnN0
cmFpbnQgaXMgc2F0aXNmaWVkIGluIHRoZSBjdXJyZW50IHNvbHV0aW9uLgotICovCi1CaW5hcnlD
b25zdHJhaW50LnByb3RvdHlwZS5pc1NhdGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJu
IHRoaXMuZGlyZWN0aW9uICE9IERpcmVjdGlvbi5OT05FOwotfQotCi0vKioKLSAqIE1hcmsgdGhl
IGlucHV0IHZhcmlhYmxlIHdpdGggdGhlIGdpdmVuIG1hcmsuCi0gKi8KLUJpbmFyeUNvbnN0cmFp
bnQucHJvdG90eXBlLm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFyaykgewotICB0aGlzLmlucHV0
KCkubWFyayA9IG1hcms7Ci19Ci0KLS8qKgotICogUmV0dXJucyB0aGUgY3VycmVudCBpbnB1dCB2
YXJpYWJsZQotICovCi1CaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1dCA9IGZ1bmN0aW9u
ICgpIHsKLSAgcmV0dXJuICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgPyB0
aGlzLnYxIDogdGhpcy52MjsKLX0KLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBjdXJyZW50IG91dHB1
dCB2YXJpYWJsZQotICovCi1CaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5j
dGlvbiAoKSB7Ci0gIHJldHVybiAodGhpcy5kaXJlY3Rpb24gPT0gRGlyZWN0aW9uLkZPUldBUkQp
ID8gdGhpcy52MiA6IHRoaXMudjE7Ci19Ci0KLS8qKgotICogQ2FsY3VsYXRlIHRoZSB3YWxrYWJv
dXQgc3RyZW5ndGgsIHRoZSBzdGF5IGZsYWcsIGFuZCwgaWYgaXQgaXMKLSAqICdzdGF5JywgdGhl
IHZhbHVlIGZvciB0aGUgY3VycmVudCBvdXRwdXQgb2YgdGhpcwotICogY29uc3RyYWludC4gQXNz
dW1lIHRoaXMgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQuCi0gKi8KLUJpbmFyeUNvbnN0cmFpbnQu
cHJvdG90eXBlLnJlY2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgewotICB2YXIgaWhuID0gdGhpcy5p
bnB1dCgpLCBvdXQgPSB0aGlzLm91dHB1dCgpOwotICBvdXQud2Fsa1N0cmVuZ3RoID0gU3RyZW5n
dGgud2Vha2VzdE9mKHRoaXMuc3RyZW5ndGgsIGlobi53YWxrU3RyZW5ndGgpOwotICBvdXQuc3Rh
eSA9IGlobi5zdGF5OwotICBpZiAob3V0LnN0YXkpIHRoaXMuZXhlY3V0ZSgpOwotfQotCi0vKioK
LSAqIFJlY29yZCB0aGUgZmFjdCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyB1bnNhdGlzZmllZC4K
LSAqLwotQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya1Vuc2F0aXNmaWVkID0gZnVuY3Rp
b24gKCkgewotICB0aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOwotfQotCi1CaW5hcnlD
b25zdHJhaW50LnByb3RvdHlwZS5pbnB1dHNLbm93biA9IGZ1bmN0aW9uIChtYXJrKSB7Ci0gIHZh
ciBpID0gdGhpcy5pbnB1dCgpOwotICByZXR1cm4gaS5tYXJrID09IG1hcmsgfHwgaS5zdGF5IHx8
IGkuZGV0ZXJtaW5lZEJ5ID09IG51bGw7Ci19Ci0KLUJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
LnJlbW92ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKLSAgaWYgKHRoaXMudjEgIT0gbnVsbCkg
dGhpcy52MS5yZW1vdmVDb25zdHJhaW50KHRoaXMpOwotICBpZiAodGhpcy52MiAhPSBudWxsKSB0
aGlzLnYyLnJlbW92ZUNvbnN0cmFpbnQodGhpcyk7Ci0gIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0
aW9uLk5PTkU7Ci19Ci0KLS8qIC0tLSAqCi0gKiBTIGMgYSBsIGUgICBDIG8gbiBzIHQgciBhIGkg
biB0Ci0gKiAtLS0gKi8KLQotLyoqCi0gKiBSZWxhdGVzIHR3byB2YXJpYWJsZXMgYnkgdGhlIGxp
bmVhciBzY2FsaW5nIHJlbGF0aW9uc2hpcDogInYyID0KLSAqICh2MSAqIHNjYWxlKSArIG9mZnNl
dCIuIEVpdGhlciB2MSBvciB2MiBtYXkgYmUgY2hhbmdlZCB0byBtYWludGFpbgotICogdGhpcyBy
ZWxhdGlvbnNoaXAgYnV0IHRoZSBzY2FsZSBmYWN0b3IgYW5kIG9mZnNldCBhcmUgY29uc2lkZXJl
ZAotICogcmVhZC1vbmx5LgotICovCi1mdW5jdGlvbiBTY2FsZUNvbnN0cmFpbnQoc3JjLCBzY2Fs
ZSwgb2Zmc2V0LCBkZXN0LCBzdHJlbmd0aCkgewotICB0aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlv
bi5OT05FOwotICB0aGlzLnNjYWxlID0gc2NhbGU7Ci0gIHRoaXMub2Zmc2V0ID0gb2Zmc2V0Owot
ICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNyYywgZGVzdCwg
c3RyZW5ndGgpOwotfQotCi1TY2FsZUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKEJpbmFyeUNvbnN0
cmFpbnQpOwotCi0vKioKLSAqIEFkZHMgdGhpcyBjb25zdHJhaW50IHRvIHRoZSBjb25zdHJhaW50
IGdyYXBoLgotICovCi1TY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3JhcGggPSBmdW5j
dGlvbiAoKSB7Ci0gIFNjYWxlQ29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZS5h
ZGRUb0dyYXBoLmNhbGwodGhpcyk7Ci0gIHRoaXMuc2NhbGUuYWRkQ29uc3RyYWludCh0aGlzKTsK
LSAgdGhpcy5vZmZzZXQuYWRkQ29uc3RyYWludCh0aGlzKTsKLX0KLQotU2NhbGVDb25zdHJhaW50
LnByb3RvdHlwZS5yZW1vdmVGcm9tR3JhcGggPSBmdW5jdGlvbiAoKSB7Ci0gIFNjYWxlQ29uc3Ry
YWludC5zdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW1vdmVGcm9tR3JhcGguY2FsbCh0aGlz
KTsKLSAgaWYgKHRoaXMuc2NhbGUgIT0gbnVsbCkgdGhpcy5zY2FsZS5yZW1vdmVDb25zdHJhaW50
KHRoaXMpOwotICBpZiAodGhpcy5vZmZzZXQgIT0gbnVsbCkgdGhpcy5vZmZzZXQucmVtb3ZlQ29u
c3RyYWludCh0aGlzKTsKLX0KLQotU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5tYXJrSW5wdXRz
ID0gZnVuY3Rpb24gKG1hcmspIHsKLSAgU2NhbGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3Iu
cHJvdG90eXBlLm1hcmtJbnB1dHMuY2FsbCh0aGlzLCBtYXJrKTsKLSAgdGhpcy5zY2FsZS5tYXJr
ID0gdGhpcy5vZmZzZXQubWFyayA9IG1hcms7Ci19Ci0KLS8qKgotICogRW5mb3JjZSB0aGlzIGNv
bnN0cmFpbnQuIEFzc3VtZSB0aGF0IGl0IGlzIHNhdGlzZmllZC4KLSAqLwotU2NhbGVDb25zdHJh
aW50LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewotICBpZiAodGhpcy5kaXJlY3Rp
b24gPT0gRGlyZWN0aW9uLkZPUldBUkQpIHsKLSAgICB0aGlzLnYyLnZhbHVlID0gdGhpcy52MS52
YWx1ZSAqIHRoaXMuc2NhbGUudmFsdWUgKyB0aGlzLm9mZnNldC52YWx1ZTsKLSAgfSBlbHNlIHsK
LSAgICB0aGlzLnYxLnZhbHVlID0gKHRoaXMudjIudmFsdWUgLSB0aGlzLm9mZnNldC52YWx1ZSkg
LyB0aGlzLnNjYWxlLnZhbHVlOwotICB9Ci19Ci0KLS8qKgotICogQ2FsY3VsYXRlIHRoZSB3YWxr
YWJvdXQgc3RyZW5ndGgsIHRoZSBzdGF5IGZsYWcsIGFuZCwgaWYgaXQgaXMKLSAqICdzdGF5Jywg
dGhlIHZhbHVlIGZvciB0aGUgY3VycmVudCBvdXRwdXQgb2YgdGhpcyBjb25zdHJhaW50LiBBc3N1
bWUKLSAqIHRoaXMgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQuCi0gKi8KLVNjYWxlQ29uc3RyYWlu
dC5wcm90b3R5cGUucmVjYWxjdWxhdGUgPSBmdW5jdGlvbiAoKSB7Ci0gIHZhciBpaG4gPSB0aGlz
LmlucHV0KCksIG91dCA9IHRoaXMub3V0cHV0KCk7Ci0gIG91dC53YWxrU3RyZW5ndGggPSBTdHJl
bmd0aC53ZWFrZXN0T2YodGhpcy5zdHJlbmd0aCwgaWhuLndhbGtTdHJlbmd0aCk7Ci0gIG91dC5z
dGF5ID0gaWhuLnN0YXkgJiYgdGhpcy5zY2FsZS5zdGF5ICYmIHRoaXMub2Zmc2V0LnN0YXk7Ci0g
IGlmIChvdXQuc3RheSkgdGhpcy5leGVjdXRlKCk7Ci19Ci0KLS8qIC0tLSAqCi0gKiBFIHEgdSBh
IGwgaSB0ICB5ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAotICogLS0tICovCi0KLS8qKgotICogQ29u
c3RyYWlucyB0d28gdmFyaWFibGVzIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUuCi0gKi8KLWZ1bmN0
aW9uIEVxdWFsaXR5Q29uc3RyYWludCh2YXIxLCB2YXIyLCBzdHJlbmd0aCkgewotICBFcXVhbGl0
eUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHZhcjEsIHZhcjIsIHN0cmVu
Z3RoKTsKLX0KLQotRXF1YWxpdHlDb25zdHJhaW50LmluaGVyaXRzRnJvbShCaW5hcnlDb25zdHJh
aW50KTsKLQotLyoqCi0gKiBFbmZvcmNlIHRoaXMgY29uc3RyYWludC4gQXNzdW1lIHRoYXQgaXQg
aXMgc2F0aXNmaWVkLgotICovCi1FcXVhbGl0eUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUg
PSBmdW5jdGlvbiAoKSB7Ci0gIHRoaXMub3V0cHV0KCkudmFsdWUgPSB0aGlzLmlucHV0KCkudmFs
dWU7Ci19Ci0KLS8qIC0tLSAqCi0gKiBWIGEgciBpIGEgYiBsIGUKLSAqIC0tLSAqLwotCi0vKioK
LSAqIEEgY29uc3RyYWluZWQgdmFyaWFibGUuIEluIGFkZGl0aW9uIHRvIGl0cyB2YWx1ZSwgaXQg
bWFpbnRhaW4gdGhlCi0gKiBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnN0cmFpbnQgZ3JhcGgsIHRoZSBj
dXJyZW50IGRhdGFmbG93IGdyYXBoLCBhbmQKLSAqIHZhcmlvdXMgcGFyYW1ldGVycyBvZiBpbnRl
cmVzdCB0byB0aGUgRGVsdGFCbHVlIGluY3JlbWVudGFsCi0gKiBjb25zdHJhaW50IHNvbHZlci4K
LSAqKi8KLWZ1bmN0aW9uIFZhcmlhYmxlKG5hbWUsIGluaXRpYWxWYWx1ZSkgewotICB0aGlzLnZh
bHVlID0gaW5pdGlhbFZhbHVlIHx8IDA7Ci0gIHRoaXMuY29uc3RyYWludHMgPSBuZXcgT3JkZXJl
ZENvbGxlY3Rpb24oKTsKLSAgdGhpcy5kZXRlcm1pbmVkQnkgPSBudWxsOwotICB0aGlzLm1hcmsg
PSAwOwotICB0aGlzLndhbGtTdHJlbmd0aCA9IFN0cmVuZ3RoLldFQUtFU1Q7Ci0gIHRoaXMuc3Rh
eSA9IHRydWU7Ci0gIHRoaXMubmFtZSA9IG5hbWU7Ci19Ci0KLS8qKgotICogQWRkIHRoZSBnaXZl
biBjb25zdHJhaW50IHRvIHRoZSBzZXQgb2YgYWxsIGNvbnN0cmFpbnRzIHRoYXQgcmVmZXIKLSAq
IHRoaXMgdmFyaWFibGUuCi0gKi8KLVZhcmlhYmxlLnByb3RvdHlwZS5hZGRDb25zdHJhaW50ID0g
ZnVuY3Rpb24gKGMpIHsKLSAgdGhpcy5jb25zdHJhaW50cy5hZGQoYyk7Ci19Ci0KLS8qKgotICog
UmVtb3ZlcyBhbGwgdHJhY2VzIG9mIGMgZnJvbSB0aGlzIHZhcmlhYmxlLgotICovCi1WYXJpYWJs
ZS5wcm90b3R5cGUucmVtb3ZlQ29uc3RyYWludCA9IGZ1bmN0aW9uIChjKSB7Ci0gIHRoaXMuY29u
c3RyYWludHMucmVtb3ZlKGMpOwotICBpZiAodGhpcy5kZXRlcm1pbmVkQnkgPT0gYykgdGhpcy5k
ZXRlcm1pbmVkQnkgPSBudWxsOwotfQotCi0vKiAtLS0gKgotICogUCBsIGEgbiBuIGUgcgotICog
LS0tICovCi0KLS8qKgotICogVGhlIERlbHRhQmx1ZSBwbGFubmVyCi0gKi8KLWZ1bmN0aW9uIFBs
YW5uZXIoKSB7Ci0gIHRoaXMuY3VycmVudE1hcmsgPSAwOwotfQotCi0vKioKLSAqIEF0dGVtcHQg
dG8gc2F0aXNmeSB0aGUgZ2l2ZW4gY29uc3RyYWludCBhbmQsIGlmIHN1Y2Nlc3NmdWwsCi0gKiBp
bmNyZW1lbnRhbGx5IHVwZGF0ZSB0aGUgZGF0YWZsb3cgZ3JhcGguICBEZXRhaWxzOiBJZiBzYXRp
ZnlpbmcKLSAqIHRoZSBjb25zdHJhaW50IGlzIHN1Y2Nlc3NmdWwsIGl0IG1heSBvdmVycmlkZSBh
IHdlYWtlciBjb25zdHJhaW50Ci0gKiBvbiBpdHMgb3V0cHV0LiBUaGUgYWxnb3JpdGhtIGF0dGVt
cHRzIHRvIHJlc2F0aXNmeSB0aGF0Ci0gKiBjb25zdHJhaW50IHVzaW5nIHNvbWUgb3RoZXIgbWV0
aG9kLiBUaGlzIHByb2Nlc3MgaXMgcmVwZWF0ZWQKLSAqIHVudGlsIGVpdGhlciBhKSBpdCByZWFj
aGVzIGEgdmFyaWFibGUgdGhhdCB3YXMgbm90IHByZXZpb3VzbHkKLSAqIGRldGVybWluZWQgYnkg
YW55IGNvbnN0cmFpbnQgb3IgYikgaXQgcmVhY2hlcyBhIGNvbnN0cmFpbnQgdGhhdAotICogaXMg
dG9vIHdlYWsgdG8gYmUgc2F0aXNmaWVkIHVzaW5nIGFueSBvZiBpdHMgbWV0aG9kcy4gVGhlCi0g
KiB2YXJpYWJsZXMgb2YgY29uc3RyYWludHMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFyZSBt
YXJrZWQgd2l0aAotICogYSB1bmlxdWUgbWFyayB2YWx1ZSBzbyB0aGF0IHdlIGtub3cgd2hlcmUg
d2UndmUgYmVlbi4gVGhpcyBhbGxvd3MKLSAqIHRoZSBhbGdvcml0aG0gdG8gYXZvaWQgZ2V0dGlu
ZyBpbnRvIGFuIGluZmluaXRlIGxvb3AgZXZlbiBpZiB0aGUKLSAqIGNvbnN0cmFpbnQgZ3JhcGgg
aGFzIGFuIGluYWR2ZXJ0ZW50IGN5Y2xlLgotICovCi1QbGFubmVyLnByb3RvdHlwZS5pbmNyZW1l
bnRhbEFkZCA9IGZ1bmN0aW9uIChjKSB7Ci0gIHZhciBtYXJrID0gdGhpcy5uZXdNYXJrKCk7Ci0g
IHZhciBvdmVycmlkZGVuID0gYy5zYXRpc2Z5KG1hcmspOwotICB3aGlsZSAob3ZlcnJpZGRlbiAh
PSBudWxsKQotICAgIG92ZXJyaWRkZW4gPSBvdmVycmlkZGVuLnNhdGlzZnkobWFyayk7Ci19Ci0K
LS8qKgotICogRW50cnkgcG9pbnQgZm9yIHJldHJhY3RpbmcgYSBjb25zdHJhaW50LiBSZW1vdmUg
dGhlIGdpdmVuCi0gKiBjb25zdHJhaW50IGFuZCBpbmNyZW1lbnRhbGx5IHVwZGF0ZSB0aGUgZGF0
YWZsb3cgZ3JhcGguCi0gKiBEZXRhaWxzOiBSZXRyYWN0aW5nIHRoZSBnaXZlbiBjb25zdHJhaW50
IG1heSBhbGxvdyBzb21lIGN1cnJlbnRseQotICogdW5zYXRpc2ZpYWJsZSBkb3duc3RyZWFtIGNv
bnN0cmFpbnQgdG8gYmUgc2F0aXNmaWVkLiBXZSB0aGVyZWZvcmUgY29sbGVjdAotICogYSBsaXN0
IG9mIHVuc2F0aXNmaWVkIGRvd25zdHJlYW0gY29uc3RyYWludHMgYW5kIGF0dGVtcHQgdG8KLSAq
IHNhdGlzZnkgZWFjaCBvbmUgaW4gdHVybi4gVGhpcyBsaXN0IGlzIHRyYXZlcnNlZCBieSBjb25z
dHJhaW50Ci0gKiBzdHJlbmd0aCwgc3Ryb25nZXN0IGZpcnN0LCBhcyBhIGhldXJpc3RpYyBmb3Ig
YXZvaWRpbmcKLSAqIHVubmVjZXNzYXJpbHkgYWRkaW5nIGFuZCB0aGVuIG92ZXJyaWRpbmcgd2Vh
ayBjb25zdHJhaW50cy4KLSAqIEFzc3VtZTogYyBpcyBzYXRpc2ZpZWQuCi0gKi8KLVBsYW5uZXIu
cHJvdG90eXBlLmluY3JlbWVudGFsUmVtb3ZlID0gZnVuY3Rpb24gKGMpIHsKLSAgdmFyIG91dCA9
IGMub3V0cHV0KCk7Ci0gIGMubWFya1Vuc2F0aXNmaWVkKCk7Ci0gIGMucmVtb3ZlRnJvbUdyYXBo
KCk7Ci0gIHZhciB1bnNhdGlzZmllZCA9IHRoaXMucmVtb3ZlUHJvcGFnYXRlRnJvbShvdXQpOwot
ICB2YXIgc3RyZW5ndGggPSBTdHJlbmd0aC5SRVFVSVJFRDsKLSAgZG8gewotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdW5zYXRpc2ZpZWQuc2l6ZSgpOyBpKyspIHsKLSAgICAgIHZhciB1ID0gdW5z
YXRpc2ZpZWQuYXQoaSk7Ci0gICAgICBpZiAodS5zdHJlbmd0aCA9PSBzdHJlbmd0aCkKLSAgICAg
ICAgdGhpcy5pbmNyZW1lbnRhbEFkZCh1KTsKLSAgICB9Ci0gICAgc3RyZW5ndGggPSBzdHJlbmd0
aC5uZXh0V2Vha2VyKCk7Ci0gIH0gd2hpbGUgKHN0cmVuZ3RoICE9IFN0cmVuZ3RoLldFQUtFU1Qp
OwotfQotCi0vKioKLSAqIFNlbGVjdCBhIHByZXZpb3VzbHkgdW51c2VkIG1hcmsgdmFsdWUuCi0g
Ki8KLVBsYW5uZXIucHJvdG90eXBlLm5ld01hcmsgPSBmdW5jdGlvbiAoKSB7Ci0gIHJldHVybiAr
K3RoaXMuY3VycmVudE1hcms7Ci19Ci0KLS8qKgotICogRXh0cmFjdCBhIHBsYW4gZm9yIHJlc2F0
aXNmYWN0aW9uIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIHNvdXJjZQotICogY29uc3RyYWludHMs
IHVzdWFsbHkgYSBzZXQgb2YgaW5wdXQgY29uc3RyYWludHMuIFRoaXMgbWV0aG9kCi0gKiBhc3N1
bWVzIHRoYXQgc3RheSBvcHRpbWl6YXRpb24gaXMgZGVzaXJlZDsgdGhlIHBsYW4gd2lsbCBjb250
YWluCi0gKiBvbmx5IGNvbnN0cmFpbnRzIHdob3NlIG91dHB1dCB2YXJpYWJsZXMgYXJlIG5vdCBz
dGF5LiBDb25zdHJhaW50cwotICogdGhhdCBkbyBubyBjb21wdXRhdGlvbiwgc3VjaCBhcyBzdGF5
IGFuZCBlZGl0IGNvbnN0cmFpbnRzLCBhcmUKLSAqIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGxhbi4K
LSAqIERldGFpbHM6IFRoZSBvdXRwdXRzIG9mIGEgY29uc3RyYWludCBhcmUgbWFya2VkIHdoZW4g
aXQgaXMgYWRkZWQKLSAqIHRvIHRoZSBwbGFuIHVuZGVyIGNvbnN0cnVjdGlvbi4gQSBjb25zdHJh
aW50IG1heSBiZSBhcHBlbmRlZCB0bwotICogdGhlIHBsYW4gd2hlbiBhbGwgaXRzIGlucHV0IHZh
cmlhYmxlcyBhcmUga25vd24uIEEgdmFyaWFibGUgaXMKLSAqIGtub3duIGlmIGVpdGhlciBhKSB0
aGUgdmFyaWFibGUgaXMgbWFya2VkIChpbmRpY2F0aW5nIHRoYXQgaGFzCi0gKiBiZWVuIGNvbXB1
dGVkIGJ5IGEgY29uc3RyYWludCBhcHBlYXJpbmcgZWFybGllciBpbiB0aGUgcGxhbiksIGIpCi0g
KiB0aGUgdmFyaWFibGUgaXMgJ3N0YXknIChpLmUuIGl0IGlzIGEgY29uc3RhbnQgYXQgcGxhbiBl
eGVjdXRpb24KLSAqIHRpbWUpLCBvciBjKSB0aGUgdmFyaWFibGUgaXMgbm90IGRldGVybWluZWQg
YnkgYW55Ci0gKiBjb25zdHJhaW50LiBUaGUgbGFzdCBwcm92aXNpb24gaXMgZm9yIHBhc3Qgc3Rh
dGVzIG9mIGhpc3RvcnkKLSAqIHZhcmlhYmxlcywgd2hpY2ggYXJlIG5vdCBzdGF5IGJ1dCB3aGlj
aCBhcmUgYWxzbyBub3QgY29tcHV0ZWQgYnkKLSAqIGFueSBjb25zdHJhaW50LgotICogQXNzdW1l
OiBzb3VyY2VzIGFyZSBhbGwgc2F0aXNmaWVkLgotICovCi1QbGFubmVyLnByb3RvdHlwZS5tYWtl
UGxhbiA9IGZ1bmN0aW9uIChzb3VyY2VzKSB7Ci0gIHZhciBtYXJrID0gdGhpcy5uZXdNYXJrKCk7
Ci0gIHZhciBwbGFuID0gbmV3IFBsYW4oKTsKLSAgdmFyIHRvZG8gPSBzb3VyY2VzOwotICB3aGls
ZSAodG9kby5zaXplKCkgPiAwKSB7Ci0gICAgdmFyIGMgPSB0b2RvLnJlbW92ZUZpcnN0KCk7Ci0g
ICAgaWYgKGMub3V0cHV0KCkubWFyayAhPSBtYXJrICYmIGMuaW5wdXRzS25vd24obWFyaykpIHsK
LSAgICAgIHBsYW4uYWRkQ29uc3RyYWludChjKTsKLSAgICAgIGMub3V0cHV0KCkubWFyayA9IG1h
cms7Ci0gICAgICB0aGlzLmFkZENvbnN0cmFpbnRzQ29uc3VtaW5nVG8oYy5vdXRwdXQoKSwgdG9k
byk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBwbGFuOwotfQotCi0vKioKLSAqIEV4dHJhY3QgYSBw
bGFuIGZvciByZXNhdGlzZnlpbmcgc3RhcnRpbmcgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZQotICog
Z2l2ZW4gY29uc3RyYWludHMsIHVzdWFsbHkgYSBzZXQgb2YgaW5wdXQgY29uc3RyYWludHMuCi0g
Ki8KLVBsYW5uZXIucHJvdG90eXBlLmV4dHJhY3RQbGFuRnJvbUNvbnN0cmFpbnRzID0gZnVuY3Rp
b24gKGNvbnN0cmFpbnRzKSB7Ci0gIHZhciBzb3VyY2VzID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9u
KCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgY29uc3RyYWludHMuc2l6ZSgpOyBpKyspIHsKLSAg
ICB0cnkgeyBleGNlcHRpb24oKTsgfSBjYXRjaChlKSB7IH0KLSAgICB2YXIgYyA9IGNvbnN0cmFp
bnRzLmF0KGkpOwotICAgIHRyeSB7IGV4Y2VwdGlvbigpOyB9IGNhdGNoKGUpIHsgfQotICAgIGlm
IChjLmlzSW5wdXQoKSAmJiBjLmlzU2F0aXNmaWVkKCkpCi0gICAgICAvLyBub3QgaW4gcGxhbiBh
bHJlYWR5IGFuZCBlbGlnaWJsZSBmb3IgaW5jbHVzaW9uCi0gICAgICBzb3VyY2VzLmFkZChjKTsK
LSAgfQotICByZXR1cm4gdGhpcy5tYWtlUGxhbihzb3VyY2VzKTsKLX0KLQotLyoqCi0gKiBSZWNv
bXB1dGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aHMgYW5kIHN0YXkgZmxhZ3Mgb2YgYWxsIHZhcmlh
YmxlcwotICogZG93bnN0cmVhbSBvZiB0aGUgZ2l2ZW4gY29uc3RyYWludCBhbmQgcmVjb21wdXRl
IHRoZSBhY3R1YWwKLSAqIHZhbHVlcyBvZiBhbGwgdmFyaWFibGVzIHdob3NlIHN0YXkgZmxhZyBp
cyB0cnVlLiBJZiBhIGN5Y2xlIGlzCi0gKiBkZXRlY3RlZCwgcmVtb3ZlIHRoZSBnaXZlbiBjb25z
dHJhaW50IGFuZCBhbnN3ZXIKLSAqIGZhbHNlLiBPdGhlcndpc2UsIGFuc3dlciB0cnVlLgotICog
RGV0YWlsczogQ3ljbGVzIGFyZSBkZXRlY3RlZCB3aGVuIGEgbWFya2VkIHZhcmlhYmxlIGlzCi0g
KiBlbmNvdW50ZXJlZCBkb3duc3RyZWFtIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50LiBUaGUgc2Vu
ZGVyIGlzCi0gKiBhc3N1bWVkIHRvIGhhdmUgbWFya2VkIHRoZSBpbnB1dHMgb2YgdGhlIGdpdmVu
IGNvbnN0cmFpbnQgd2l0aAotICogdGhlIGdpdmVuIG1hcmsuIFRodXMsIGVuY291bnRlcmluZyBh
IG1hcmtlZCBub2RlIGRvd25zdHJlYW0gb2YKLSAqIHRoZSBvdXRwdXQgY29uc3RyYWludCBtZWFu
cyB0aGF0IHRoZXJlIGlzIGEgcGF0aCBmcm9tIHRoZQotICogY29uc3RyYWludCdzIG91dHB1dCB0
byBvbmUgb2YgaXRzIGlucHV0cy4KLSAqLwotUGxhbm5lci5wcm90b3R5cGUuYWRkUHJvcGFnYXRl
ID0gZnVuY3Rpb24gKGMsIG1hcmspIHsKLSAgdmFyIHRvZG8gPSBuZXcgT3JkZXJlZENvbGxlY3Rp
b24oKTsKLSAgdG9kby5hZGQoYyk7Ci0gIHdoaWxlICh0b2RvLnNpemUoKSA+IDApIHsKLSAgICB2
YXIgZCA9IHRvZG8ucmVtb3ZlRmlyc3QoKTsKLSAgICBpZiAoZC5vdXRwdXQoKS5tYXJrID09IG1h
cmspIHsKLSAgICAgIHRoaXMuaW5jcmVtZW50YWxSZW1vdmUoYyk7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIGQucmVjYWxjdWxhdGUoKTsKLSAgICB0aGlzLmFkZENvbnN0cmFpbnRz
Q29uc3VtaW5nVG8oZC5vdXRwdXQoKSwgdG9kbyk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LQotLyoqCi0gKiBVcGRhdGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aHMgYW5kIHN0YXkgZmxhZ3Mg
b2YgYWxsIHZhcmlhYmxlcwotICogZG93bnN0cmVhbSBvZiB0aGUgZ2l2ZW4gY29uc3RyYWludC4g
QW5zd2VyIGEgY29sbGVjdGlvbiBvZgotICogdW5zYXRpc2ZpZWQgY29uc3RyYWludHMgc29ydGVk
IGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgc3RyZW5ndGguCi0gKi8KLVBsYW5uZXIucHJvdG90eXBl
LnJlbW92ZVByb3BhZ2F0ZUZyb20gPSBmdW5jdGlvbiAob3V0KSB7Ci0gIG91dC5kZXRlcm1pbmVk
QnkgPSBudWxsOwotICBvdXQud2Fsa1N0cmVuZ3RoID0gU3RyZW5ndGguV0VBS0VTVDsKLSAgb3V0
LnN0YXkgPSB0cnVlOwotICB2YXIgdW5zYXRpc2ZpZWQgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24o
KTsKLSAgdmFyIHRvZG8gPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oKTsKLSAgdG9kby5hZGQob3V0
KTsKLSAgd2hpbGUgKHRvZG8uc2l6ZSgpID4gMCkgewotICAgIHZhciB2ID0gdG9kby5yZW1vdmVG
aXJzdCgpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdi5jb25zdHJhaW50cy5zaXplKCk7IGkr
KykgewotICAgICAgdmFyIGMgPSB2LmNvbnN0cmFpbnRzLmF0KGkpOwotICAgICAgdHJ5IHsgZXhj
ZXB0aW9uKCk7IH0gY2F0Y2goZSkgeyB9Ci0gICAgICBpZiAoIWMuaXNTYXRpc2ZpZWQoKSkKLSAg
ICAgICAgdW5zYXRpc2ZpZWQuYWRkKGMpOwotICAgIH0KLSAgICB2YXIgZGV0ZXJtaW5pbmcgPSB2
LmRldGVybWluZWRCeTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuY29uc3RyYWludHMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgIHZhciBuZXh0ID0gdi5jb25zdHJhaW50cy5hdChpKTsKLSAgICAg
IGlmIChuZXh0ICE9IGRldGVybWluaW5nICYmIG5leHQuaXNTYXRpc2ZpZWQoKSkgewotICAgICAg
ICBuZXh0LnJlY2FsY3VsYXRlKCk7Ci0gICAgICAgIHRvZG8uYWRkKG5leHQub3V0cHV0KCkpOwot
ICAgICAgfQotICAgICAgdHJ5IHsgZXhjZXB0aW9uKCk7IH0gY2F0Y2goZSkgeyB9Ci0gICAgfQot
ICB9Ci0gIHJldHVybiB1bnNhdGlzZmllZDsKLX0KLQotUGxhbm5lci5wcm90b3R5cGUuYWRkQ29u
c3RyYWludHNDb25zdW1pbmdUbyA9IGZ1bmN0aW9uICh2LCBjb2xsKSB7Ci0gIHZhciBkZXRlcm1p
bmluZyA9IHYuZGV0ZXJtaW5lZEJ5OwotICB2YXIgY2MgPSB2LmNvbnN0cmFpbnRzOwotICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNjLnNpemUoKTsgaSsrKSB7Ci0gICAgdmFyIGMgPSBjYy5hdChpKTsK
LSAgICB0cnkgeyBleGNlcHRpb24oKTsgfSBjYXRjaChlKSB7IH0KLSAgICBpZiAoYyAhPSBkZXRl
cm1pbmluZyAmJiBjLmlzU2F0aXNmaWVkKCkpCi0gICAgICBjb2xsLmFkZChjKTsKLSAgfQotfQot
Ci0vKiAtLS0gKgotICogUCBsIGEgbgotICogLS0tICovCi0KLS8qKgotICogQSBQbGFuIGlzIGFu
IG9yZGVyZWQgbGlzdCBvZiBjb25zdHJhaW50cyB0byBiZSBleGVjdXRlZCBpbiBzZXF1ZW5jZQot
ICogdG8gcmVzYXRpc2Z5IGFsbCBjdXJyZW50bHkgc2F0aXNmaWFibGUgY29uc3RyYWludHMgaW4g
dGhlIGZhY2Ugb2YKLSAqIG9uZSBvciBtb3JlIGNoYW5naW5nIGlucHV0cy4KLSAqLwotZnVuY3Rp
b24gUGxhbigpIHsKLSAgdGhpcy52ID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7Ci19Ci0KLVBs
YW4ucHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgewotICB0aGlzLnYuYWRk
KGMpOwotfQotCi1QbGFuLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkgewotICByZXR1cm4g
dGhpcy52LnNpemUoKTsKLX0KLQotUGxhbi5wcm90b3R5cGUuY29uc3RyYWludEF0ID0gZnVuY3Rp
b24gKGluZGV4KSB7Ci0gIHJldHVybiB0aGlzLnYuYXQoaW5kZXgpOwotfQotCi1QbGFuLnByb3Rv
dHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewotICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
c2l6ZSgpOyBpKyspIHsKLSAgICB2YXIgYyA9IHRoaXMuY29uc3RyYWludEF0KGkpOwotICAgIHRy
eSB7IGV4Y2VwdGlvbigpOyB9IGNhdGNoKGUpIHsgfQotICAgIGMuZXhlY3V0ZSgpOwotICB9Ci19
Ci0KLS8qIC0tLSAqCi0gKiBNIGEgaSBuCi0gKiAtLS0gKi8KLQotLyoqCi0gKiBUaGlzIGlzIHRo
ZSBzdGFuZGFyZCBEZWx0YUJsdWUgYmVuY2htYXJrLiBBIGxvbmcgY2hhaW4gb2YgZXF1YWxpdHkK
LSAqIGNvbnN0cmFpbnRzIGlzIGNvbnN0cnVjdGVkIHdpdGggYSBzdGF5IGNvbnN0cmFpbnQgb24g
b25lIGVuZC4gQW4KLSAqIGVkaXQgY29uc3RyYWludCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBvcHBv
c2l0ZSBlbmQgYW5kIHRoZSB0aW1lIGlzCi0gKiBtZWFzdXJlZCBmb3IgYWRkaW5nIGFuZCByZW1v
dmluZyB0aGlzIGNvbnN0cmFpbnQsIGFuZCBleHRyYWN0aW5nCi0gKiBhbmQgZXhlY3V0aW5nIGEg
Y29uc3RyYWludCBzYXRpc2ZhY3Rpb24gcGxhbi4gVGhlcmUgYXJlIHR3byBjYXNlcy4KLSAqIElu
IGNhc2UgMSwgdGhlIGFkZGVkIGNvbnN0cmFpbnQgaXMgc3Ryb25nZXIgdGhhbiB0aGUgc3RheQot
ICogY29uc3RyYWludCBhbmQgdmFsdWVzIG11c3QgcHJvcGFnYXRlIGRvd24gdGhlIGVudGlyZSBs
ZW5ndGggb2YgdGhlCi0gKiBjaGFpbi4gSW4gY2FzZSAyLCB0aGUgYWRkZWQgY29uc3RyYWludCBp
cyB3ZWFrZXIgdGhhbiB0aGUgc3RheQotICogY29uc3RyYWludCBzbyBpdCBjYW5ub3QgYmUgYWNj
b21vZGF0ZWQuIFRoZSBjb3N0IGluIHRoaXMgY2FzZSBpcywKLSAqIG9mIGNvdXJzZSwgdmVyeSBs
b3cuIFR5cGljYWwgc2l0dWF0aW9ucyBsaWUgc29tZXdoZXJlIGJldHdlZW4gdGhlc2UKLSAqIHR3
byBleHRyZW1lcy4KLSAqLwotZnVuY3Rpb24gY2hhaW5UZXN0KG4pIHsKLSAgcGxhbm5lciA9IG5l
dyBQbGFubmVyKCk7Ci0gIHZhciBwcmV2ID0gbnVsbCwgZmlyc3QgPSBudWxsLCBsYXN0ID0gbnVs
bDsKLQotICAvLyBCdWlsZCBjaGFpbiBvZiBuIGVxdWFsaXR5IGNvbnN0cmFpbnRzCi0gIGZvciAo
dmFyIGkgPSAwOyBpIDw9IG47IGkrKykgewotICAgIHZhciBuYW1lID0gInYiICsgaTsKLSAgICB2
YXIgdiA9IG5ldyBWYXJpYWJsZShuYW1lKTsKLSAgICBpZiAocHJldiAhPSBudWxsKQotICAgICAg
bmV3IEVxdWFsaXR5Q29uc3RyYWludChwcmV2LCB2LCBTdHJlbmd0aC5SRVFVSVJFRCk7Ci0gICAg
aWYgKGkgPT0gMCkgZmlyc3QgPSB2OwotICAgIGlmIChpID09IG4pIGxhc3QgPSB2OwotICAgIHRy
eSB7IGV4Y2VwdGlvbigpOyB9IGNhdGNoKGUpIHsgfQotICAgIHByZXYgPSB2OwotICB9Ci0KLSAg
bmV3IFN0YXlDb25zdHJhaW50KGxhc3QsIFN0cmVuZ3RoLlNUUk9OR19ERUZBVUxUKTsKLSAgdmFy
IGVkaXQgPSBuZXcgRWRpdENvbnN0cmFpbnQoZmlyc3QsIFN0cmVuZ3RoLlBSRUZFUlJFRCk7Ci0g
IHZhciBlZGl0cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigpOwotICBlZGl0cy5hZGQoZWRpdCk7
Ci0gIHZhciBwbGFuID0gcGxhbm5lci5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyhlZGl0cyk7
Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLSAgICBmaXJzdC52YWx1ZSA9IGk7
Ci0gICAgcGxhbi5leGVjdXRlKCk7Ci0gICAgaWYgKGxhc3QudmFsdWUgIT0gaSkKLSAgICAgIGFs
ZXJ0KCJDaGFpbiB0ZXN0IGZhaWxlZC4iKTsKLSAgICB0cnkgeyBleGNlcHRpb24oKTsgfSBjYXRj
aChlKSB7IH0KLSAgfQotfQotCi0vKioKLSAqIFRoaXMgdGVzdCBjb25zdHJ1Y3RzIGEgdHdvIHNl
dHMgb2YgdmFyaWFibGVzIHJlbGF0ZWQgdG8gZWFjaAotICogb3RoZXIgYnkgYSBzaW1wbGUgbGlu
ZWFyIHRyYW5zZm9ybWF0aW9uIChzY2FsZSBhbmQgb2Zmc2V0KS4gVGhlCi0gKiB0aW1lIGlzIG1l
YXN1cmVkIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9uIGVpdGhlciBzaWRlIG9mIHRoZQotICogbWFw
cGluZyBhbmQgdG8gY2hhbmdlIHRoZSBzY2FsZSBhbmQgb2Zmc2V0IGZhY3RvcnMuCi0gKi8KLWZ1
bmN0aW9uIHByb2plY3Rpb25UZXN0KG4pIHsKLSAgcGxhbm5lciA9IG5ldyBQbGFubmVyKCk7Ci0g
IHZhciBzY2FsZSA9IG5ldyBWYXJpYWJsZSgic2NhbGUiLCAxMCk7Ci0gIHZhciBvZmZzZXQgPSBu
ZXcgVmFyaWFibGUoIm9mZnNldCIsIDEwMDApOwotICB2YXIgc3JjID0gbnVsbCwgZHN0ID0gbnVs
bDsKLQotICB2YXIgZGVzdHMgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oKTsKLSAgZm9yICh2YXIg
aSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBzcmMgPSBuZXcgVmFyaWFibGUoInNyYyIgKyBpLCBp
KTsKLSAgICBkc3QgPSBuZXcgVmFyaWFibGUoImRzdCIgKyBpLCBpKTsKLSAgICBkZXN0cy5hZGQo
ZHN0KTsKLSAgICB0cnkgeyBleGNlcHRpb24oKTsgfSBjYXRjaChlKSB7IH0KLSAgICBuZXcgU3Rh
eUNvbnN0cmFpbnQoc3JjLCBTdHJlbmd0aC5OT1JNQUwpOwotICAgIG5ldyBTY2FsZUNvbnN0cmFp
bnQoc3JjLCBzY2FsZSwgb2Zmc2V0LCBkc3QsIFN0cmVuZ3RoLlJFUVVJUkVEKTsKLSAgfQotCi0g
IGNoYW5nZShzcmMsIDE3KTsKLSAgaWYgKGRzdC52YWx1ZSAhPSAxMTcwKSBhbGVydCgiUHJvamVj
dGlvbiAxIGZhaWxlZCIpOwotICBjaGFuZ2UoZHN0LCAxMDUwKTsKLSAgaWYgKHNyYy52YWx1ZSAh
PSA1KSBhbGVydCgiUHJvamVjdGlvbiAyIGZhaWxlZCIpOwotICBjaGFuZ2Uoc2NhbGUsIDUpOwot
ICBmb3IgKHZhciBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKLSAgICBpZiAoZGVzdHMuYXQoaSku
dmFsdWUgIT0gaSAqIDUgKyAxMDAwKQotICAgICAgYWxlcnQoIlByb2plY3Rpb24gMyBmYWlsZWQi
KTsKLSAgICB0cnkgeyBleGNlcHRpb24oKTsgfSBjYXRjaChlKSB7IH0KLSAgfQotICBjaGFuZ2Uo
b2Zmc2V0LCAyMDAwKTsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7Ci0gICAg
aWYgKGRlc3RzLmF0KGkpLnZhbHVlICE9IGkgKiA1ICsgMjAwMCkKLSAgICAgIGFsZXJ0KCJQcm9q
ZWN0aW9uIDQgZmFpbGVkIik7Ci0gICAgdHJ5IHsgZXhjZXB0aW9uKCk7IH0gY2F0Y2goZSkgeyB9
Ci0gIH0KLX0KLQotZnVuY3Rpb24gY2hhbmdlKHYsIG5ld1ZhbHVlKSB7Ci0gIHZhciBlZGl0ID0g
bmV3IEVkaXRDb25zdHJhaW50KHYsIFN0cmVuZ3RoLlBSRUZFUlJFRCk7Ci0gIHZhciBlZGl0cyA9
IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigpOwotICBlZGl0cy5hZGQoZWRpdCk7Ci0gIHZhciBwbGFu
ID0gcGxhbm5lci5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyhlZGl0cyk7Ci0gIGZvciAodmFy
IGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgIHYudmFsdWUgPSBuZXdWYWx1ZTsKLSAgICBwbGFu
LmV4ZWN1dGUoKTsKLSAgfQotICBlZGl0LmRlc3Ryb3lDb25zdHJhaW50KCk7Ci19Ci0KLS8vIEds
b2JhbCB2YXJpYWJsZSBob2xkaW5nIHRoZSBjdXJyZW50IHBsYW5uZXIuCi12YXIgcGxhbm5lciA9
IG51bGw7Ci0KLWZ1bmN0aW9uIGRlbHRhQmx1ZSgpIHsKLSAgY2hhaW5UZXN0KDEwMCk7Ci0gIHBy
b2plY3Rpb25UZXN0KDEwMCk7Ci19Ci0KLXsKLSAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOwot
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTA7ICsraSkKLSAgICAgICAgZGVsdGFCbHVlKCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zha2UtaXRlcmF0b3JzLXRo
YXQtdGhyb3ctd2hlbi1maW5pc2hlZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zha2Ut
aXRlcmF0b3JzLXRoYXQtdGhyb3ctd2hlbi1maW5pc2hlZC5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTVjNjUzNDQ5ZjVjZTIzZmUzZmZjMWY2ZmU0NWM0ZDA4NTgwZjYzNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9mYWtlLWl0ZXJhdG9ycy10aGF0LXRocm93LXdoZW4tZmluaXNoZWQuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi1mdW5jdGlvbiBhc3NlcnQoYikgewotICAgIGlm
ICghYikKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQiKTsKLX0KLQotY2xhc3MgTnVtYmVy
cyB7Ci0gICAgY29uc3RydWN0b3IobGltaXQgPSAxMDApIHsKLSAgICAgICAgdGhpcy5saW1pdCA9
IGxpbWl0OwotICAgICAgICB0aGlzLml0ZW0gPSAwOwotICAgIH0KLQotICAgIG5leHQoKSB7Ci0g
ICAgICAgIGlmICh0aGlzLml0ZW0gPj0gdGhpcy5saW1pdCkKLSAgICAgICAgICAgIHRocm93ICJk
b25lIjsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXRlbSsrOwotICAgIH0KLX0KLQotZnVuY3Rpb24g
dHJhbnNwb3NlKEksIGYpIHsKLSAgICByZXR1cm4gY2xhc3MgVHJhbnNwb3NlIHsKLSAgICAgICAg
Y29uc3RydWN0b3IoLi4uYXJncykgewotICAgICAgICAgICAgdGhpcy5pdGVyYXRvciA9IG5ldyBJ
KC4uLmFyZ3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV4dCgpIHsKLSAgICAgICAgICAgIHJl
dHVybiBmKHRoaXMuaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLWxl
dCBFdmVuTnVtYmVycyA9IHRyYW5zcG9zZShOdW1iZXJzLCAoeCk9PngqMik7Ci1mdW5jdGlvbiB2
ZXJpZnlFdmVuKHByZXYsIGN1cikgewotICAgIGFzc2VydChjdXIudmFsdWUgJSAyID09PSAwKTsK
LSAgICBhc3NlcnQoIXByZXYudmFsdWUgfHwgcHJldi52YWx1ZSsyID09PSBjdXIudmFsdWUpOwot
fQotCi1sZXQgU3RyaW5nTnVtYmVycyA9IHRyYW5zcG9zZShOdW1iZXJzLCAoeCk9PmAke3h9YCk7
Ci1mdW5jdGlvbiB2ZXJpZnlTdHJpbmcoXywgY3VyKSB7Ci0gICAgYXNzZXJ0KGN1ci52YWx1ZSA9
PT0gYCR7Y3VyLnZhbHVlfWApOwotfQotCi1sZXQgaXRlcmF0b3JzID0gWwotICAgIFtOdW1iZXJz
LCBmdW5jdGlvbigpIHt9XSwKLSAgICBbTnVtYmVycywgZnVuY3Rpb24oKSB7fV0sCi0gICAgW1N0
cmluZ051bWJlcnMsIHZlcmlmeVN0cmluZ10sCi0gICAgW0V2ZW5OdW1iZXJzLCB2ZXJpZnlFdmVu
XSwKLSAgICBbRXZlbk51bWJlcnMsIHZlcmlmeUV2ZW5dLAotXTsKLQotZnVuY3Rpb24gZm9vKGkp
IHt9Ci1ub0lubGluZShmb28pOwotCi1mdW5jdGlvbiBydW5JdGVyYXRvcnMoKSB7Ci0gICAgZm9y
IChsZXQgW2l0ZXJhdG9yLCB2ZXJpZnldIG9mIGl0ZXJhdG9ycykgewotICAgICAgICBsZXQgaSA9
IG5ldyBpdGVyYXRvcjsKLSAgICAgICAgbGV0IHByZXYgPSB7fTsKLSAgICAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgICAgIGxldCBjdXIgPSB7fTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICAgICAgY3VyLnZhbHVlID0gaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgdmVyaWZ5
KHByZXYsIGN1cik7Ci0gICAgICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoZSAhPT0gImRvbmUiKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZDogIiArIGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcHJldiA9IGN1cjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotewotICAgIGxldCBzdGFy
dCA9IERhdGUubm93KCk7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwOyArK2kpCi0gICAg
ICAgIHJ1bkl0ZXJhdG9ycygpOwotICAgIGlmIChmYWxzZSkKLSAgICAgICAgcHJpbnQoRGF0ZS5u
b3coKSAtIHN0YXJ0KTsKLX0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3Ry
eS1jYXRjaC13b3JkLWNvdW50LmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdHJ5LWNhdGNo
LXdvcmQtY291bnQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYmU4MmNhN2Rk
ODk4NWQzZGUyMjQ2ZGEyNmU3ODYwNTZkY2Y3YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdHJ5LWNhdGNoLXdv
cmQtY291bnQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MDMgKzAsMCBAQAotInVzZSBzdHJpY3Qi
OwotCi1sZXQgYXNzZXJ0ID0gKGIsIG0pID0+IHsKLSAgICBpZiAoIWIpCi0gICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbjogIiArIG0pOwotfQotCi1jbGFzcyBFT0YgZXh0ZW5k
cyBFcnJvciB7IH07Ci0KLWxldCB0ZXh0cyA9IFtgZnVuY3Rpb24gZm9vKCkgewotICAgIHZhciBv
ID0ge307Ci0gICAgby5hID0gMTsKLSAgICBvLmIgPSAyOwotICAgIG8uYyA9IDM7Ci0gICAgby5k
ID0gNDsKLSAgICBvLmUgPSA1OwotICAgIG8uZiA9IDY7Ci0gICAgby5nID0gNzsKLSAgICByZXR1
cm4gbzsKLX0KLQotdmFyIHJlc3VsdCA9IDA7Ci1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsg
KytpKQotICAgIHJlc3VsdCArPSBmb28oKS5hOwotCi1pZiAocmVzdWx0ICE9IDEwMDAwMCkKLSAg
ICB0aHJvdyAiRXJyb3IsIGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Ci0KLWAsYCJ1c2Ugc3RyaWN0
IjsKLQotKGZ1bmN0aW9uKCkgewotICAgIGxldCBvID0gewotICAgICAgICBhcHBseShhLCBiKSB7
Ci0gICAgICAgICAgICByZXR1cm4gYSArIGI7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIAotICAg
IGZ1bmN0aW9uIGZvbygpIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKQotICAgICAgICAgICAgcmVzdWx0ID0gby5hcHBseShy
ZXN1bHQsIDEpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBub0lu
bGluZShmb28pOwotICAgIAotICAgIGxldCByZXN1bHQgPSAwOwotICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9IGZvbygpOwotICAgIAotICAgIGlm
IChyZXN1bHQgIT0gMTAwMDAwMDApCi0gICAgICAgIHRocm93IG5ldyAiQmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKLX0pKCk7Ci0KLWAsYGZ1bmN0aW9uIGZvbyhhLCBiKSB7Ci0gICAgcmV0dXJuIGFy
Z3VtZW50c1swXSArIGI7Ci19Ci0KLW5vSW5saW5lKGZvbyk7Ci0KLWZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwMDsgKytpKSB7Ci0gICAgdmFyIHJlc3VsdCA9IGZvbyhpLCAxKTsKLSAgICBpZiAo
cmVzdWx0ICE9IGkgKyAxKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Ci19Ci1gLGBmdW5jdGlvbiBmb28oKSB7IHJldHVybiBhcmd1bWVudHM7IH0KLW5vSW5s
aW5lKGZvbyk7Ci0KLWZ1bmN0aW9uIGJhcihvKSB7Ci0gICAgdmFyIHRtcCA9IG9bMF07Ci0gICAg
dmFyIHJlc3VsdCA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKLSAg
ICAgICAgaWYgKHRtcCkKLSAgICAgICAgICAgIHJlc3VsdCArPSB0bXAgKiBpOwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotbm9JbmxpbmUoYmFyKTsKLQotdmFyIHJlc3VsdCA9IDA7Ci12
YXIgbyA9IGZvbygpOwotZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQotICAgIHJlc3Vs
dCArPSBiYXIobyk7Ci0KLWlmIChyZXN1bHQgIT09IDApCi0gICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OwotYCxgZnVuY3Rpb24gZm9vKCkgewotICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICByZXR1cm4gWy4uLmFyZ3VtZW50c107Ci0KLX0KLQotbm9JbmxpbmUoZm9vKTsKLQot
Zm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDA7ICsraSkgewotICAgIHZhciByZXN1bHQgPSBmb28o
aSk7Ci0gICAgaWYgKHJlc3VsdFswXSAhPSBpKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Ci19Ci1gLGBmdW5jdGlvbiBmb28oKSB7Ci0gICAgcmV0dXJuIGFy
Z3VtZW50c1swXTsKLX0KLQotbm9JbmxpbmUoZm9vKTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDAwOyArK2kpIHsKLSAgICB2YXIgcmVzdWx0ID0gZm9vKGkpOwotICAgIGlmIChyZXN1bHQg
IT0gaSkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwotfQot
YCxgZnVuY3Rpb24gZm9vKGEsIGIpIHsKLSAgICByZXR1cm4gYSArIGI7Ci19Ci0KLWZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKLSAgICB2YXIgcmVzdWx0ID0gZm9vKDEsIDIsIDMp
OwotICAgIGlmIChyZXN1bHQgIT0gMykKLSAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Ci19Ci0KLWAsYGZ1bmN0aW9uIGZvbyhhKSB7Ci0gICAgdmFyIHJlc3VsdCA9IGFbMF07
Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmVzdWx0ICs9IGFbMV07Ci0gICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgcmVzdWx0ICs9IGFbMl07Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmVz
dWx0ICs9IGFbM107Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmVzdWx0ICs9IGFbNF07Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdmFyIHJlc3VsdCA9IDA7Ci0KLWZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDAwOyArK2kpIHsKLSAgICB2YXIgYXJyYXkgPSBbMSwgMiwgMywgNCwgNV07Ci0g
ICAgaWYgKGkgJiAxKQotICAgICAgICBhcnJheS5mID0gNDI7Ci0gICAgcmVzdWx0ICs9IGZvbyhh
cnJheSk7Ci19Ci0KLWlmIChyZXN1bHQgIT0gMTUwMDAwMCkKLSAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7Ci1gLGAvL0AgcnVuTm9GVEwKLQotdmFyIGYgPSBmdW5jdGlv
bihhKSB7Ci0gICAgdmFyIHN1bSA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgIHN1bSArPSBhW2ldOwotICAgIH0gICAKLSAgICByZXR1cm4gc3Vt
OwotfTsKLQotdmFyIHJ1biA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBvMSA9IFtdOyAKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0gICAgICAgIG8xW2ldID0gaTsKLSAgICB9
Ci0gICAgCi0gICAgdmFyIG8yID0ge307IAotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbzEubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgbzJbaV0gPSBvMVtpXTsKLSAgICB9Ci0gICAgbzIubGVuZ3Ro
ID0gbzEubGVuZ3RoOwotCi0gICAgdmFyIHN1bSA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDA7IGkrKykgewotICAgICAgICBpZiAoaSAlIDIgPT09IDApCi0gICAgICAgICAgICBz
dW0gKz0gZihvMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN1bSArPSBmKG8yKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN1bTsKLX07Ci0KLXZhciByZXN1bHQgPSBydW4oKTsKLWlmIChyZXN1
bHQgIT09IDQ5NTAwMDAwMCkKLSAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKLWAs
YHZhciByZXN1bHQgPSAwOwotZnVuY3Rpb24gdGVzdDEoYSkgewotICAgIHJlc3VsdCA8PCAxOwot
ICAgIHJlc3VsdCsrOwotICAgIHJldHVybiB0cnVlOwotfQotZnVuY3Rpb24gdGVzdDIoYSxiKSB7
Ci0gICAgcmVzdWx0IF49IDM7Ci0gICAgcmVzdWx0ICo9IDM7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci1mdW5jdGlvbiB0ZXN0MyhhLGIsYykgewotICAgIHJlc3VsdCBePSByZXN1bHQgPj4gMTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdmFyIHJlc3VsdCA9IDA7Ci12YXIgYXJyYXkgPSBbXQotZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKLSAgICBhcnJheVtpXSA9IDE7Ci0KLWZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgIGFycmF5LmV2ZXJ5KHRlc3QxKTsKLSAgICBh
cnJheS5ldmVyeSh0ZXN0Mik7Ci0gICAgYXJyYXkuZXZlcnkodGVzdDMpOwotfQotCi1pZiAocmVz
dWx0ICE9IDE0Mjg4MTA0OTYpCi0gICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OwotYCxgdmFyIHJlc3VsdCA9IDA7Ci1mdW5jdGlvbiB0ZXN0MShhKSB7Ci0gICAgcmVzdWx0
IDw8IDE7Ci0gICAgcmVzdWx0Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci1mdW5jdGlvbiB0ZXN0
MihhLGIpIHsKLSAgICByZXN1bHQgXj0gMzsKLSAgICByZXN1bHQgKj0gMzsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLWZ1bmN0aW9uIHRlc3QzKGEsYixjKSB7Ci0gICAgcmVzdWx0IF49IHJlc3VsdCA+
PiAxOwotICAgIHJldHVybiB0cnVlOwotfQotCi12YXIgcmVzdWx0ID0gMDsKLXZhciBhcnJheSA9
IFtdCi1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQotICAgIGFycmF5W2ldID0gMTsK
LQotZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgYXJyYXkuZm9yRWFjaCh0ZXN0
MSk7Ci0gICAgYXJyYXkuZm9yRWFjaCh0ZXN0Mik7Ci0gICAgYXJyYXkuZm9yRWFjaCh0ZXN0Myk7
Ci19Ci0KLWlmIChyZXN1bHQgIT0gMTQyODgxMDQ5NikKLSAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Ci1gLGB2YXIgcmVzdWx0ID0gMDsKLWZ1bmN0aW9uIHRlc3QxKGEp
IHsKLSAgICByZXN1bHQgPDwgMTsKLSAgICByZXN1bHQrKzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LWZ1bmN0aW9uIHRlc3QyKGEsYikgewotICAgIHJlc3VsdCBePSAzOwotICAgIHJlc3VsdCAqPSAz
OwotICAgIHJldHVybiB0cnVlOwotfQotZnVuY3Rpb24gdGVzdDMoYSxiLGMpIHsKLSAgICByZXN1
bHQgXj0gcmVzdWx0ID4+IDE7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZhciByZXN1bHQgPSAw
OwotdmFyIGFycmF5ID0gW10KLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCi0gICAg
YXJyYXlbaV0gPSAxOwotCi1mb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICBhcnJh
eS5tYXAodGVzdDEpOwotICAgIGFycmF5Lm1hcCh0ZXN0Mik7Ci0gICAgYXJyYXkubWFwKHRlc3Qz
KTsKLX0KLQotaWYgKHJlc3VsdCAhPSAxNDI4ODEwNDk2KQotICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKLWAsYHZhciByZXN1bHQgPSAwOwotZnVuY3Rpb24gdGVzdDEo
YSkgewotICAgIHJlc3VsdCA8PCAxOwotICAgIHJlc3VsdCsrOwotICAgIHJldHVybiB0cnVlOwot
fQotZnVuY3Rpb24gdGVzdDIoYSxiKSB7Ci0gICAgcmVzdWx0IF49IDM7Ci0gICAgcmVzdWx0ICo9
IDM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci1mdW5jdGlvbiB0ZXN0MyhhLGIsYykgewotICAgIHJl
c3VsdCBePSByZXN1bHQgPj4gMTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdmFyIHJlc3VsdCA9
IDA7Ci12YXIgYXJyYXkgPSBbXQotZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKLSAg
ICBhcnJheVtpXSA9IDE7Ci0KLWZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgIGFy
cmF5LnJlZHVjZSh0ZXN0MSwge30pOwotICAgIGFycmF5LnJlZHVjZSh0ZXN0Miwge30pOwotICAg
IGFycmF5LnJlZHVjZSh0ZXN0Mywge30pOwotfQotCi1pZiAocmVzdWx0ICE9IDE0Mjg4MTA0OTYp
Ci0gICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwotYCxgdmFyIHJlc3Vs
dCA9IDA7Ci1mdW5jdGlvbiB0ZXN0MShhKSB7Ci0gICAgcmVzdWx0IDw8IDE7Ci0gICAgcmVzdWx0
Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci1mdW5jdGlvbiB0ZXN0MihhLGIpIHsKLSAgICByZXN1
bHQgXj0gMzsKLSAgICByZXN1bHQgKj0gMzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLWZ1bmN0aW9u
IHRlc3QzKGEsYixjKSB7Ci0gICAgcmVzdWx0IF49IHJlc3VsdCA+PiAxOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12YXIgcmVzdWx0ID0gMDsKLXZhciBhcnJheSA9IFtdCi1mb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwMDsgKytpKQotICAgIGFycmF5W2ldID0gMTsKLQotZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgaSsrKSB7Ci0gICAgYXJyYXkucmVkdWNlUmlnaHQodGVzdDEsIHt9KTsKLSAgICBh
cnJheS5yZWR1Y2VSaWdodCh0ZXN0Miwge30pOwotICAgIGFycmF5LnJlZHVjZVJpZ2h0KHRlc3Qz
LCB7fSk7Ci19Ci0KLWlmIChyZXN1bHQgIT0gMTQyODgxMDQ5NikKLSAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Ci1gLGB2YXIgcmVzdWx0ID0gMDsKLWZ1bmN0aW9uIHRl
c3QxKGEpIHsKLSAgICByZXN1bHQgPDwgMTsKLSAgICByZXN1bHQrKzsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci1mdW5jdGlvbiB0ZXN0MihhLGIpIHsKLSAgICByZXN1bHQgXj0gMzsKLSAgICByZXN1
bHQgKj0gMzsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci1mdW5jdGlvbiB0ZXN0MyhhLGIsYykgewot
ICAgIHJlc3VsdCBePSByZXN1bHQgPj4gMTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZhciBy
ZXN1bHQgPSAwOwotdmFyIGFycmF5ID0gW10KLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyAr
K2kpCi0gICAgYXJyYXlbaV0gPSAxOwotCi1mb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsK
LSAgICBhcnJheS5zb21lKHRlc3QxKTsKLSAgICBhcnJheS5zb21lKHRlc3QyKTsKLSAgICBhcnJh
eS5zb21lKHRlc3QzKTsKLX0KLQotaWYgKHJlc3VsdCAhPSAxNDI4ODEwNDk2KQotICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKLWAsYGZ1bmN0aW9uIGZvbygpIHsKLSAg
ICB2YXIgYSA9IG5ldyBBcnJheSgxMDAwKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7
ICsraSkgewotICAgICAgICBpZiAoaSAlIDcgPT09IDApCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgYVtpXSA9IGk7Ci0gICAgfQotCi0gICAgdmFyIG5pdGVycyA9IDEwMDAwOwotICAg
IHZhciByZW1vdmUgPSB0cnVlOwotICAgIHZhciBsYXN0UmVtb3ZlZEl0ZW0gPSBudWxsOwotICAg
IHZhciBsYXN0UmVtb3ZlZEluZGV4ID0gbnVsbDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5p
dGVyczsgKytpKSB7Ci0gICAgICAgIGlmIChyZW1vdmUpIHsKLSAgICAgICAgICAgIGxhc3RSZW1v
dmVkSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhLmxlbmd0aCk7Ci0gICAgICAg
ICAgICBsYXN0UmVtb3ZlZEl0ZW0gPSBhW2xhc3RSZW1vdmVkSW5kZXhdOwotICAgICAgICAgICAg
YS5zcGxpY2UobGFzdFJlbW92ZWRJbmRleCwgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBhLnNwbGljZShsYXN0UmVtb3ZlZEluZGV4LCAwLCBsYXN0UmVtb3ZlZEl0ZW0pOwotICAg
ICAgICB9Ci0gICAgICAgIHJlbW92ZSA9ICFyZW1vdmU7Ci0gICAgfQotICAgIGlmIChhLmxlbmd0
aCAhPT0gMTAwMCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgbGVuZ3RoIik7
Ci19OwotZm9vKCk7Ci1gLGBmdW5jdGlvbiBmb28oKSB7Ci0gICAgdmFyIGEgPSBbXTsKLSAgICB2
YXIgYiA9IFtdOwotICAgIAotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0g
ICAgICAgIGEucHVzaChpICsgMC41KTsKLSAgICAgICAgYi5wdXNoKGkgLSAwLjUpOwotICAgIH0K
LSAgICAKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgewotICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IGEubGVuZ3RoOyArK2opCi0gICAgICAgICAgICBhW2pdICs9IGJbal07
Ci0gICAgfQotCi0gICAgdmFyIHJlc3VsdCA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
Lmxlbmd0aDsgKytpKQotICAgICAgICByZXN1bHQgKz0gYVtpXTsKLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12YXIgcmVzdWx0ID0gZm9vKCk7Ci1pZiAocmVzdWx0ICE9IDQ5OTUwMDAw
MCkKLSAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKLQotYCxgZnVuY3Rpb24gZm9v
KCkgewotICAgIHZhciBhcnJheSA9IFtdOwotICAgIAotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDsgKytpKQotICAgICAgICBhcnJheS5wdXNoKGkgKyAwLjUpOwotICAgIAotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
YXJyYXkubGVuZ3RoOyArK2opCi0gICAgICAgICAgICBhcnJheVtqXSsrOwotICAgIH0KLQotICAg
IHZhciByZXN1bHQgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyAr
K2kpCi0gICAgICAgIHJlc3VsdCArPSBhcnJheVtpXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12YXIgcmVzdWx0ID0gZm9vKCk7Ci1pZiAocmVzdWx0ICE9IDE1MDAwMDApCi0gICAg
dGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Ci0KLQotYCxgZnVuY3Rpb24gZm9vKCkgewot
ICAgIHZhciBhID0gW107Ci0gICAgdmFyIGIgPSBbXTsKLSAgICB2YXIgYyA9IFtdOwotICAgIAot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0gICAgICAgIGEucHVzaChpICsg
MC41KTsKLSAgICAgICAgYi5wdXNoKGkgLSAwLjUpOwotICAgICAgICBjLnB1c2goKGkgJSAyKSA/
IDAuNSA6IC0wLjI1KTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
OyArK2kpIHsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0aDsgKytqKQotICAg
ICAgICAgICAgYVtqXSArPSBiW2pdICogY1tqXTsKLSAgICB9Ci0KLSAgICB2YXIgcmVzdWx0ID0g
MDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3Vs
dCArPSBhW2ldOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZhciByZXN1bHQgPSBm
b28oKTsKLWlmIChyZXN1bHQgIT0gNjMwNjI1MDApCi0gICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIg
KyByZXN1bHQ7Ci0KLQotYCxgZnVuY3Rpb24gZm9vKCkgewotICAgIHZhciBhcnJheSA9IFtdOwot
ICAgIAotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKQotICAgICAgICBhcnJheS5w
dXNoKGkgKyAwLjUpOwotICAgIAotICAgIHZhciByZXN1bHQgPSAwOwotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXku
bGVuZ3RoOyArK2opCi0gICAgICAgICAgICByZXN1bHQgKz0gYXJyYXlbal07Ci0gICAgfQotICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlmIChmb28oKSAhPSA1MDAwMDAwMDApCi0gICAg
dGhyb3cgIkVSUk9SIjsKLQotYCxgZnVuY3Rpb24gZm9vKCkgewotICAgIHZhciBhID0gW107Ci0g
ICAgdmFyIGIgPSBbXTsKLSAgICAKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkg
ewotICAgICAgICBhLnB1c2goaSArIDEpOwotICAgICAgICBiLnB1c2goaSAtIDEpOwotICAgIH0K
LSAgICAKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgewotICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IGEubGVuZ3RoOyArK2opCi0gICAgICAgICAgICBhW2pdICs9IGJbal07
Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYS5sZW5ndGg7ICsraikKLSAgICAgICAgICAg
IGFbal0gLT0gYltqXTsKLSAgICB9Ci0KLSAgICB2YXIgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBhW2ldOwotICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlmIChmb28oKSAhPSA1MDA1MDApCi0gICAgdGhy
b3cgIkVSUk9SIjsKLQotCi1gLGBmdW5jdGlvbiBmb28oKSB7Ci0gICAgdmFyIGFycmF5ID0gW107
Ci0gICAgCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCi0gICAgICAgIGFycmF5
LnB1c2goaSArICgoaSAlIDIpID8gMC41IDogMCkpOwotICAgIAotICAgIHZhciByZXN1bHQgPSAw
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0gICAgICAgIGZvciAodmFy
IGogPSAwOyBqIDwgYXJyYXkubGVuZ3RoOyArK2opCi0gICAgICAgICAgICByZXN1bHQgKz0gYXJy
YXlbal07Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZhciByZXN1bHQg
PSBmb28oKTsKLWlmIChyZXN1bHQgIT0gNDk5NzUwMDAwKQotICAgIHRocm93ICJCYWQgcmVzdWx0
OiAiICsgcmVzdWx0OwotCi1gLGAvL0Agc2tpcAotCi12YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAw
MDApOwotCi1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQotICAgIGFycmF5W2kgJSBh
cnJheS5sZW5ndGhdID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxMDAwKSk7Ci0KLWZv
ciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICBpZiAoYXJyYXlbaV0u
Ynl0ZUxlbmd0aCAhPSAxMDAwKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBsZW5ndGg6ICIg
KyBhcnJheVtpXS5ieXRlTGVuZ3RoOwotICAgIGlmIChhcnJheVtpXS5idWZmZXIuYnl0ZUxlbmd0
aCAhPSAxMDAwKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBidWZmZXIuYnl0ZUxlbmd0aDog
IiArIGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVuZ3RoOwotfQotYCxgLy9AIHNraXAKLQotdmFyIGFy
cmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCA3MDAwMDsgKytp
KQotICAgIGFycmF5W2kgJSBhcnJheS5sZW5ndGhdID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1
ZmZlcigxMCkpOwotCi1mb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0g
ICAgaWYgKGFycmF5W2ldLmJ5dGVMZW5ndGggIT0gMTApCi0gICAgICAgIHRocm93ICJFcnJvcjog
YmFkIGxlbmd0aDogIiArIGFycmF5W2ldLmJ5dGVMZW5ndGg7Ci0gICAgaWYgKGFycmF5W2ldLmJ1
ZmZlci5ieXRlTGVuZ3RoICE9IDEwKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBidWZmZXIu
Ynl0ZUxlbmd0aDogIiArIGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVuZ3RoOwotfQotYCxgLy9AIHNr
aXAKLQotdmFyIHJlc3VsdCA9IDA7Ci12YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDEwKTsK
LXZhciBhcnJheTEgPSBuZXcgSW50MzJBcnJheShidWZmZXIsIDQsIDEpOwotdmFyIGFycmF5MiA9
IG5ldyBVaW50MzJBcnJheSgxMCk7Ci0KLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytp
KSB7Ci0gICAgcmVzdWx0ICs9IGFycmF5MS5ieXRlT2Zmc2V0OwotICAgIHJlc3VsdCArPSBhcnJh
eTIuYnl0ZU9mZnNldDsKLX0KLQotaWYgKHJlc3VsdCAhPSA0MDAwMDAwKQotICAgIHRocm93ICJF
cnJvcjogd3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0OwotYCxgLy9AIHNraXAKLQotdmFyIGFycmF5
ID0gbmV3IEFycmF5KDEwMDAwKTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkK
LSAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQ4QXJyYXkobmV3IEFycmF5QnVm
ZmVyKDEwMDApKTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewot
ICAgIGlmIChhcnJheVtpXS5sZW5ndGggIT0gMTAwMCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgbGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOwotICAgIGlmIChhcnJheVtpXS5idWZmZXIu
Ynl0ZUxlbmd0aCAhPSAxMDAwKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBidWZmZXIuYnl0
ZUxlbmd0aDogIiArIGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVuZ3RoOwotfQotYCxgLy9AIHNraXAK
LQotdmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDA7ICsraSkKLSAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQ4QXJyYXko
bmV3IEFycmF5QnVmZmVyKDEwKSkuYnVmZmVyOwotCi1mb3IgKHZhciBpID0gMDsgaSA8IGFycmF5
Lmxlbmd0aDsgKytpKSB7Ci0gICAgaWYgKGFycmF5W2ldLmJ5dGVMZW5ndGggIT0gMTApCi0gICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIGJ5dGVMZW5ndGg6ICIgKyBhcnJheVtpXS5ieXRlTGVuZ3Ro
OwotfQotYCxgLy9AIHNraXAKLQotdmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKLQotZm9y
ICh2YXIgaSA9IDA7IGkgPCA3MDAwMDsgKytpKQotICAgIGFycmF5W2kgJSBhcnJheS5sZW5ndGhd
ID0gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMTApKTsKLQotZm9yICh2YXIgaSA9IDA7
IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewotICAgIGlmIChhcnJheVtpXS5sZW5ndGggIT0gMTAp
Ci0gICAgICAgIHRocm93ICJFcnJvcjogYmFkIGxlbmd0aDogIiArIGFycmF5W2ldLmxlbmd0aDsK
LSAgICBpZiAoYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGggIT0gMTApCi0gICAgICAgIHRocm93
ICJFcnJvcjogYmFkIGJ1ZmZlci5ieXRlTGVuZ3RoOiAiICsgYXJyYXlbaV0uYnVmZmVyLmJ5dGVM
ZW5ndGg7Ci19Ci1gLGAvL0Agc2tpcAotCi1mb3IgKHZhciBpID0gMDsgaSA8IDcwMDAwOyArK2kp
Ci0gICAgbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMTApKTsKLQotYCxgdmFyIGZuID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICgpID0+IGFyZ3VtZW50c1swXTsKLX0oMSk7Ci0KLWZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKLSAgICBpZihmbigyKSAhPT0gMSkgdGhy
b3cgMDsgCi19Ci1gLGB2YXIgdGVzdFZhbHVlICA9ICd0ZXN0LXZhbHVlJzsKLQotY2xhc3MgQSB7
Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAgICAgIHRoaXMudmFsdWUgPSB0ZXN0VmFsdWU7Ci0g
ICAgfQotfQotCi1jbGFzcyBCIGV4dGVuZHMgQSB7Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAg
ICAgIHN1cGVyKCk7Ci0gICAgICAgIHZhciBhcnJvdyAgPSAoKSA9PiB0ZXN0VmFsdWU7Ci0gICAg
ICAgIGFycm93KCk7Ci0gICAgfQotfQotCi1ub0lubGluZShCKTsKLQotZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDAwOyArK2kpIHsKLSAgICBsZXQgYiA9IG5ldyBCKCk7Ci0gICAgaWYgKGIudmFs
dWUgIT0gdGVzdFZhbHVlKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Ci19Ci1gLGB2YXIgdGVzdFZhbHVlICA9ICd0ZXN0LXZhbHVlJzsKLQotY2xhc3MgQSB7
Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAgICAgIHRoaXMudmFsdWUgPSB0ZXN0VmFsdWU7Ci0g
ICAgfQotCi0gICAgZ2V0VmFsdWUgKCkgewotICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKLSAg
ICB9Ci19Ci0KLWNsYXNzIEIgZXh0ZW5kcyBBIHsKLSAgICBnZXRQYXJlbnRWYWx1ZSgpIHsKLSAg
ICAgICAgdmFyIGFycm93ICA9ICgpID0+IHRlc3RWYWx1ZTsKLSAgICAgICAgcmV0dXJuIGFycm93
KCk7Ci0gICAgfQotfQotCi1mb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7Ci0gICAg
bGV0IGIgPSBuZXcgQigpOwotICAgIGlmIChiLmdldFBhcmVudFZhbHVlKCkgIT0gdGVzdFZhbHVl
KQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Ci19Ci1gLGBm
dW5jdGlvbiBiYXIoYSwgYikgewotICAgIHJldHVybiAoKF9hLCBfYikgPT4gX2EgKyBfYikoYSwg
Yik7Ci19Ci0KLW5vSW5saW5lKGJhcik7Ci0KLWZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwMDsg
KytpKSB7Ci0gICAgbGV0IHJlc3VsdCA9IGJhcigxLCAyKTsKLSAgICBpZiAocmVzdWx0ICE9IDMp
Ci0gICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKLX0KLWAsYHZh
ciBhZiA9IChhLCBiKSA9PiBhICsgYjsKLQotbm9JbmxpbmUoYWYpOwotCi1mdW5jdGlvbiBiYXIo
YSwgYikgewotICAgIHJldHVybiBhZihhLCBiKTsKLX0KLQotbm9JbmxpbmUoYmFyKTsKLQotZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKLSAgICBsZXQgcmVzdWx0ID0gYmFyKDEs
IDIpOwotICAgIGlmIChyZXN1bHQgIT0gMykKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OwotfQotYCxgLy8gVGhlIHN0cmxlbiBmdW5jdGlvbiBpcyBkZXJpdmVk
IGZyb20gaGVyZToKLS8vIGh0dHA6Ly9rcmlwa2VuLmdpdGh1Yi5pby9tbG9jX2Vtc2NyaXB0ZW5f
dGFsay8jLzIwCi0KLXZhciBNRU04ICA9IG5ldyBVaW50OEFycmF5KDEwMjQpOwotCi0vLyBDYWxj
dWxhdGUgbGVuZ3RoIG9mIEMgc3RyaW5nOgotZnVuY3Rpb24gc3RybGVuKHB0cikgewotICBwdHIg
PSBwdHJ8MDsKLSAgdmFyIGN1cnIgPSAwOwotICBjdXJyID0gcHRyOwotICB3aGlsZSAoTUVNOFtj
dXJyXXwwICE9IDApIHsKLSAgICBjdXJyID0gKGN1cnIgKyAxKXwwOwotICB9Ci0gIHJldHVybiAo
Y3VyciAtIHB0cil8MDsKLX0KLQotLy8tLS0tLSBUZXN0IGRyaXZlciAtLS0tCi0KLWZvciAoaSA9
IDA7IGkgPCAxMDI0OyBpKyspIHsKLSBNRU04W2ldID0gaSUxOTg7Ci19Ci0KLU1FTThbN10gPSAw
OwotCi12YXIgc3VtID0gMAotZm9yIChpID0gMDsgaSA8IDEwMDAwMDA7IGkrKykgewotICBzdW0g
Kz0gc3RybGVuKDUpOwotfQotCi1pZiAoc3VtICE9IDIwMDAwMDApCi0gICAgdGhyb3cgIkJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Ci1gLGAKLW8gPSBSZWdFeHA7Ci1qID0gMDsKLWwgPSAyOwoteiA9
IDA7Ci1mdW5jdGlvbiB0ZXN0KG8sIHopIHsKLSAgICB2YXIgayA9IGFyZ3VtZW50c1soKChqIDw8
IDEgfCBsKSA+PiAxKSBeIDEpICYgKHogKj0gMSldOwotICAgIGsuaW5wdXQgPSAwOwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMjUwMDA7IGkrKykgewotICAgICAgICBrLmlucHV0ID0gImZvbyI7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGsuaW5wdXQ7Ci19Ci12YXIgcmVzdWx0ID0gdGVzdCh7X19w
cm90b19fOiB7YmFyOiJ3aWJibGUiLCBpbnB1dDoiZm9vIn19KTsKLXZhciByZXN1bHQgPSB0ZXN0
KHtpbnB1dDoiZm9vIn0pOwotdmFyIHJlc3VsdCA9IHRlc3QobykKLWZvciAodmFyIGsgPSAwOyBr
IDwgNjsgaysrKSB7Ci0gICAgdmFyIHN0YXJ0ID0gbmV3IERhdGU7Ci0gICAgdmFyIG5ld1Jlc3Vs
dCA9IHRlc3QobykKLSAgICB2YXIgZW5kID0gbmV3IERhdGU7Ci0gICAgaWYgKG5ld1Jlc3VsdCAh
PSByZXN1bHQpCi0gICAgICAgIHRocm93ICJGYWlsZWQgYXQgIiArIGsgKyAid2l0aCAiICsgbmV3
UmVzdWx0ICsgIiB2cy4gIiArIHJlc3VsdAotICAgIHJlc3VsdCA9IG5ld1Jlc3VsdDsKLSAgICBv
ID0ge19fcHJvdG9fXyA6IG8gfQotfQotYCxgLy8gUmVnRXhwLmlucHV0IGlzIGEgaGFuZHkgc2V0
dGVyCi0KLXZhciBvID0gUmVnRXhwOwotZnVuY3Rpb24gdGVzdChvKSB7Ci0gICAgdmFyIGsgPSAw
OwotICAgIG8uaW5wdXQgPSAiYmFyIjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDMwMDAwOyBp
KyspCi0gICAgICAgIG8uaW5wdXQgPSAiZm9vIjsKLQotICAgIHJldHVybiBvLmlucHV0OwotfQot
Ci12YXIgcmVzdWx0ID0gdGVzdChvKTsKLQotZm9yICh2YXIgayA9IDA7IGsgPCA5OyBrKyspIHsK
LSAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKLSAgICB2YXIgbmV3UmVzdWx0ID0gdGVzdChvKQot
ICAgIHZhciBlbmQgPSBuZXcgRGF0ZTsKLSAgICBpZiAobmV3UmVzdWx0ICE9IHJlc3VsdCkKLSAg
ICAgICAgdGhyb3cgIkZhaWxlZCBhdCAiICsgayArICJ3aXRoICIgK25ld1Jlc3VsdCArICIgdnMu
ICIgKyByZXN1bHQKLSAgICByZXN1bHQgPSBuZXdSZXN1bHQ7IAotICAgIG8gPSB7X19wcm90b19f
IDogbyB9Ci19Ci0KLWAsYC8vQCBydW5Ob0ZUTAotCi12YXIgc2V0ID0gbmV3IFNldDsKLWZvciAo
dmFyIGkgPSAwOyBpIDwgODAwMDsgKytpKSB7Ci0gICAgc2V0LmFkZChpKTsKLSAgICBzZXQuYWRk
KCIiICsgaSkKLSAgICBzZXQuYWRkKHt9KQotICAgIHNldC5hZGQoaSArIC41KQotfQotCi12YXIg
cmVzdWx0ID0gMDsKLQotc2V0LmZvckVhY2goZnVuY3Rpb24oayl7IHJlc3VsdCArPSBzZXQuc2l6
ZTsgfSkKLWZvciAodmFyIGkgPSA4MDAwOyBpID49IDA7IC0taSkgewotICAgIHNldC5kZWxldGUo
aSkKLSAgICBzZXQuaGFzKCIiICsgaSkKLSAgICBzZXQuYWRkKGkgKyAuNSkKLX0KLXNldC5mb3JF
YWNoKGZ1bmN0aW9uKGspeyByZXN1bHQgKz0gc2V0LnNpemU7IH0pCi0KLWlmIChyZXN1bHQgIT0g
MTYwMDA0ODAwMSkKLSAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKLQotCi1gLGAv
LyBUZXN0IHRoZSBwZXJmb3JtYW5jZSBvZiBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIGJ5IGltcGxl
bWVudGluZyBhIDE2LWJpdAotLy8gc3RyaW5nIGhhc2guCi0KLWZ1bmN0aW9uIHN0cmluZ0hhc2go
c3RyaW5nKQotewotICAgIC8vIHNvdXJjZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9K
YXZhX2hhc2hDb2RlKCkjU2FtcGxlX2ltcGxlbWVudGF0aW9uc19vZl90aGVfamF2YS5sYW5nLlN0
cmluZ19hbGdvcml0aG0KLSAgICB2YXIgaCA9IDA7Ci0gICAgdmFyIGxlbiA9IHN0cmluZy5sZW5n
dGg7Ci0gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewotICAg
ICAgICBoID0gKCgoMzEgKiBoKSB8IDApICsgc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpKSB8IDA7
Ci0gICAgfQotICAgIHJldHVybiBoOwotfQotCi1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKLSAgICB2YXIgcmVzdWx0ID0KLSAgICAgICAgKHN0cmluZ0hhc2goIlRoZSBzcGlyaXQg
aXMgd2lsbGluZyBidXQgdGhlIGZsZXNoIGlzIHdlYWsuIikgKgotICAgICAgICAgc3RyaW5nSGFz
aCgiVGhlIHZvZGthIGlzIHN0cm9uZyBidXQgdGhlIG1lYXQgaXMgcm90dGVuLiIpKSB8IDA7Ci0g
ICAgaWYgKHJlc3VsdCAhPSAtMTEzNjMwNDEyOCkKLSAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Ci19Ci0KLWAsYAotRnVuY3Rpb24ucHJvdG90eXBlLmEgPSBGdW5jdGlvbi5w
cm90b3R5cGUuYXBwbHk7Ci0KLWZ1bmN0aW9uIHRlc3RGdW5jdGlvbihhLCBiKQotewotICAgICJ1
c2Ugc3RyaWN0IgotICAgIHJldHVybiB0aGlzICogMTAwMDAgKyBhICogMTAwMCArIGIgKiAxMDAg
KyBhcmd1bWVudHNbMl0gKiAxMCArIGFyZ3VtZW50cy5sZW5ndGg7Ci19Ci0KLXZhciBhcnJheUFy
Z3VtZW50cyA9IFsxLCBbMiwgMywgNF1dCi0KLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkr
KykgewotICAgIHZhciByZXN1bHQxID0gdGVzdEZ1bmN0aW9uLmFwcGx5KC4uLmFycmF5QXJndW1l
bnRzKTsKLSAgICB2YXIgcmVzdWx0MiA9IHRlc3RGdW5jdGlvbi5hKC4uLmFycmF5QXJndW1lbnRz
KTsKLSAgICBpZiAocmVzdWx0MSAhPSByZXN1bHQyKSAKLSAgICAgICAgdGhyb3cgIkNhbGwgd2l0
aCBzcHJlYWQgYXJyYXkgZmFpbGVkIGF0IGl0ZXJhdGlvbiAiICsgaSArICI6ICIgKyByZXN1bHQx
ICsgIiB2cyAiICsgcmVzdWx0MjsKLX0KLQotZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsr
KSB7Ci0gICAgdmFyIHJlc3VsdDEgPSB0ZXN0RnVuY3Rpb24uYXBwbHkoLi4uWzEsIFsyLCAzLCA0
XV0pOwotICAgIHZhciByZXN1bHQyID0gdGVzdEZ1bmN0aW9uLmEoLi4uWzEsIFsyLCAzLCA0XV0p
OwotICAgIGlmIChyZXN1bHQxICE9IHJlc3VsdDIpIAotICAgICAgICB0aHJvdyAiQ2FsbCB3aXRo
IHNwcmVhZCBhcnJheSBmYWlsZWQgYXQgaXRlcmF0aW9uICIgKyBpICsgIjogIiArIHJlc3VsdDEg
KyAiIHZzICIgKyByZXN1bHQyOwotfQotCi1mdW5jdGlvbiB0ZXN0MigpIHsKLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKLSAgICAgICAgdmFyIHJlc3VsdDEgPSB0ZXN0RnVu
Y3Rpb24uYXBwbHkoLi4uYXJndW1lbnRzKTsKLSAgICAgICAgdmFyIHJlc3VsdDIgPSB0ZXN0RnVu
Y3Rpb24uYSguLi5hcmd1bWVudHMpOwotICAgICAgICBpZiAocmVzdWx0MSAhPSByZXN1bHQyKQot
ICAgICAgICAgICB0aHJvdyAiQ2FsbCB3aXRoIHNwcmVhZCBhcmd1bWVudHMgZmFpbGVkIGF0IGl0
ZXJhdGlvbiAiICsgaSArICI6ICIgKyByZXN1bHQxICsgIiB2cyAiICsgcmVzdWx0MjsKLSAgICB9
Ci19Ci0KLXRlc3QyKDEsWzIsMyw0XSkKLQotCi1mdW5jdGlvbiB0ZXN0MygpIHsKLSAgICBhbGlh
c2VkQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
IGkrKykgewotICAgICAgICB2YXIgcmVzdWx0MSA9IHRlc3RGdW5jdGlvbi5hcHBseSguLi5hbGlh
c2VkQXJndW1lbnRzKTsKLSAgICAgICAgdmFyIHJlc3VsdDIgPSB0ZXN0RnVuY3Rpb24uYSguLi5h
bGlhc2VkQXJndW1lbnRzKTsKLSAgICAgICAgaWYgKHJlc3VsdDEgIT0gcmVzdWx0MikKLSAgICAg
ICAgICAgdGhyb3cgIkNhbGwgd2l0aCBzcHJlYWQgYXJndW1lbnRzIGZhaWxlZCBhdCBpdGVyYXRp
b24gIiArIGkgKyAiOiAiICsgcmVzdWx0MSArICIgdnMgIiArIHJlc3VsdDI7Ci0gICAgfQotfQot
Ci10ZXN0MygxLFsyLDMsNF0pYF0KLQotbGV0IHByb2Nlc3NUZXh0cyA9ICh0ZXh0cykgPT4gewot
ICAgIGxldCB3YyA9IDA7Ci0gICAgZm9yIChsZXQgdGV4dCBvZiB0ZXh0cykgewotICAgICAgICB0
cnkgewotICAgICAgICAgICAgbGV0IGdsb2JhbEluZGV4ID0gMDsKLSAgICAgICAgICAgIHdoaWxl
ICgxKSB7Ci0gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gZ2xvYmFsSW5kZXg7Ci0gICAgICAg
ICAgICAgICAgbGV0IHdvcmQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbGV0IGMgPSB0ZXh0W2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGMubWF0Y2goL1xzLykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPSB0ZXh0
LnN1YnN0cmluZyhnbG9iYWxJbmRleCwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGMubWF0Y2goL1xzLykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2lu
ZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSB0ZXh0Lmxlbmd0
aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxJbmRleCA9IGluZGV4
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRleHRbaW5k
ZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iYWxJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gdGV4dC5sZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2JhbEluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChnbG9iYWxJbmRleCA8IHRleHQubGVuZ3RoKQotICAgICAgICAgICAg
ICAgICAgICB3YysrOwotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFT0Y7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2goZSkgewotICAg
ICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFT0YpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiB3YzsKLX07Ci0KLWZvciAobGV0IGkgPSAwOyBpIDwgMjA7ICsraSkKLSAgICBwcm9j
ZXNzVGV4dHModGV4dHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvY2F0Y2gtc2V0LWFy
Z3VtZW50LXNwZWN1bGF0aW9uLWZhaWx1cmUuanMgYi9KU1Rlc3RzL3N0cmVzcy9jYXRjaC1zZXQt
YXJndW1lbnQtc3BlY3VsYXRpb24tZmFpbHVyZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTJmOTM5ZDliZDk2ZWY1M2QwYzE1ZmVkNTllMzU3YWZlY2FiZWRiNi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9jYXRj
aC1zZXQtYXJndW1lbnQtc3BlY3VsYXRpb24tZmFpbHVyZS5qcworKysgL2Rldi9udWxsCkBAIC0x
LDUzICswLDAgQEAKLSJ1c2Ugc3RyaWN0IjsKLQotbGV0IGZsYWcgPSB0cnVlOwotZnVuY3Rpb24g
bygpIHsKLSAgICBpZiAoZmxhZykKLSAgICAgICAgcmV0dXJuIHt4OjIwfTsKLSAgICByZXR1cm4g
e3k6MjAsIHg6MjB9OwotfQotbm9JbmxpbmUobyk7Ci0KLWxldCBjb3VudGVyID0gMDsKLWZ1bmN0
aW9uIGUoKSB7Ci0gICAgaWYgKCgrK2NvdW50ZXIpICUgNTAgPT09IDApCi0gICAgICAgIHRocm93
IG5ldyBFcnJvcjsKLX0KLW5vSW5saW5lKGUpOwotCi1sZXQgY291bnRlcjIgPSAwOwotZnVuY3Rp
b24gZTIoKSB7Ci0gICAgaWYgKCgrK2NvdW50ZXIyKSAlIDIgPT09IDApCi0gICAgICAgIHRocm93
IG5ldyBFcnJvcjsKLX0KLW5vSW5saW5lKGUyKTsKLQotZnVuY3Rpb24gZXNjYXBlKCl7IH0KLW5v
SW5saW5lKGVzY2FwZSk7Ci0KLWZ1bmN0aW9uIGJheihvKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAg
ZSgpOwotICAgICAgICBlc2NhcGUoby54KTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgZXNj
YXBlKG8ueCk7Ci0gICAgICAgIGUyKCk7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgICAgby54Owot
ICAgIH0KLX0KLW5vSW5saW5lKGJheik7Ci0KLXsKLSAgICBsZXQgbyA9IHt4OjIwfTsKLSAgICBm
dW5jdGlvbiBydW4oKSB7Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7
Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJheihvKTsKLSAgICAgICAgICAg
IH0gY2F0Y2ggeyB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcnVuKCk7Ci0gICAgbyA9IHt5OjQw
LCB4OjIwfTsKLSAgICBydW4oKTsKLX0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL29zci1l
bnRlci10by1jYXRjaC13aXRoLXNldC1sb2NhbC10eXBlLWNoZWNrLWZhaWx1cmUuanMgYi9KU1Rl
c3RzL3N0cmVzcy9vc3ItZW50ZXItdG8tY2F0Y2gtd2l0aC1zZXQtbG9jYWwtdHlwZS1jaGVjay1m
YWlsdXJlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzU3YTJkYTQ1NzNlMjZj
ZmM4NjRhODJiY2Q3ZmYzYmI1Nzg3ODNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvc3RyZXNzL29zci1lbnRlci10by1jYXRjaC13aXRoLXNl
dC1sb2NhbC10eXBlLWNoZWNrLWZhaWx1cmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCww
IEBACi1sZXQgZmxhZyA9IHRydWU7Ci1mdW5jdGlvbiBmb28oKSB7Ci0gICAgaWYgKGZsYWcpCi0g
ICAgICAgIHJldHVybiAyMDsKLSAgICByZXR1cm4ge307Ci19Ci1ub0lubGluZShmb28pOwotCi1s
ZXQgc3RhdGUgPSAwOwotZnVuY3Rpb24gZSgpIHsKLSAgICBpZiAoKCsrc3RhdGUpICUgMjUgPT09
IDApCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigpOwotfQotbm9JbmxpbmUoZSk7Ci0KLWZ1bmN0
aW9uIGJheigpIHsgfQotbm9JbmxpbmUoYmF6KTsKLQotZnVuY3Rpb24gYmFyKCkgewotICAgIGxl
dCB4ID0gZm9vKCk7Ci0gICAgdHJ5IHsKLSAgICAgICAgZSgpOwotICAgICAgICBiYXooKyt4KTsK
LSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgYmF6KCsreCk7Ci0gICAgfSBmaW5hbGx5IHsKLSAg
ICAgICAgYmF6KHgpOwotICAgIH0KLX0KLW5vSW5saW5lKGJhcik7Ci0KLWZvciAobGV0IGkgPSAw
OyBpIDwgMjAwMDsgKytpKSB7Ci0gICAgYmFyKCk7Ci19Ci0KLWZsYWcgPSBmYWxzZTsKLWZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKQotICAgIGJhcigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>