<?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>201943</bug_id>
          
          <creation_ts>2019-09-18 14:00:24 -0700</creation_ts>
          <short_desc>REGRESSION(r250002): Patching of the callee and call is not atomic (Requested by tadeuzagallo on #webkit).</short_desc>
          <delta_ts>2019-09-18 14:14:22 -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>201799</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1572064</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-18 14:00:24 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/250002 broke the build:
Patching of the callee and call is not atomic (Requested by tadeuzagallo 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>1572066</commentid>
    <comment_count>1</comment_count>
      <attachid>379071</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-18 14:00:36 -0700</bug_when>
    <thetext>Created attachment 379071
ROLLOUT of r250002

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>1572073</commentid>
    <comment_count>2</comment_count>
      <attachid>379071</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-18 14:13:33 -0700</bug_when>
    <thetext>Comment on attachment 379071
ROLLOUT of r250002

Clearing flags on attachment: 379071

Committed r250052: &lt;https://trac.webkit.org/changeset/250052&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572074</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-18 14:13:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572075</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-18 14:14:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/55492414&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379071</attachid>
            <date>2019-09-18 14:00:36 -0700</date>
            <delta_ts>2019-09-18 14:13:33 -0700</delta_ts>
            <desc>ROLLOUT of r250002</desc>
            <filename>bug-201943-20190918140036.patch</filename>
            <type>text/plain</type>
            <size>117340</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTIxNzJlZmI2NGQ4NWM3ZWM0N2U4MWUyNWZlY2Y0NzRlMzJhNGE0Li42MWNjYTNlNTg2OWMyNjZl
M2U5ZWUwZjliNzE5MmYwYjc2YjZmOTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxOS0wOS0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1MDAwMi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk0MworCisgICAg
ICAgIFBhdGNoaW5nIG9mIHRoZSBjYWxsZWUgYW5kIGNhbGwgaXMgbm90IGF0b21pYyAoUmVxdWVz
dGVkIGJ5CisgICAgICAgIHRhZGV1emFnYWxsbyBvbiAjd2Via2l0KS4KKworICAgICAgICBSZXZl
cnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIkNoYW5nZSBXZWJBc3NlbWJseSBjYWxsaW5nIGNv
bnZlbnRpb25zIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAxNzk5CisgICAgICAgIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yNTAw
MDIKKwogMjAxOS0wOS0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtKU0NdIEdlbmVyYXRvciBzaG91bGQgaGF2ZSBpbnRlcm5hbCBmaWVsZHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAwYzU3MTI1M2RiNzJjZDcxYTYzZDk3MzRm
MWJiOTMyN2MzYzYyZDZhLi5hNmMwZjAyNzVlM2YxZTVjYWQ0MWU2YTRjOGE3NjI1ZWIwNzZiMmUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0zOTMsNyArMzkzLDYgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1BVQkxJQ19GUkFNRVdPUktfSEVBREVSUwogc2V0KEphdmFTY3Jp
cHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICAke0phdmFTY3JpcHRDb3JlX0RF
UklWRURfU09VUkNFU19ESVJ9L0J5dGVjb2Rlcy5oCiAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9KU0NCdWlsdGlucy5oCi0gICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9XYXNtT3BzLmgKIAogICAgICR7SmF2YVNjcmlwdENvcmVfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oCiAg
ICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmREaXNwYXRjaGVycy5oCkBAIC00NjQsMTAgKzQ2Myw2IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgYXNzZW1ibGVyL1g4NlJlZ2lz
dGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJlZ2lzdGVycy5oCiAKLSAgICBiMy9CM0NvbW1v
bi5oCi0gICAgYjMvQjNDb21waWxhdGlvbi5oCi0gICAgYjMvQjNUeXBlLmgKLQogICAgIGJpbmRp
bmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3MvU2NyaXB0T2JqZWN0LmgKICAg
ICBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oCkBAIC0xMDA2LDcgKzEwMDEsNiBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaAogCi0gICAgd2FzbS9XYXNt
Q2FsbGVlLmgKICAgICB3YXNtL1dhc21DYXBhYmlsaXRpZXMuaAogICAgIHdhc20vV2FzbUNvZGVC
bG9jay5oCiAgICAgd2FzbS9XYXNtQ29tcGlsYXRpb25Nb2RlLmgKQEAgLTEwMTQsMTYgKzEwMDgs
MTMgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICB3
YXNtL1dhc21FbWJlZGRlci5oCiAgICAgd2FzbS9XYXNtRXhjZXB0aW9uVHlwZS5oCiAgICAgd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKLSAgICB3YXNtL1dhc21Gb3JtYXQuaAogICAgIHdh
c20vV2FzbUluZGV4T3JOYW1lLmgKICAgICB3YXNtL1dhc21NZW1vcnkuaAotICAgIHdhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgKICAgICB3YXNtL1dhc21NZW1vcnlNb2RlLmgKICAgICB3YXNt
L1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUuaAogICAgIHdhc20vV2FzbU5hbWVTZWN0
aW9uLmgKICAgICB3YXNtL1dhc21QYWdlQ291bnQuaAotICAgIHdhc20vV2FzbVNpZ25hdHVyZS5o
CiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQuaAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmI0MGIwZTEwYTE1YWM3MjY2NjI0
YjIwMmQxMjY0YWI0NjlmZmI2Yy4uNTM0ZDdkMDJhMThhM2Q0ZWRkMWU0OTZkYzZlYmRiMThjZWQ5
NGZlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI5MCw3ICsyOTAsNyBAQAog
CQkwRjMzOERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGNDFCRTkzRDU1
MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggKi87IH07CiAJCTBGMzM4REZBMUJFOTZB
QTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4REY4MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFs
dWUuaCAqLzsgfTsKIAkJMEYzMzhERkUxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZH
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERG
QzFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLzsgfTsKLQkJMEYzMzhFMEMx
QkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTAwMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0Nv
bXBpbGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYzMzhFMEMxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTAwMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggKi87IH07CiAJCTBGMzM4RTBFMUJGMDI3NkMwMDEz
Qzg4RiAvKiBCM0RhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjMzOEUwMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5o
ICovOyB9OwogCQkwRjMzOEUxMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwNDFC
RjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi87IH07CiAJCTBGMzM4RTExMUJG
MDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDUxQkYwMjc2QzAwMTNDODhGIC8qIEIz
T3BhcXVlQnlwcm9kdWN0LmggKi87IH07CkBAIC02NTIsNyArNjUyLDcgQEAKIAkJMEZFQzg1MDQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QmxvY2tXb3JrbGlzdC5oICovOyB9OwogCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovOyB9Owog
CQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLzsgfTsKIAkJ
MEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovOyB9OwogCQkwRkVDODUwRTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5o
ICovOyB9OwogCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OwpAQCAtNjc1LDcgKzY3NSw3
IEBACiAJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKIAkJMEZF
Qzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5oICovOyB9OwogCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLzsgfTsKLQkJ
MEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1R5cGUuaCAqLzsgfTsKIAkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsgfTsKIAkJMEZFQzg1
NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNV
c2VDb3VudHMuaCAqLzsgfTsKIAkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07CkBAIC03MTQ2LDExICs3
MTQ2LDExIEBACiAJCQkJODY4OTIxQzExRjlDMENCNzAwMTE1OUY2IC8qIEpTQmlnSW50LmggKi8s
CiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8s
CiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAor
CQkJCUZFNDhCRDQzMjMyNDVFODcwMEYxMzZEMCAvKiBKU0NDb25maWcuY3BwICovLAorCQkJCUZF
NDhCRDQyMjMyNDVFODcwMEYxMzZEMCAvKiBKU0NDb25maWcuaCAqLywKIAkJCQk2NTdDRjQ1NjE5
QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1N0NGNDU3MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovLAogCQkJCTUzQjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAv
KiBKU0Nhc3QuaCAqLywKLQkJCQlGRTQ4QkQ0MzIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29uZmln
LmNwcCAqLywKLQkJCQlGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi8s
CiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCiAJCQkJQkMx
MTY3RDgwRTE5QkNDOTAwODA2NkREIC8qIEpTQ2VsbC5oICovLAogCQkJCTBGOTc0OTZGMTY4N0FE
RTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8sCkBAIC05MzUzLDYgKzkzNTMsNyBAQAog
CQkJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDg5RDAyMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
T3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzODQyMzIyMzI0RDUxQjAwOURENDQ1
IC8qIE9wdGlvbkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBD
QTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkREMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMDE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTk1NDIsNiArOTU0Myw3IEBACiAJCQkJQTFENzkzMDExQjQzODY0QjAwNDUxNkY1IC8qIEludGxO
dW1iZXJGb3JtYXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMjU4NDZGMUI0NUEz
NjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTEyQkJGRjIxQjA0NEE4QjAwNjY0QjY5IC8qIEludGxPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFNDhCRDQ0MjMyNDVFOTMwMEYxMzZEMCAvKiBKU0NDb25maWcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwOEVCRTI0MUNFOEYzNTgwMDQ1MzE0NiAvKiBJbnRsT2JqZWN0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIElu
dHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0RTAzNTQxRTUzQkQyOTAwMjEzRjY0IC8q
IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTYxMiw3ICs5
NjE0LDYgQEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUzQjYwMUVDMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRkU0OEJENDQyMzI0NUU5MzAwRjEzNkQwIC8qIEpTQ0NvbmZp
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY3REEwRTE5QkNDOTAwODA2NkREIC8qIEpTQ2Vs
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NzQ5NzExNjg3QURFNDAwQTRGRjZBIC8qIEpTQ2Vs
bElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUREODRBMThBOTQ1QkUwMDI2RjNGQSAv
KiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk4OTAsOSArOTg5MSw3IEBACiAJCQkJ
MEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ0ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJRkUzODQyMzIyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbkVudHJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzU2OTg3MjIyODQxMTg3MDA4Q0RDQ0IgLyogUGFj
a2VkQ2VsbFB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIy
IC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM0RTY1NzUy
MDY2OEVBQTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTk5LDYg
Kzk5OTgsNyBAQAogCQkJCTBGRTA1MDI4MUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZWRBcmd1bWVu
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI5MUFBOTA5NTYwMEQzM0IzMyAvKiBTY29w
ZWRBcmd1bWVudHNUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMkIxQUE5MDk1NjAw
RDMzQjMzIC8qIFNjb3BlT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTM4NDIzMzIzMjRE
NTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUy
MTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1RkQwMDY4MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MDNGQTIxMTg4RUZGNjgwMDExMEYxNCAvKiBTY3JpcHRCcmVh
a3BvaW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGExZjBjNWRjYmIxNTE0MGFjNzc5YWRlODYy
MDUzMjVhMjdmNWQ0YTYuLmUwYzE1NjY5OGMwOWY3ODFkYjBjODcxYWM2ZGI5MGI5Y2JjNzg4MDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWls
KF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBBaXJJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYp
OworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2Nl
ZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIFRocm93
V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpA
QCAtNjI4LDggKzYyOCw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50Qmxv
Y2sgeyBudWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxscHRyIH07
CiAgICAgVmVjdG9yPFR5cGVkVG1wPiBtX2xvY2FsczsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIG1fb3V0Z29pbmdDYWxsczsKLSAgICBjb25zdCBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7Cisg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2Ug
YWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgogICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IElu
dmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52
YWxpZEdQUlJlZyB9OwpAQCAtNjk4LDE1ICs2OTcsMTQgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6
cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ssIFR5cGVkVG1wIGlu
c3QKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYgb3V0Z29pbmdDYWxscywgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgTWVtb3J5TW9k
ZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSkKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBj
b21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVy
VXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9t
b2RlKG1vZGUpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAgICAsIG1f
dGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX2NvZGUobV9w
cm9jLmNvZGUoKSkKLSAgICAsIG1fb3V0Z29pbmdDYWxscyhvdXRnb2luZ0NhbGxzKQotICAgICwg
bV93YXNtVG9XYXNtRXhpdFN0dWJzKHdhc21Ub1dhc21FeGl0U3R1YnMpCisgICAgLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogICAgICwgbV9udW1J
bXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCiB7CiAgICAgbV9jdXJy
ZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKQEAgLTc1Miw3ICs3NTAsMTYgQEAgQWlySVJH
ZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBC
Mzo6UHJvY2VkdXJlJiBwcm8KICAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IHBy
b2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVy
YXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2Rl
KSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKICAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xvZ3VlKGppdCk7Ci0gICAgICAgIGpp
dC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKTsKKworICAgICAgICB7CisgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNh
bGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgICAgICAgICAgYXV0
byBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbY29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVH
UFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAg
IH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21G
cmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CkBAIC0xOTE4LDYgKzE5MjUsOCBAQCBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLAogICAgIGlmIChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpCiAg
ICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUocmV0dXJuVHlwZSk7CiAKKyAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHM7CisKICAgICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlvbkZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgbV9tYXhOdW1K
U0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKQEAgLTE5NTMsMTIgKzE5NjIsMTEgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5k
KHsgdG1wLCByZXAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHViID0gbV93YXNt
VG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFt3YXNtVG9XYXNtRXhpdFN0dWJdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGppdC5jYWxsKFdhc21FbnRyeVB0clRhZyk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFtjYWxsLCB3YXNtVG9XYXNtRXhpdFN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KHdhc21Ub1dhc21FeGl0U3R1Yi5jb2RlKCkpKTsKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hh
YmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBw
ZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxs
KSwgZnVuY3Rpb25JbmRleCB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0p
OwogCkBAIC0yMDA1LDIwICsyMDEzLDE4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwo
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAg
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUp
KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLSAgICAgICAgcGF0
Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAKICAgICAgICAgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CiAgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigp
LnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIHRvVG1wVmVjdG9yKGFy
Z3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKICAgICAgICAgICAgIHBhdGNo
QXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiBvdXRnb2luZ0NhbGxzID0gJm1fb3V0Z29pbmdDYWxs
czsKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtvdXRnb2luZ0NhbGxzLCBmdW5j
dGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFt
cy5ncFNjcmF0Y2goMCk7Ci0gICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3Zl
V2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVH
UFIpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvY2F0aW9uID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+
YXBwZW5kKHsgZnVuY3Rpb25JbmRleCwgeyBtb3ZlTG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7
CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25J
bmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgIH0p
OwogICAgICAgICB9KTsKIAogICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywg
cGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOwpAQCAtMjA3Miw3ICsyMDc4
LDYgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICB9KTsKIAogICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxlZUNvZGUgPSBnNjQoKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBnNjQo
KTsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0g
ZzY0KCk7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXgg
c3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgpAQCAtMjA4MSw3ICsyMDg2LDYgQEAgYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmEKICAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIGNhbGxlZUNvZGUpOyAv
LyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgotICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRy
KGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZz
ZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkpLCBjYWxsZWUpOyAvLyBQb2ludGVyIHRvIGJv
eGVkIGNhbGxlZQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFuICJpbnZh
bGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCiAgICAg
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0
IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCkBAIC0yMTc0LDEwICsy
MTc4LDYgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRh
YmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKIAogICAgIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4gZW1pdEFyZ3M7CiAgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOwotCi0gICAg
YXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWUpLCBjYWxsZWUpOwotICAgIGVtaXRBcmdzLmFw
cGVuZCh7IGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpIH0p
OwotCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0
dXJuVHlwZSwgcGF0Y2gsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1
ZVJlcCByZXApIHsKICAgICAgICAgZW1pdEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CiAgICAg
fSk7CkBAIC0yMjE4LDggKzIyMTgsMTAgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6b3JpZ2luKCkg
LT4gQjM6Ok9yaWdpbgogICAgIHJldHVybiBCMzo6T3JpZ2luKCk7CiB9CiAKLUV4cGVjdGVkPHZv
aWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGls
YXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRp
ZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVB
aXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9u
RGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0
aW9uKQogeworICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigp
OworCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VV
bmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlw
b2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBAIC0yMjM5LDcgKzIyNDEs
NyBAQCBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dAogICAgIAogICAgIHByb2NlZHVyZS5zZXRPcHRM
ZXZlbChPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck9wdGltaXphdGlvbkxldmVsKCkpOwogCi0g
ICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCBjb21waWxhdGlv
bkNvbnRleHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2FzbUV4aXRTdHVicywgbW9kZSwgZnVuY3Rp
b25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgQWly
SVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93
V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVy
YXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24u
ZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTIyNTksMTAgKzIyNjEsMTAgQEAgRXhwZWN0ZWQ8
dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21w
aWxhdGlvbkNvbnRleHQKICAgICAgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29k
ZSk7CiAgICAgICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNvZGUsICpjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5
cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci0gICAgICAg
IGNvbXBpbGF0aW9uQ29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZl
UmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwog
ICAgIH0KIAotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIEludFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5oCmluZGV4IDgyNzJjZTM1OTVmZjI4YjNmOWNjODg5NjVhZGIyYTg0
YzllODVhNzQuLjMzMWI0YjBhZDMxM2U2MjNjYTdmZjRiZDhkZThhMTU4NmZjN2Q1MDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCkBAIC0z
MSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUV4cGVj
dGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxw
dHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxh
dGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1l
bW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIs
IFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKaW5kZXggZTI1M2MyMDQ3MDYyZGNkNzU1NmYyNDMwYjdhYzRmZWNkYTc0NTVhYi4uNDcw
Y2U4MjM4NDRhODFmYjAyODA0ZThlYzNmYTQ4YjcwOTAyYjFlYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTcyLDYgKzE3Miw3
IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsKICAgICB0eXBlZGVm
IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OworICAgIHR5cGVkZWYgRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+IFJlc3Vs
dDsKICAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJlc3VsdDsK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBl
Y3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CkBA
IC0xODQsNyArMTg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9B
UkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUs
IENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcElu
ZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBC
M0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJu
YWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVy
VXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAt
MjgwLDcgKzI4MSw2IEBAIHByaXZhdGU6CiAKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IG1faW5mbzsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fb3V0Z29pbmdD
YWxsczsKICAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nIH07CiAgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsg
Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CiAgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlv
bkluZGV4IHsgVUlOVF9NQVggfTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBwcml2YXRlOgogICAgIEJh
c2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3Rvcjx1aW50MzJf
dD4gbV9vdXRlckxvb3BzOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOwotICAgIFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIG1fd2FzbVRvV2Fz
bUV4aXRTdHViczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4
IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3Qg
ZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNo
b3VsZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwog
ICAgIEluc2VydGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzOwpAQCAtMzUzLDE2ICsz
NTMsMTUgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQ
cm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2MKICAgICB9KTsKIH0KIAotQjNJUkdlbmVy
YXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgb3V0Z29pbmdD
YWxscywgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2Fz
bVRvV2FzbUV4aXRTdHVicywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50
KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVk
JiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9u
TW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxv
b3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZvKGluZm8pCi0gICAgLCBtX291dGdv
aW5nQ2FsbHMob3V0Z29pbmdDYWxscykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9jb21w
aWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0
aW9uSW5kZXgpCiAgICAgLCBtX2xvb3BJbmRleEZvck9TUkVudHJ5KGxvb3BJbmRleEZvck9TUkVu
dHJ5KQogICAgICwgbV90aWVyVXAodGllclVwKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKLSAg
ICAsIG1fd2FzbVRvV2FzbUV4aXRTdHVicyh3YXNtVG9XYXNtRXhpdFN0dWJzKQorICAgICwgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKICAgICAsIG1f
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAg
ICwgbV9jb25zdGFudEluc2VydGlvblZhbHVlcyhtX3Byb2MpCiAgICAgLCBtX251bUltcG9ydEZ1
bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTQxNiw3ICs0MTUsNyBAQCBC
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9CiAgICAgfQogCi0gICAgd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUobV9wcm9jLCBPcmlnaW4oKSwgbV9j
dXJyZW50QmxvY2spOworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblBy
b2xvZ3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBtX3Byb2MsIE9yaWdpbigp
LCBtX2N1cnJlbnRCbG9jayk7CiAKICAgICB7CiAgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2lu
dGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZy
YW1lUG9pbnRlciwgT3JpZ2luKCkpOwpAQCAtMTQwMSw2ICsxNDAwLDggQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAKICAgICBUeXBlIHJldHVyblR5
cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsczsKKwogICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShmdW5jdGlvbkluZGV4KSkgewogICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50
cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYXJncy5zaXplKCkpKTsKIApAQCAtMTQxNCw3ICsxNDE1LDYgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLAogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxv
Y2soKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3By
b2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNX
YXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7CiAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHVi
ID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICBWYWx1ZSog
d2FzbUNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9j
LCBpc1dhc21CbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAg
ICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xNDIzLDEx
ICsxNDIzLDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBX
ZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5n
IHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUo
UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3dhc21Ub1dh
c21FeGl0U3R1Yl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwo
V2FzbUVudHJ5UHRyVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtj
YWxsLCB3YXNtVG9XYXNtRXhpdFN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFi
ZWw8V2FzbUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRj
aGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0
clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xNDcxLDE4ICsxNDcxLDE3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2
ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhh
dmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFu
Y2VWYWx1ZSgpLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiBvdXRnb2luZ0NhbGxzID0gJm1fb3V0Z29p
bmdDYWxsczsKICAgICAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBD
YWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1
cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7
CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOwot
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0
Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvY2F0aW9u
ID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAg
ICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbkluZGV4LCB7IG1vdmVMb2NhdGlvbiwg
Y2FsbExvY2F0aW9uIH19KTsKKworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50
aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgIH0K
QEAgLTE2MjMsMTAgKzE2MjIsNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAogICAgICAgICAgICAgc2FmZUNh
c3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBv
aW50TG9hZExvY2F0aW9uKCkpKSk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1
bmN0aW9uLAotICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpKSkpOwotCiAgICAg
VHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKICAgICByZXN1bHQgPSB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywg
b3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICBbPV0gKFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTYzOCw4ICsxNjMzLDggQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXQKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUg
dG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNtIHN0dWIgYXNzdW1lcyBpdCBjYW4KICAgICAg
ICAgICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVt
b3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgICAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUg
PT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKQEAgLTE3MDAsOCArMTY5
NSwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDx2b2lkLCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4
dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21U
b1dhc21FeGl0U3R1YnMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1v
ZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29w
SW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9u
IHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21w
aWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25N
b2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9v
cEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24pCiB7CisgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPElu
dGVybmFsRnVuY3Rpb24+KCk7CisKICAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRy
eXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgY29tcGlsYXRpb25D
b250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAK
QEAgLTE3MjIsNyArMTcxOSw3IEBAIEV4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjCiAgICAgICAgID8g
T3B0aW9uczo6d2ViQXNzZW1ibHlCQlFCM09wdGltaXphdGlvbkxldmVsKCkKICAgICAgICAgOiBP
cHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOwogCi0gICAgQjNJUkdl
bmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIGNvbXBpbGF0aW9uQ29udGV4dC5v
dXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9T
UkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvciBp
ckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUsIGNvbXBpbGF0aW9uTW9k
ZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRpZXJVcCwgdGhyb3dXYXNt
RXhjZXB0aW9uKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJH
ZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2ln
bmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJz
ZSgpKTsKIApAQCAtMTc0MCwxMCArMTczNywxMCBAQCBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgYwog
ICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlKTsKICAgICAgICAgQjM6
OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJ
VCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMg
PSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKLSAgICAgICAgY29tcGlsYXRpb25Db250
ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KCk7CisgICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0K
IAotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gQ3VzdG9tIHdh
c20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9vIG1lc3N5IHRvIGRvIGluIHdhc20uanNvbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4
IDM0OGI1NDdlZTNkNzg3YjYxMmMzZmQzNjA0MmQ3N2RlODIyMGE3ZDkuLmVhNTUwMjQwMThkMzBk
MzhmZjFlYTdhN2FiZjFjMTY1YmNmNTY3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNDksMTIgKzQ5LDkgQEAgc3RydWN0IENvbXBp
bGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3Rz
PiBlbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2Fs
bEhlbHBlcnM+IHdhc21FbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3Bh
cXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOwotICAgIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiBvdXRnb2luZ0NhbGxzOwotICAgIE9wdGlvbmFsPFVubGlua2Vk
TW92ZUFuZENhbGw+IGVtYmVkZGVyTW92ZUFuZENhbGw7Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgY2FsbGVlU2F2ZVJlZ2lzdGVyczsKIH07CiAKLUV4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPj4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBu
dWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGls
YXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRp
b25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JF
bnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0
cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCA3NDk2MjAzYWMzMWRlYjg0OTNjYTg0YThmODMw
MTA5MzgzMzI2MmM4Li40ZjkxNTJkODQxZDZhZjNmMjY5YzNmZDQ5NzE4MGI5NmViNTNmMDkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC01MiwxMCAr
NTIsOSBAQCBuYW1lc3BhY2UgV2FzbUJCUVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFZlY3RvcjxSZWY8QkJRQ2FsbGVlPj4mIGNhbGxlZXMsIFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywg
Q3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21F
eGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBj
b250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21w
bGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVy
V3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IEJh
c2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVF
bWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgLCBtX3N0cmVhbWluZ1Bh
cnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKLSAgICAsIG1fY2FsbGVlcygm
Y2FsbGVlcykKICAgICAsIG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkKICAgICAsIG1fYXN5bmNX
b3JrKHdvcmspCiB7CkBAIC0xNjAsMTAgKzE1OSwxNiBAQCB2b2lkIEJCUVBsYW46OnByZXBhcmUo
KQogCiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVu
Y3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVi
cywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAgICAgfHwgIXRy
eVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9ucy5zaXplKCks
ICIgY29tcGlsYXRpb24gY29udGV4dHMiKSkKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0
eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2Vk
IFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikKKyAgICAgICAgfHwgIXRyeVJlc2Vy
dmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25zLnNpemUoKSwgIiBX
ZWJBc3NlbWJseSBmdW5jdGlvbnMiKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1f
Y29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250
ZXh0cyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1
bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7Cisg
ICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAg
IG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV90
aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1w
b3J0cy5zaXplKCk7ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAm
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07CkBAIC0yMjUsNyArMjMw
LDYgQEAgcHVibGljOgogCiB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FsbGVlcyk7CiAgICAg
QVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkKTsKICAgICBkYXRhTG9nTG5JZihXYXNt
QkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsKIApAQCAt
MjYyLDcgKzI2NiwxMyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBBU1NF
UlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpKSk7CiAKLSAgICAgICAgRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGVSZXN1bHQ7CisgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25J
bmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpKQorICAgICAgICAgICAgbV90aWVyVXBDb3VudHNb
ZnVuY3Rpb25JbmRleF0gPSBtYWtlVW5pcXVlPFRpZXJVcENvdW50PigpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA9IG51bGxwdHI7Cisg
ICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XS5nZXQoKTsKKyAgICAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKICAgICAgICAgdW5zaWduZWQgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gRklYTUU6IFNvbWUgd2Vi
cGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBleGhhdXN0cyBhbGwgZXhl
Y3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUgc2l6ZSBvZiBleGVjdXRh
YmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1CLgpAQCAtMjcyLDExICsy
ODIsMTAgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKICAgICAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVz
aG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25z
Ojp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgICAgIGZvcmNlVXNp
bmdCMyA9IHRydWU7CiAKLSAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1fY2FsbGVlcy0+
YXQoZnVuY3Rpb25JbmRleCktPnRpZXJVcENvdW50KCk7CiAgICAgICAgIGlmICghZm9yY2VVc2lu
Z0IzICYmIE9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgICAgICBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVw
LCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1
bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5k
ZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0
aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5k
ZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlv
bkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dhc21Ub1dh
c21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4
LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgICAg
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2Rl
LCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9u
KTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI4NSwxMSArMjk0
LDExIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGls
ZVJlc3VsdCk7CisKICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFp
bnMoZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0
aW9ucygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBSZWZQdHI8RW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpFbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWU6OmNyZWF0ZSgpOwotICAgICAgICAgICAgbV9jcmVhdGVFbWJlZGRlcldyYXBw
ZXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsIGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9t
b2RlKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZSkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJu
YWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgsIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKG1f
Y29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICB9CiAKQEAgLTMwNyw5ICszMTYsNyBA
QCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAg
ICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW1wb3J0RnVuY3Rpb25Db3Vu
dDsKLSAgICAgICAgICAgIEJCUUNhbGxlZSYgY2FsbGVlID0gbV9jYWxsZWVzLT5hdChmdW5jdGlv
bkluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhT
cGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlv
bkNvdW50KCk7CiAgICAgICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5
cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0zMTgsMTYgKzMy
NSw5IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
cikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGNhbGxlZS5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdU
Rk1vdmUoY29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBjYWxs
ZWUuZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+
KAorICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAog
ICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRp
b25QdHJUYWcsICJXZWJBc3NlbWJseSBCQlEgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBmdW5j
dGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmlu
ZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAg
ICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0
cykpOwotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY29udGV4dC5vdXRnb2lu
Z0NhbGxzKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsLnRhcmdldEZ1bmN0aW9u
SW5kZXhTcGFjZSA+PSBpbXBvcnRGdW5jdGlvbkNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdWludDMyX3QgdGFyZ2V0RnVuY3Rpb25JbmRleCA9IGNhbGwudGFyZ2V0RnVuY3Rpb25J
bmRleFNwYWNlIC0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwot
ICAgICAgICAgICAgICAgICAgICBtX2NhbGxlZXMtPmF0KHRhcmdldEZ1bmN0aW9uSW5kZXgpLT5h
ZGRDYWxsZXIobG9ja2VyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwot
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8g
ZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgewpAQCAtMzM3LDE4ICszMzcsMjMgQEAgdm9p
ZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50KCkuY29tcGlsYXRp
b24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgZW1iZWRk
ZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVu
aXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJFbWJlZGRlci0+V2ViQXNzZW1ibHkg
ZW50cnlwb2ludFslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3Zl
KGNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbCkKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbGVlLmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsICpjb250ZXh0LmVtYmVkZGVyTW92
ZUFuZENhbGwpOwogICAgICAgICAgICAgfQotCiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGF1
dG8mIGNhbGxlZSA6ICptX2NhbGxlZXMpCi0gICAgICAgICAgICBjYWxsZWUtPnJlcGF0Y2hDYWxs
ZXJzKGxvY2tlciwgY2FsbGVlLmdldCgpKTsKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IHVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1f
bW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5l
cmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5
IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY0NjIKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21U
b1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmNvZGUoKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3Mg
PSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSktPmVudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRkcmVzcykpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmICghaXNDb21wbGV0
ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCBlMjE3
NDYyN2QyYjQwNDE5YjBjMzA2YTYyNzUwOTRhYmJiNWU0ZGY0Li44ODM2MTdmYzY3ZmZlYjgwNTEy
MDhjNzQwZTJmMWY5MTg4YjQxMzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGVudW0gQXN5bmNXb3JrIDog
dWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CiAKICAgICAvLyBOb3RlOiBDb21w
bGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3
aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgQkJRUGxhbihDb250ZXh0
KiwgY29uc3QgVmVjdG9yPFJlZjxCQlFDYWxsZWU+PiYsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4s
IEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRo
cm93V2FzbUV4Y2VwdGlvbik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9y
bWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBw
ZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFu
KENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYm
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBCQlFQ
bGFuKENvbnRleHQqLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwogCkBAIC05OCw2ICs5
OCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fd2FzbVRvV2FzbUV4aXRT
dHVicyk7CiAgICAgfQogCisgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
Pj4gdGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKKyAgICB9CisKICAgICBlbnVtIGNsYXNzIFN0YXRlIDog
dWludDhfdCB7CiAgICAgICAgIEluaXRpYWwsCiAgICAgICAgIFZhbGlkYXRlZCwKQEAgLTEzMywx
MyArMTM5LDE0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fc291cmNlOwogICAg
IEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uczsKICAgICBIYXNoU2V0PHVpbnQzMl90LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1
aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMy
X3Q+PiBtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzOwotICAgIEhhc2hNYXA8dWludDMyX3QsIFJl
ZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50
MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+
PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgSGFzaE1hcDx1aW50MzJf
dCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFz
aDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWlu
dDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENv
bXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+PiBtX3RpZXJVcENvdW50czsKIAorICAgIFZlY3RvcjxW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7
CiAgICAgU3RyZWFtaW5nUGFyc2VyIG1fc3RyZWFtaW5nUGFyc2VyOwotICAgIGNvbnN0IFZlY3Rv
cjxSZWY8QkJRQ2FsbGVlPj4qIG1fY2FsbGVlcyB7IG51bGxwdHIgfTsKICAgICBTdGF0ZSBtX3N0
YXRlOwogCiAgICAgY29uc3QgQXN5bmNXb3JrIG1fYXN5bmNXb3JrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAppbmRleCA5YmJjNmYzODk3NTJk
NzcwNmU0YzlmYjE1Yzg1OTlmNTRmMjgyZjllLi44NjYwMWFjOWVmM2ZiMzg1ZTA2MDI5MDFjMWEw
NGQ1MzBjNTYzY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaApAQCAtMzgsOCArMzgsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2FsbGJh
Y2spCiB7CiAgICAgQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnRlcm5h
bEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkKLSAgICAg
ICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBtX2VtYmVkZGVyVG9XYXNtSW50ZXJu
YWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpOworICAgIGZvciAodW5zaWdu
ZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewor
CisgICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsK
KyAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgeworICAgICAg
ICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJU
b1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgSW50
ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5h
bEZ1bmN0aW9uSW5kZXhdLmdldCgpOworICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNl
ID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVu
Y3Rpb25Db3VudCgpOworICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IFdhc206OkJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9p
bnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9u
LT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5h
bEZ1bmN0aW9uSW5kZXhdKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21F
bnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CisKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5j
dGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2Fz
bUVudHJ5cG9pbnRDYWxsZWUpKTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggZWVm
Yjk3MjUxMGFiODQzMzVjMDNmNzA0ZGY0YjViMmI0NTAzOWUxNS4uY2U2MTA3NmQxYWNiNzlhZWE0
YzVlOGI3NTJiMTc5NDg1Y2FmMDhlZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcApAQCAtNDcsNyArNDcsNiBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaQog
ICAgIEpJVCBqaXQ7CiAKICAgICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlv
bkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKLSAgICBHUFJSZWcgY2FsbGVlID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOwogICAgIEdQUlJlZyBiYXNlTWVt
b3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICBBU1NFUlQoYmFzZU1lbW9y
eSAhPSBzY3JhdGNoKTsKICAgICBBU1NFUlQocGlubmVkUmVncy5zaXplUmVnaXN0ZXIgIT0gYmFz
ZU1lbW9yeSk7CkBAIC01OCwyMCArNTcsMTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2kKICAg
ICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uoc2l6ZVJlZ0FzU2NyYXRjaCk7IC8vIE9sZCBJ
bnN0YW5jZSoKICAgICAvLyBHZXQgdGhlIGNhbGxlZSdzIFdhc206Okluc3RhbmNlIGFuZCBzZXQg
aXQgYXMgV2FzbUNvbnRleHQncyBpbnN0YW5jZS4gVGhlIGNhbGxlciB3aWxsIHRha2UgY2FyZSBv
ZiByZXN0b3JpbmcgaXRzIG93biBJbnN0YW5jZS4KICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJl
c3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoaW1w
b3J0SW5kZXgpKSwgYmFzZU1lbW9yeSk7IC8vIEluc3RhbmNlKi4KLSAgICAvLyBXaGlsZSB3ZSdy
ZSBhY2Nlc3NpbmcgdGhhdCBjYWNoZWxpbmUsIGFsc28gZ2V0IHRoZSB3YXNtIGVudHJ5cG9pbnQg
YW5kIGNhbGxlZSBzbyB3ZSBjYW4gdGFpbCBjYWxsIHRvIGl0IGJlbG93LgorICAgIC8vIFdoaWxl
IHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20gZW50cnlw
b2ludCBzbyB3ZSBjYW4gdGFpbCBjYWxsIHRvIGl0IGJlbG93LgogICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbihpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsKLSAgICBqaXQubG9hZFB0
cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mQm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24oaW1wb3J0SW5kZXgpKSwgY2FsbGVlKTsKICAgICBqaXQuc3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkpOwogCiAgICAgaml0LmxvYWRQdHIoSklUOjpB
ZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGlt
aXQoKSksIHNpemVSZWdBc1NjcmF0Y2gpOwogICAgIGppdC5zdG9yZVB0cihzaXplUmVnQXNTY3Jh
dGNoLCBKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSk7CiAKLSAgICAvLyBTZXQgdGhlIGNhbGxlZSBzbG90IGluIHRoZSBjYWxsIGZy
YW1lCi0gICAgaml0LmxvYWRQdHIoY2FsbGVlLCBjYWxsZWUpOwotICAgIC8vIEF0IHRoaXMgcG9p
bnQsIHdlIGhhdmUgYmVlbiBjYWxsZWQsIHNvIFJldHVyblBDIGlzIG9uIHRoZSBzdGFjaywgYnV0
IHdlIGhhdmUgbm90IHlldCBwdXNoZWQgdGhlIGZyYW1lIHBvaW50ZXIsCi0gICAgLy8gc28gd2Ug
aGF2ZSB0byBzdWJ0cmFjdCB0aGUgc3BhY2UgZm9yIENhbGxlckZyYW1lIGZyb20gdGhlIGNhbGxl
ZSBzbG90Ci0gICAgaml0LnN0b3JlUHRyKGNhbGxlZSwgSklUOjpBZGRyZXNzKEpJVDo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3Rlcikg
LSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSk7Ci0KICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNv
ZGUgYXNzdW1lcyB0aGF0IGFsbCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCBy
ZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIK
ICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBh
cyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxlZS5jcHAKaW5kZXggOTMzMTRhYjY2Nzc4N2Y2OTE5OWIxYTQyYzNkMjlk
M2ZjNGI2Yzg2Ny4uZThkZGYxNTNkZDlkOTAyMjljNTEyODFlYzI4MTJmN2E1OTExNDFkNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTMyLDE0ICszMiwx
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1DYWxsZWU6OkNhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKQorQ2FsbGVlOjpDYWxsZWUo
V2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgRW50cnlwb2ludCYmIGVudHJ5
cG9pbnQpCiAgICAgOiBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCisgICAgLCBt
X2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6
c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CiB9CiAKLUNhbGxlZTo6Q2FsbGVlKFdh
c206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCitDYWxsZWU6OkNh
bGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICA6IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9u
TW9kZSkKKyAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgICwgbV9p
bmRleE9yTmFtZShpbmRleCwgV1RGTW92ZShuYW1lKSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6
c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CkBAIC01MCw0OCArNTIsNiBAQCBDYWxs
ZWU6On5DYWxsZWUoKQogICAgIENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVy
Q2FsbGVlKHRoaXMpOwogfQogCi0KLWlubGluZSB2b2lkIHJlcGF0Y2hNb3ZlKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4gbW92
ZUxvY2F0aW9uLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKLXsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKCZ0YXJnZXRD
YWxsZWUpKTsKLX0KLQotaW5saW5lIHZvaWQgcmVwYXRjaENhbGwoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbiwg
Q2FsbGVlJiB0YXJnZXRDYWxsZWUpCi17Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFy
Q2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4odGFy
Z2V0Q2FsbGVlLmNvZGUoKSkpOwotfQotCi12b2lkIEJCUUNhbGxlZTo6YWRkQ2FsbGVyKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5k
Q2FsbCBjYWxsKQotewotICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbC5tb3ZlTG9jYXRpb24pOwotICAgIGF1dG8gY2FsbExv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihj
YWxsLmNhbGxMb2NhdGlvbik7Ci0gICAgbV9tb3ZlTG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRp
b24pOwotICAgIG1fY2FsbExvY2F0aW9ucy5hcHBlbmQoY2FsbExvY2F0aW9uKTsKLX0KLQotdm9p
ZCBCQlFDYWxsZWU6OmFkZEFuZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
ciwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQotewot
ICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnQoKS5jb21waWxhdGlvbik7Ci0KLSAgICBhdXRv
IG1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNh
bGwubW92ZUxvY2F0aW9uKTsKLSAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbC5jYWxsTG9jYXRpb24pOwotICAg
IG1fbW92ZUxvY2F0aW9ucy5hcHBlbmQobW92ZUxvY2F0aW9uKTsKLSAgICBtX2NhbGxMb2NhdGlv
bnMuYXBwZW5kKGNhbGxMb2NhdGlvbik7Ci0KLSAgICBDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1f
cmVwbGFjZW1lbnQgPyBzdGF0aWNfY2FzdDxDYWxsZWUmPigqbV9yZXBsYWNlbWVudCkgOiAqdGhp
czsKLSAgICByZXBhdGNoTW92ZShsb2NrZXIsIG1vdmVMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsK
LSAgICByZXBhdGNoQ2FsbChsb2NrZXIsIGNhbGxMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKLX0K
LQotdm9pZCBCQlFDYWxsZWU6OnJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBs
b2NrZXIsIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdl
dENhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24pOwotICAgIGZvciAoYXV0byBtb3ZlTG9j
YXRpb24gOiBtX21vdmVMb2NhdGlvbnMpCi0gICAgICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwgbW92
ZUxvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOwotICAgIGZvciAoYXV0byBjYWxsTG9jYXRpb24gOiBt
X2NhbGxMb2NhdGlvbnMpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGxvY2tlciwgY2FsbExvY2F0aW9u
LCB0YXJnZXRDYWxsZWUpOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5oCmluZGV4IDdlZWVkNTJjMmVlMzUyZDk3ZjZmMjYzYTIzOTI3ZWFkMGE4OTc2NzIuLmY3
ZWE0ZDA1YjhkMGE3MWMxZWU2MmE1NmM0ZDM5ZGE1NDlmMDliN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTQwLDEyICs0MCwxMSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogY2xhc3MgQ2FsbGVlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPENhbGxlZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIEVudHJ5cG9pbnQmIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQ7IH0KLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBjb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5
UHRyVGFnPigpOyB9Ci0gICAgSW5kZXhPck5hbWUgaW5kZXhPck5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4T3JOYW1lOyB9Ci0gICAgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRpb25Nb2RlOyB9CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50
cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsg
fQogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJl
dHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKyAgICBJbmRleE9yTmFt
ZSBpbmRleE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhPck5hbWU7IH0KKyAgICBDb21w
aWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxhdGlv
bk1vZGU7IH0KIAogICAgIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0CiAg
ICAgewpAQCAtNTcsNzAgKzU2LDc4IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5DYWxsZWUoKTsKIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxlZShDb21waWxhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShDb21w
aWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRp
b25Nb2RlLCBXYXNtOjpFbnRyeXBvaW50JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiwgc2l6ZV90LCBzdGQ6
OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOwogCiBwcml2YXRlOgog
ICAgIENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZTsKLSAgICBFbnRyeXBvaW50IG1f
ZW50cnlwb2ludDsKKyAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKICAgICBJbmRl
eE9yTmFtZSBtX2luZGV4T3JOYW1lOwogfTsKIAogY2xhc3MgT01HQ2FsbGVlIGZpbmFsIDogcHVi
bGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lKQorICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYm
IHVubGlua2VkQ2FsbHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdD
YWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CiAgICAgfQogCisgICAgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiB3YXNtVG9XYXNtQ2FsbHNpdGVzKCkgeyByZXR1cm4gbV93YXNtVG9XYXNt
Q2FsbHNpdGVzOyB9CisKIHByaXZhdGU6Ci0gICAgT01HQ2FsbGVlKHNpemVfdCBpbmRleCwgc3Rk
OjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCi0gICAgICAg
IDogQ2FsbGVlKENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkp
CisgICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgICAgICA6
IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1vdmUoZW50cnlwb2lu
dCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQorICAgICAgICAsIG1fd2FzbVRvV2FzbUNhbGxzaXRl
cyhXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQogICAgIHsKICAgICB9CisKKyAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogfTsKIAogY2xhc3Mg
T01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWdu
ZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4KQorICAgIHN0
YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
dWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxp
bmtlZENhbGxzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NS
RW50cnlDYWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIGxvb3BJbmRleCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JF
bnRyeUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMp
KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsgfQogICAgIHVpbnQzMl90
IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcEluZGV4OyB9CisgICAgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB3YXNtVG9XYXNtQ2FsbHNpdGVzKCkgeyByZXR1cm4gbV93
YXNtVG9XYXNtQ2FsbHNpdGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgT01HRm9yT1NSRW50cnlDYWxs
ZWUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3Qg
bG9vcEluZGV4KQotICAgICAgICA6IENhbGxlZShDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgT01HRm9yT1NSRW50cnlDYWxsZWUo
V2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNv
bnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGlu
ZGV4LCBXVEZNb3ZlKG5hbWUpKQorICAgICAgICAsIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyhXVEZN
b3ZlKHVubGlua2VkQ2FsbHMpKQogICAgICAgICAsIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgICAgICAsIG1fbG9vcEluZGV4KGxvb3BJ
bmRleCkKICAgICB7CiAgICAgfQogCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKICAgICB1bnNpZ25lZCBtX29zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemU7CiAgICAgdWludDMyX3QgbV9sb29wSW5kZXg7CiB9OwogCiBjbGFzcyBFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMg
UmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBl
bnRyeXBvaW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSkpOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoKQotICAgICAgICA6IENhbGxlZShDb21w
aWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUpCisgICAgRW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgICAgICA6IENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUsIFdURk1vdmUo
ZW50cnlwb2ludCkpCiAgICAgewogICAgIH0KIH07CiAKIGNsYXNzIEJCUUNhbGxlZSBmaW5hbCA6
IHB1YmxpYyBDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVh
dGUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50KQor
ICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3Vu
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShpbmRleCwg
V1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCkpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSkpOwogICAgIH0KIAogICAgIE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0
KCk7IH0KQEAgLTEzMywyNyArMTQwLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERpZFN0YXJ0
Q29tcGlsaW5nT1NSRW50cnlDYWxsZWUoYm9vbCB2YWx1ZSkgeyBtX2RpZFN0YXJ0Q29tcGlsaW5n
T1NSRW50cnlDYWxsZWUgPSB2YWx1ZTsgfQogCiAgICAgT01HQ2FsbGVlKiByZXBsYWNlbWVudCgp
IHsgcmV0dXJuIG1fcmVwbGFjZW1lbnQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJlcGxhY2VtZW50
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgUmVmPE9NR0NhbGxlZT4mJiByZXBsYWNlbWVudCkKKyAg
ICB2b2lkIHNldFJlcGxhY2VtZW50KFJlZjxPTUdDYWxsZWU+JiYgcmVwbGFjZW1lbnQpCiAgICAg
ewogICAgICAgICBtX3JlcGxhY2VtZW50ID0gV1RGTW92ZShyZXBsYWNlbWVudCk7CiAgICAgfQog
CiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudC5n
ZXQoKTsgfQogCi0gICAgdm9pZCBhZGRDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5r
QnVmZmVyJiwgVW5saW5rZWRNb3ZlQW5kQ2FsbCk7Ci0gICAgdm9pZCBhZGRBbmRMaW5rQ2FsbGVy
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYsIFVubGlua2VkTW92ZUFuZENhbGwp
OwotCi0gICAgdm9pZCByZXBhdGNoQ2FsbGVycyhjb25zdCBBYnN0cmFjdExvY2tlciYsIENhbGxl
ZSYpOwotCiBwcml2YXRlOgotICAgIEJCUUNhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxj
b25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8
VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCi0gICAgICAgIDogQ2FsbGVlKENvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgQkJRQ2FsbGVlKFdhc206
OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBO
YW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVw
Q291bnQ+JiYgdGllclVwQ291bnQpCisgICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSkp
CiAgICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKICAgICB7CiAg
ICAgfQogCi0gICAgVmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJU
YWc+PiBtX21vdmVMb2NhdGlvbnM7Ci0gICAgVmVjdG9yPENvZGVMb2NhdGlvbk5lYXJDYWxsPFdh
c21FbnRyeVB0clRhZz4+IG1fY2FsbExvY2F0aW9uczsKICAgICBSZWZQdHI8T01HRm9yT1NSRW50
cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxsZWU7CiAgICAgUmVmUHRyPE9NR0NhbGxlZT4gbV9yZXBs
YWNlbWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlv
bi5oCmluZGV4IDZmYTQzNjljY2RjYTg4ZTRiNzBlZDY0NjliYjc2Mzk4MTRmOGU4NDEuLmI0NDJi
NjE2MWJmOTIzMzc1ODE5NzU4MTNmZjM4MDZhNzMxYTkyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC04OCwxNiArODgs
MzQgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBoZWFkZXJTaXpl
SW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KLSAgICB2b2lkIHNldHVwRnJhbWVJblBy
b2xvZ3VlKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNC
bG9jayogYmxvY2spIGNvbnN0CisgICAgdm9pZCBzZXR1cEZyYW1lSW5Qcm9sb2d1ZShDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogY2FsbGVlTW92ZUxvY2F0aW9uLCBC
Mzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2ljQmxvY2sqIGJs
b2NrKSBjb25zdAogICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBo
ZXJlIGZvciBub3cuIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMg
aGVyZSBmb3Igbm93LiIpOwogCisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdldENhbGxl
ZVBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2Ms
IEIzOjpJbnQ2NCwgb3JpZ2luKTsKKyAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+cmVzdWx0
Q29uc3RyYWludHMgPSB7IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyIH07CisgICAgICAgIGdl
dENhbGxlZVBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAg
ICBnZXRDYWxsZWVQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcGFyYW1zWzBdLmdwcigpOwor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9u
ID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0
ciksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3Zl
TG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwor
ICAgICAgICBCMzo6VmFsdWUqIG9mZnNldE9mQ2FsbGVlID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6
Q29uc3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVv
ZihSZWdpc3RlcikpOworICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4o
cHJvYywgQjM6OlN0b3JlLCBvcmlnaW4sCisgICAgICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50
LAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpBZGQs
IG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNhbGxlZSkpOworCiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSB6ZXJvIGludG8gdGhlIENvZGVCbG9jayog
c3BvdCBpbiB0aGUgY2FsbCBmcmFtZSwKICAgICAgICAgLy8gYnV0IHRoZXJlIGFyZSBwbGFjZXMg
dGhhdCBpbnRlcnByZXQgbm9uLW51bGwgQ29kZUJsb2NrIHNsb3QgdG8gbWVhbiBhIHZhbGlkIENv
ZGVCbG9jay4KICAgICAgICAgLy8gV2hlbiBkb2luZyB1bndpbmRpbmcsIHdlJ2xsIG5lZWQgdG8g
dmVyaWZ5IHRoYXQgdGhlIGVudGlyZSBydW50aW1lIGlzIE9LIHdpdGggYSBub24tbnVsbAogICAg
ICAgICAvLyBDb2RlQmxvY2sgbm90IGltcGx5aW5nIHRoYXQgdGhlIENvZGVCbG9jayBpcyB2YWxp
ZC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTMyMQotICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwogICAgICAgICBCMzo6
VmFsdWUqIG9mZnNldE9mQ29kZUJsb2NrID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Q2NFZh
bHVlPihwcm9jLCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdp
c3RlcikpOwogICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywg
QjM6OlN0b3JlLCBvcmlnaW4sCiAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25z
dDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgMCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDNhODdmNjFhNDUwZWU3ZGIyNGQwZjliNTk5MjY3OGZj
ZjBiNzk4MzUuLmQ0YTljZDY3NzEwMmI1OGU0ZmM1OWUxYTIwYWU1NmI4ZTIxYzc0MzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUJCUVBsYW5J
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQu
aCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKIApAQCAtNDYsMTUgKzQ3LDcgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWwKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlz
ID0gdGhpczsKIAotICAgIG1fY2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7Ci0gICAgbV9i
b3hlZENhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwotICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBtX2NhbGxlZUNvdW50OyBpKyspIHsKLSAgICAgICAgdWludDMyX3QgZnVuY3Rpb25J
bmRleFNwYWNlID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpICsgaTsK
LSAgICAgICAgbV9jYWxsZWVzW2ldID0gQkJRQ2FsbGVlOjpjcmVhdGUoZnVuY3Rpb25JbmRleFNw
YWNlLCBtb2R1bGVJbmZvcm1hdGlvbi5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFj
ZSksIG1ha2VVbmlxdWU8VGllclVwQ291bnQ+KCkpOwotICAgICAgICBtX2JveGVkQ2FsbGVlc1tp
XSA9IENhbGxlZUJpdHM6OmJveFdhc20obV9jYWxsZWVzW2ldLnB0cigpKTsKLSAgICB9Ci0KLSAg
ICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbV9jYWxsZWVzLCBtYWtl
UmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJl
ZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUo
cHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJR
UGxhbihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENv
bXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewogICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgp
KSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7
CkBAIC02MywxOCArNTYsMjEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4
dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWwKICAgICAgICAgfQog
CiAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZXZlbnR1YWxseSBjb2xsZWN0IHRoZSBCQlEg
Y29kZS4KKyAgICAgICAgbV9jYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKICAgICAgICAg
bV9vcHRpbWl6ZWRDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKICAgICAgICAgbV93YXNt
SW5kaXJlY3RDYWxsRW50cnlQb2ludHMucmVzaXplKG1fY2FsbGVlQ291bnQpOwogCi0gICAgICAg
IG1fcGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVm
UHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUp
IHsKKyAgICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxl
ZUluZGV4LCBSZWZQdHI8V2FzbTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwg
UmVmPFdhc206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgewogICAgICAgICAgICAg
aWYgKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkgewogICAgICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gbV9lbWJlZGRlckNhbGxlZXMuc2V0KGNhbGxlZUluZGV4LCBXVEZNb3ZlKGVtYmVkZGVy
RW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3dhc21J
bmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF0gPSBtX2NhbGxlZXNbY2FsbGVlSW5k
ZXhdLT5jb2RlKCk7CisgICAgICAgICAgICBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdID0gV1RGTW92
ZSh3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxF
bnRyeVBvaW50c1tjYWxsZWVJbmRleF0gPSBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdLT5lbnRyeXBv
aW50KCk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicyA9IG1f
cGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKKyAgICAgICAgbV93YXNtVG9XYXNtQ2Fs
bHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOwogCiAgICAgICAgIHNl
dENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICB9KSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldy
YXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db2RlQmxvY2suaAppbmRleCAxMGVmMjRjNDliMDU3Nzg5ZjI4YzU2NTU0ZDQ1NmRjMzNm
NzNjNGY5Li5kZWEyZmZhMzE4MTIwM2Y3OGFhYTYxYzcwYmYyOTcxYmMwMzI3OWVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCkBAIC0yOCw3ICsyOCw2IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21FbWJlZGRlci5o
IgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBA
IC00MSw4ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLWNs
YXNzIEJCUVBsYW47CitjbGFzcyBDYWxsZWU7CiBzdHJ1Y3QgQ29udGV4dDsKK2NsYXNzIEJCUVBs
YW47CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogc3RydWN0IFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw7CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25seSB2YWxpZCBvbmNlIHRoZSBjYWxsZWVz
IGhhdmUgYmVlbiBwb3B1bGF0ZWQuCiAKLSAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUmIGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKQorICAgIENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewog
ICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0
aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtODYsMjcgKzg2LDI5
IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKTsKICAgICAgICAgcmV0
dXJuICpjYWxsZWU7CiAgICAgfQotCi0gICAgQkJRQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgQ2FsbGVl
JiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpKTsKICAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3Bh
Y2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7Ci0gICAgICAgIHJldHVybiBtX2NhbGxlZXNbY2Fs
bGVlSW5kZXhdLmdldCgpOworICAgICAgICBpZiAobV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUlu
ZGV4XSkKKyAgICAgICAgICAgIHJldHVybiAqbV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4
XS5nZXQoKTsKKyAgICAgICAgcmV0dXJuICptX2NhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwog
ICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KiBlbnRy
eXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCisgICAgQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQo
cnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+
PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9
IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgcmV0
dXJuICZtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF07CisgICAgICAg
IHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lk
KiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVu
c2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpOwotICAgICAgICByZXR1cm4gJm1fYm94ZWRDYWxsZWVzW2NhbGxlZUluZGV4XTsKKyAg
ICAgICAgcmV0dXJuICZtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF07
CiAgICAgfQogCiAgICAgYm9vbCBpc1NhZmVUb1J1bihNZW1vcnlNb2RlKTsKQEAgLTEyMiwxMSAr
MTI0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CiAg
ICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKICAgICBNZW1vcnlNb2RlIG1fbW9kZTsKLSAgICBW
ZWN0b3I8UmVmPEJCUUNhbGxlZT4+IG1fY2FsbGVlczsKLSAgICBWZWN0b3I8UmVmUHRyPE9NR0Nh
bGxlZT4+IG1fb3B0aW1pemVkQ2FsbGVlczsKLSAgICBWZWN0b3I8dm9pZCo+IG1fYm94ZWRDYWxs
ZWVzOwotICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWU+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKKyAgICBW
ZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fY2FsbGVlczsKKyAgICBWZWN0b3I8UmVmUHRyPENhbGxl
ZT4+IG1fb3B0aW1pemVkQ2FsbGVlczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8Q2Fs
bGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlckNhbGxlZXM7CiAgICAg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21JbmRp
cmVjdENhbGxFbnRyeVBvaW50czsKKyAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAgUmVm
UHRyPEJCUVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2NvbXBpbGF0aW9u
RmluaXNoZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRk
ZXIuaAppbmRleCBjNzhiNDQzYzU5MWU4NzAzNGI0MTk1ZWNhMDI3MjhkZWY4MGNjODkzLi5hMjM3
OWZkNTg5Yzg5ZGY2MzU3ZTZlNDQxYmVkMmE1MTg3MzljYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApAQCAtNDEsNyArNDEsNiBAQCBjbGFzcyBFeGVjU3Rh
dGU7CiBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7Ci1jbGFz
cyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiBjbGFzcyBJbnN0YW5jZTsKIHN0cnVjdCBJbnRl
cm5hbEZ1bmN0aW9uOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwpAQCAtNDksNyArNDgsNyBA
QCBjbGFzcyBTaWduYXR1cmU7CiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKIAogLy8g
Q3JlYXRlIHdyYXBwZXIgY29kZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHku
Ci11c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoQ29tcGls
YXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlKT47Cit1c2luZyBDcmVhdGVF
bWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1v
ZGUsIHVpbnQzMl90KT47CiAKIC8vIENhbGxlZCBhcyBzb29uIGFzIGFuIGV4Y2VwdGlvbiBpcyBk
ZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMgdG8gY29udGludWUgYXQuCiB1c2lu
ZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0
aW9uVHlwZSwgSW5zdGFuY2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aAppbmRleCBlYTBlMGI2NThlOWU0NTVlOWIwMWNkYWUyYjQ3OTZiNjIyYjgwZTNkLi4wNjY5YmI0
MDdlMjk1OTM2MjJmY2NhOGU1MTkxMTk1ZGQ5YjQ2ZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yODcsMTUgKzI4NywxMCBAQCBpbmxpbmUgYm9vbCBpc1Zh
bGlkTmFtZVR5cGUoSW50IHZhbCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0cnVjdCBVbmxp
bmtlZE1vdmVBbmRDYWxsIHsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1vdmVM
b2NhdGlvbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsTG9jYXRpb247Ci19OwotCiBz
dHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbCB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwotICAgIHNpemVfdCB0YXJnZXRGdW5jdGlvbkluZGV4U3BhY2U7Ci0gICAgVW5s
aW5rZWRNb3ZlQW5kQ2FsbCB1bmxpbmtlZE1vdmVBbmRDYWxsOworICAgIENvZGVMb2NhdGlvbk5l
YXJDYWxsPFdhc21FbnRyeVB0clRhZz4gY2FsbExvY2F0aW9uOworICAgIHNpemVfdCBmdW5jdGlv
bkluZGV4U3BhY2U7CiB9OwogCiBzdHJ1Y3QgRW50cnlwb2ludCB7CkBAIC0zMTgsMTIgKzMxMywx
MCBAQCBzdHJ1Y3QgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7CiAgICAgdXNpbmcgTG9h
ZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qOwogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBzaWduYXR1cmVJbmRleCk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBl
bnRyeXBvaW50TG9hZExvY2F0aW9uKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZC
b3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbik7IH0KIAogICAg
IC8vIEZJWE1FOiBQYWNrIHNpZ25hdHVyZSBpbmRleCBhbmQgY29kZSBwb2ludGVyIGludG8gb25l
IDY0LWJpdCB2YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NTExPi4KICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCB7IFNpZ25hdHVy
ZTo6aW52YWxpZEluZGV4IH07CiAgICAgTG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b247Ci0gICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOwogfTsKIHVzaW5nIEZ1bmN0
aW9uSW5kZXhTcGFjZSA9IFZlY3RvcjxXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uPjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCA3ZTIxMjRmNzZj
NjNiZjc1ZTJkYjEyMzQ5ZDk1MGIwZTkzNjg0MGNjLi5mNGYzNTA4N2UyNTZkMDkyY2U3NGIyMWI4
NDQwYTkzNzI1ZDE2Njg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFu
Y2UuaApAQCAtMTMwLDcgKzEzMCw2IEBAIHB1YmxpYzoKICAgICAgICAgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHsg
bnVsbHB0ciB9OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiB3YXNtVG9FbWJlZGRlclN0dWI7CiAgICAgICAgIHZvaWQqIGltcG9ydEZ1bmN0aW9uIHsgbnVs
bHB0ciB9OyAvLyBJbiBhIEpTIGVtYmVkZGluZywgdGhpcyBpcyBhIFdyaXRlQmFycmllcjxKU09i
amVjdD4uCi0gICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiB7IG51bGxwdHIg
fTsKICAgICB9OwogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtSW1wb3J0RnVuY3Rpb25zOyB9CiAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbXBv
cnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKQpAQCAtMTQyLDcgKzE0MSw2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwo
KSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpF
Q1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bik7IH0KICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKHNpemVf
dCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5j
dGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKElt
cG9ydEZ1bmN0aW9uSW5mbywgd2FzbVRvRW1iZWRkZXJTdHViKTsgfQogICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0
dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVu
Y3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIGltcG9ydEZ1
bmN0aW9uKTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2Nh
dGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsg
aW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9P
RkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKTsgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9y
dEZ1bmN0aW9uTnVtKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigmaW1wb3J0RnVuY3Rp
b25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1wb3J0RnVuY3Rpb24pOyB9CiAKICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pID09IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjxzaXplb2YodWludDY0X3QpPihzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSksICJX
ZSByZWx5IG9uIHRoaXMgZm9yIHRoZSBhbGlnbm1lbnQgdG8gYmUgY29ycmVjdCIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNw
cAppbmRleCAzZWI0YzFhZjA2N2QxMjExZjk1OGMzZDk0NDViZDBmOTc5YWE1ZjhhLi5kYjBkNjhj
ZmZmMDQ5MDk0ZTI1YzU5ZGI0ZDI1MGIxYTc1MjkwMzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcApAQCAtNTQsMTUg
KzU0LDE1IEBAIG5hbWVzcGFjZSBXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWwgewogc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotT01HRm9yT1NSRW50cnlQ
bGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBt
b2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1
aW50MzJfdCBsb29wSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCitPTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiBj
b250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgUmVmPEJCUUNhbGxlZT4mJiBjYWxsZWUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgTWVtb3J5TW9kZSBtb2Rl
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29u
c3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkp
LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2Rl
QmxvY2tGb3IobW9kZSkpCiAgICAgLCBtX2NhbGxlZShXVEZNb3ZlKGNhbGxlZSkpCiAgICAgLCBt
X2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRl
eCkKIHsKLSAgICBzZXRNb2RlKGNvZGVCbG9jay5tb2RlKCkpOworICAgIHNldE1vZGUobW9kZSk7
CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2Rl
QmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRh
TG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGlu
ZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTog
IiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKQEAgLTgxLDMzICs4MSw0NSBAQCB2b2lk
IE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAorICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0
OwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9u
LCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29t
cGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29w
SW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGls
YXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5k
ZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAg
ICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1
bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRpZXIgdXAgIiwgU3RyaW5nOjpudW1iZXIobV9m
dW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgRW50cnlwb2lu
dCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNt
RW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAo
VU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICBCYXNl
OjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1l
bW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVy
KG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZjxP
TUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0
ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29w
SW5kZXgpOwotICAgIGNhbGxlZS0+ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBX
VEZNb3ZlKGNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Ci0gICAgY2FsbGVlLT5lbnRyeXBv
aW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgb21n
RW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2Vi
QXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0
aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5n
KEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFt
ZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAg
ICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKKyAgICBv
bWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGls
ZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICBB
U1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkp
KTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNl
LCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFj
ZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlu
a2VkQ2FsbHMpKTsKICAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBlbnRyeXBvaW50ID0gY2Fs
bGVlLT5lbnRyeXBvaW50KCk7CisKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2Nv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY29udGV4dC5vdXRn
b2luZ0NhbGxzKSB7Ci0gICAgICAgICAgICBCQlFDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fY29k
ZUJsb2NrLT53YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLnRhcmdldEZ1
bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICB0YXJnZXRDYWxsZWUuYWRkQW5kTGlua0Nh
bGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsIGNhbGwudW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisgICAg
ICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBv
aW50OworICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQorICAgICAgICAgICAg
ICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwu
ZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5y
ZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdh
c21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHJlc2V0
SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwpAQCAtMTIwLDYgKzEzMiwxOSBAQCB2b2lk
IE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAg
IG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJzKClbbV9sb29wSW5kZXhd
ID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZTsKICAgICAgICAg
ICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HRm9y
T1NSRW50cnkgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAg
ICAgICB9CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIC8vIEl0IGlz
IHBvc3NpYmxlIHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNl
IG1fY29kZUJsb2NrLT5sb2NrLgorICAgICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50
cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBm
dW5jdGlvbiBsaW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBj
YWxsZWUuCisgICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUg
YWdhaW4gbm90IHRvIG1pc3MgdGhhdCBjaGFuY2UuCisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6
IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OworICAgICAgICAgICAgaWYg
KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCku
aW1wb3J0RnVuY3Rpb25Db3VudCgpKQorICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2Nv
ZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5j
b2RlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1f
Y29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJU
YWc+KCk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2Fs
bC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlw
b2ludCkpOworICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JF
bnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1f
ZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIG1fY2FsbGVlLT50aWVy
VXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBs
YW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4u
aAppbmRleCBkNTZlYTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4YzQzNTBkMGRjLi4wMTUxZGE2
NjVhOTY4MzI4Zjk1MDM4ZjViNTBjMDg1NzYxZjA1ZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oCkBAIC00OCw3ICs0OCw3
IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBo
b2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVm
ZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVs
ZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3Qg
bG9vcEluZGV4LCBDb2RlQmxvY2smLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBPTUdGb3JPU1JF
bnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIFJlZjxCQlFDYWxsZWU+JiYsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxl
dGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNo
aXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA3NDhlNTQ5Nzc1OTMzYmJmYTdmZTlmMDcx
ODA4YmUwMjMxZmRkNWQzLi45ODNhMzZhZmVlMzBmMTM0NjRmZjA4MDk1ODBhY2YzNWQ2MWVlZTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC01NCwx
MyArNTQsMTMgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotT01HUGxhbjo6T01HUGxhbihDb250ZXh0
KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Q29kZUJsb2NrJiBjb2RlQmxvY2ssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK09NR1BsYW46Ok9N
R1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQogICAg
IDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPiht
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fbW9k
dWxlKFdURk1vdmUobW9kdWxlKSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAs
IG1fY29kZUJsb2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQogICAgICwgbV9mdW5j
dGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7Ci0gICAgc2V0TW9kZShjb2RlQmxvY2subW9kZSgp
KTsKKyAgICBzZXRNb2RlKG1vZGUpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cnVubmFibGUo
KSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tG
b3IobV9tb2RlKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlN0YXJ0aW5nIE9NRyBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTog
IiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKQEAgLTc5LDQ4ICs3OSw1NyBAQCB2b2lk
IE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAg
ICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CiAKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4g
dW5saW5rZWRDYWxsczsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwog
ICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1f
Y29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpP
TUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgpOworICAgIGF1dG8gcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1
cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1bmN0
aW9uSW5kZXgsIFVJTlQzMl9NQVgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBp
bGVSZXN1bHQpKSB7CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyhw
YXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRpZXIgdXAgIiwg
U3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgRW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkgewogICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91
dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4
ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFJlZjxPTUdDYWxsZWU+IG9tZ0NhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRl
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKTsKLSAgICBvbWdDYWxsZWUtPmVudHJ5cG9pbnQoKS5jb21w
aWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICBvbWdFbnRyeXBvaW50
LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBP
TUcgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9u
SW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlv
bkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQu
d2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdDYWxsZWUtPmVudHJ5cG9pbnQo
KS5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3Rl
cnMpOworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFy
c2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVy
cyk7CiAKLSAgICBCQlFDYWxsZWUmIGJicUNhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2NhbGxlZXNb
bV9mdW5jdGlvbkluZGV4XS5nZXQoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7CisgICAgICAgIFJlZjxP
TUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2lu
dCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24t
PmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52
YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0
cigpKSk7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdKTsKKyAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2lu
dCgpOwogCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHB1Ymxpc2ggb3VyIGNh
bGxlZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGxpbmsgb3VyIGNhbGxzaXRlcy4gVGhpcyBlbmFi
bGVzIHVzIHRvIGVuc3VyZSB3ZQogICAgICAgICAvLyBhbHdheXMgY2FsbCB0aGUgZmFzdGVzdCBj
b2RlLiBBbnkgZnVuY3Rpb24gbGlua2VkIGFmdGVyIHVzIHdpbGwgc2VlIG91ciBuZXcgY29kZSBh
bmQgdGhlIG5ldyBjYWxsc2l0ZXMsIHdoaWNoIHRoZXkKICAgICAgICAgLy8gd2lsbCB1cGRhdGUu
IEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVzZXQg
dGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAgICAgICAg
Ly8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4KICAgICAg
ICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29k
ZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0NhbGxlZS5j
b3B5UmVmKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7CiAgICAgICAgIHsKKyAgICAgICAgICAgIEJC
UUNhbGxlZSYgYmJxQ2FsbGVlID0gKnN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2Nr
LT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSk7CiAgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkpOwotICAg
ICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50KGhvbGRlciwgb21nQ2FsbGVlLmNvcHlS
ZWYoKSk7CisgICAgICAgICAgICBiYnFDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlS
ZWYoKSk7CiAgICAgICAgICAgICBiYnFDYWxsZWUudGllclVwQ291bnQoKS0+bV9jb21waWxhdGlv
blN0YXR1c0Zvck9NRyA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7
CiAgICAgICAgIH0KLQotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjb250ZXh0Lm91dGdvaW5n
Q2FsbHMpIHsKLSAgICAgICAgICAgIEJCUUNhbGxlZSYgdGFyZ2V0Q2FsbGVlID0gbV9jb2RlQmxv
Y2stPndhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwudGFyZ2V0RnVuY3Rp
b25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIHRhcmdldENhbGxlZS5hZGRBbmRMaW5rQ2FsbGVy
KGhvbGRlciwgbGlua0J1ZmZlciwgY2FsbC51bmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7
CisgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9k
dWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCisgICAgICAgICAgICAgICAg
ZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5j
dGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFn
Z2VkPFdhc21FbnRyeVB0clRhZz4oKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVu
dHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzMCwxNCAr
MTM5LDMwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICByZXNl
dEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJl
IHBhcmFub2lkLgogCi0gICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW21fZnVuY3Rpb25JbmRleF0gPSBvbWdDYWxsZWUtPmNvZGUoKTsKLSAgICBtX2NvZGVCbG9j
ay0+bV9ib3hlZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IENhbGxlZUJpdHM6OmJveFdhc20o
b21nQ2FsbGVlLnB0cigpKTsKKyAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50
cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBM
b2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgYmJxQ2FsbGVl
LnJlcGF0Y2hDYWxsZXJzKGhvbGRlciwgb21nQ2FsbGVlLmdldCgpKTsKKworICAgICAgICBhdXRv
IHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykg
eworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJv
c2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5j
YWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNw
YWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAi
LCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBS
YXdQb2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9jay0+bV93YXNt
VG9XYXNtQ2FsbHNpdGVzW2ldKTsKKyAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2Vt
ZW50Q2FsbGVlID0gc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4obV9jb2RlQmxvY2stPm1fY2FsbGVl
c1tpXS5nZXQoKSktPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxz
KHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
aWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IHN0YXRpY19jYXN0PEJC
UUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5vc3JFbnRyeUNhbGxl
ZSgpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRv
V2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKFdh
c21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbklu
ZGV4LCAiIHdpdGggdGllciB1cCBjb3VudCBhdDogIiwgbV9jb2RlQmxvY2stPm1fY2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKKyAgICBkYXRhTG9nTG5J
ZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rp
b25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIHN0YXRpY19jYXN0PEJCUUNhbGxl
ZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSktPnRpZXJV
cENvdW50KCktPmNvdW50KCkpOwogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAppbmRleCBlNjg5ZDU2NjU3
YThkMWJiOWJkZTgyZWUwNTE1MzU0ODcwYmU4MzA4Li5jYjc5YjQzOWQ0ZTk5NGQ4NzBlOWRjOTA4
OWM0M2E3ZjU4NjAyNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFu
LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBOb3RlOiBDb21wbGV0aW9u
VGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRo
ZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgT01HUGxhbihDb250ZXh0KiwgUmVm
PE1vZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrJiwgQ29tcGxldGlv
blRhc2smJik7CisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6
CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFy
ZW50IGNsYXNzZXMuLi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRp
b25zLmNwcAppbmRleCA3OWM2NDBiMzY3ZjY3MDhmOWUxNTlkOGM1OTlmOWNiM2I2MTI2NmFjLi4x
YWRlOGE4ZTk0NDlkYThiM2YwNmNkM2Q2OTQyNTc5MmU2YzVkZjlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHN0
YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVwQ291bnQmIHRpZXJV
cCwgT01HQ2FsbGVlKiByZXBsYWNlCiAgICAgaWYgKGNvbXBpbGUpIHsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAidHJpZ2dlck9NR1JlcGxhY2VtZW50IGZvciAi
LCBmdW5jdGlvbkluZGV4KTsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2Rl
LgotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5j
ZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBmdW5j
dGlvbkluZGV4LCBjb2RlQmxvY2ssIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGluc3RhbmNlLT5jb250ZXh0KCks
IFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIGZ1bmN0aW9uSW5kZXgsIGNv
ZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdv
cmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
T3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JD
b21wbGV0aW9uKCk7CkBAIC0xOTcsMTQgKzE5Nyw5IEBAIHN0YXRpYyB2b2lkIGRvT1NSRW50cnko
SW5zdGFuY2UqIGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBj
CiAjZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZS4KICNlbmRpZgotCi0gICAg
Ly8gNC4gVXBkYXRlIHRoZSBjYWxsZWUgc2xvdCBpbiB0aGUgY2FsbCBmcmFtZSB0byB0aGUgT1NS
IGVudHJ5IGNhbGxlZS4KLSAgICBSZWdpc3Rlciogc3RhY2tQb2ludGVyID0gYml0d2lzZV9jYXN0
PFJlZ2lzdGVyKj4oY29udGV4dC5zcCgpKTsKLSAgICAqKHN0YWNrUG9pbnRlciArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAtIDEpID0gYml0d2lzZV9jYXN0PFJlZ2lzdGVyPihDYWxsZWVCaXRzOjpi
b3hXYXNtKCZvc3JFbnRyeUNhbGxlZSkpOwotCi0gICAgLy8gNS4gQ29uZmlndXJlIGFyZ3VtZW50
IHJlZ2lzdGVycyB0byBqdW1wIHRvIE9TUiBlbnRyeSBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBy
dW50aW1lIGZ1bmN0aW9uLgorICAgIC8vIDQuIENvbmZpZ3VyZSBhcmd1bWVudCByZWdpc3RlcnMg
dG8ganVtcCB0byBPU1IgZW50cnkgZnJvbSB0aGUgY2FsbGVyIG9mIHRoaXMgcnVudGltZSBmdW5j
dGlvbi4KICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gYml0d2lzZV9j
YXN0PFVDUFVSZWdpc3Rlcj4oYnVmZmVyKTsKLSAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1
bWVudEdQUjEpID0gYml0d2lzZV9jYXN0PFVDUFVSZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzPD4oKSk7CisgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmVu
dHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzczw+KCkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJ
T04gdHJpZ2dlck9TUkVudHJ5Tm93KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQpAQCAtMzcwLDcg
KzM2NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coUHJvYmU6OkNv
bnRleHQmIGNvbnRleHQpCiAKICAgICBpZiAoc3RhcnRPU1JFbnRyeUNvbXBpbGF0aW9uKSB7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdPU1Ig
Zm9yICIsIGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVm
KCpuZXcgT01HRm9yT1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpN
b2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpCQlFDYWxsZWU+KGNhbGxlZSks
IGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUo
KSkpOworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50
cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5t
b2R1bGUoKSksIFJlZjxXYXNtOjpCQlFDYWxsZWU+KGNhbGxlZSksIGZ1bmN0aW9uSW5kZXgsIGxv
b3BJbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAg
ICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxh
bi0+d2FpdEZvckNvbXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
VG9XYXNtLmNwcAppbmRleCBmMTNmNjQ1MDIwYjJmNzYwYjI0ZWNjYmY3M2EwYzdiM2NkOWQ0ZGQx
Li43MzUyMjAyODkzN2M2ZGFjMWZjNDczYzdlNGNkYzY0OTU4Y2U4ZWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCkBAIC00MiwxNSArNDIsMjEgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotdm9pZCBjcmVhdGVKU1RvV2FzbVdy
YXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqIHNlbGYsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUpCitzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4
dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCkKIHsKICAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQu
ZW1iZWRkZXJFbnRyeXBvaW50SklUOwogCisgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPElu
dGVybmFsRnVuY3Rpb24+KCk7CiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAKICAg
ICAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQogICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKENhbGxlZUJpdHM6OmJveFdhc20oc2VsZikpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBs
aW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgKmxpbmtl
ZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihjYWxs
ZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOwogCiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZv
JiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICBSZWdpc3RlclNl
dCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKQEAgLTYzLDcgKzY5LDcgQEAgdm9p
ZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNv
bnRleHQsIGNvbnN0IFNpZ25hdHUKICNlbmRpZgogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qg
cmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNl
VHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOwotICAgIHNlbGYtPmVudHJ5cG9pbnQoKS5jYWxsZWVT
YXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKKyAgICByZXN1bHQtPmVudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7CiAKICAgICB1bnNpZ25lZCB0
b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsK
ICAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJ
bkJ5dGVzKCk7CkBAIC0xMTksMTAgKzEyNSw5IEBAIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVy
KENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1CiAg
ICAgICAgIH0KIAogICAgICAgICBlbWl0VGhyb3dXYXNtVG9KU0V4Y2VwdGlvbihqaXQsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMiwgYXJndW1lbnRzSW5jbHVkZUk2NCA/IEV4Y2VwdGlvblR5cGU6Okk2
NEFyZ3VtZW50VHlwZSA6IEV4Y2VwdGlvblR5cGU6Okk2NFJldHVyblR5cGUpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgY29tcGlsYXRpb25D
b250ZXh0LmVtYmVkZGVyTW92ZUFuZENhbGwgPSBVbmxpbmtlZE1vdmVBbmRDYWxsIHsgfTsKICAg
ICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJ
bnN0YW5jZVBvaW50ZXI7CiAKICAgICB7CkBAIC0xOTMsMTAgKzE5OCw2IEBAIHZvaWQgY3JlYXRl
SlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCBTaWduYXR1CiAKICAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7CiAgICAgICAgIH0KLQotICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOwotICAgICAgICBjb21waWxhdGlv
bkNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbC0+bW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRo
UGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7
Ci0gICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAogICAg
IGlmICghIWluZm8ubWVtb3J5KSB7CkBAIC0yMjAsNyArMjIxLDEyIEBAIHZvaWQgY3JlYXRlSlNU
b1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25z
dCBTaWduYXR1CiAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0
aXZlLCBiYXNlTWVtb3J5LCBzY3JhdGNoT3JTaXplLCBzY3JhdGNoT3JTaXplKTsKICAgICB9CiAK
LSAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbC0+Y2FsbExvY2F0aW9u
ID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0
aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOworICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSB9KTsKKyAgICB9KTsKIAogICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYg
cmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CiAgICAgICAgIEdQUlJlZyByZWcgPSBy
ZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKQEAgLTI2MCw2ICsyNjYsOCBAQCB2b2lkIGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29u
c3QgU2lnbmF0dQogCiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJl
dCgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCmluZGV4IDkzYWEyNGQ5
NjgwYWZmZmQzYjdhOTZkMTkxZmNmOGMzOTFkMDIzMWIuLmI0Yjk4ZDE1OWIyODRiN2VjMzIzYWE1
MDJjMDNmOTIxYzEyYjAzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c20uaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdhc20g
ewogCi12b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25z
dCBTaWduYXR1cmUmLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIE1lbW9yeU1vZGUpOworc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IGZkM2FlMTgyMDRmMzU3YmIzMTM1Y2Uz
NTVlOWU2Y2NkMjJhODM5ZTcuLjA1N2FhNzAxOGI0NGE4ZmJiNGE4ZDQ3MTEzYmRiZWI4NzQ5ZGVj
ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCkBAIC00NjUsOCArNDY1LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93
KCkKICAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBqdXN0IGRvIGFuIGluZGlyZWN0IGp1
bXAuIEJ1dCB3ZSBzaG91bGQgdGVhY2ggdGhlIE1vZHVsZQogICAgICAgICAvLyBob3cgdG8gcmVw
YXRjaCB1czoKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NjU3MAotICAgICAgICBqaXQubG9hZFB0cihib3hlZENhbGxlZUxvYWRMb2NhdGlvbigp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSk7CiAgICAgICAgIGppdC5sb2FkUHRyKGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hHUFIsIFdhc21FbnRyeVB0clRhZyk7
CiAgICAgfQpAQCAtNTM4LDEwICs1MzYsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAg
ICByZXR1cm4gbV9qc0NhbGxFbnRyeXBvaW50LmNvZGUoKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5j
dGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpD
YWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94
ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
KQorV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3Nl
bWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3Is
IG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdl
YkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9p
bnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVh
cCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0Vu
dHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRl
eCk7CiAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgs
IG5hbWUsIGluc3RhbmNlKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aXNM
YXJnZUFsbG9jYXRpb24oKSwgIldlYkFzc2VtYmx5RnVuY3Rpb24gc2hvdWxkIGJlIGFsbG9jYXRl
ZCBub3QgaW4gbGFyZ2UgYWxsb2NhdGlvbiBzaW5jZSBpdCBpcyBKU0NhbGxlZS4iKTsKICAgICBy
ZXR1cm4gZnVuY3Rpb247CkBAIC01NTMsMTAgKzU1MSwxMCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6
Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoqIGJv
eGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCkKK1dlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6Q2Fs
bGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Okxv
YWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiAgICAgOiBCYXNlIHsgdm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlIH0KLSAgICAsIG1fanNFbnRyeXBvaW50IHsganNFbnRyeXBvaW50LmNvZGUoKSB9
Ci0gICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gfQorICAgICwg
bV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuZW50cnlwb2ludCgpIH0KKyAgICAsIG1faW1w
b3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uIH0KIHsgfQogCiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAppbmRleCBmNWFkY2Nj
YmI1N2JiZmU3MjY3OWJkNzFhMTRjZjVjNWY4ZTUzZWM0Li4zOTVhNWJkNzhiZDIzODc3ZmE2MTg5
ZTBiNTFhNDA1MWZiNTU2MDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCkBAIC02MiwxMiArNjIsMTEgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CiAgICAgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5lbnRyeXBvaW50TG9hZExv
Y2F0aW9uOyB9Ci0gICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uYm94ZWRDYWxsZWVMb2FkTG9jYXRpb247IH0KICAg
ICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uOyB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0VudHJ5cG9pbnQoQXJpdHlDaGVja01vZGUgYXJpdHkp
CkBAIC03OSw3ICs3OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2ltcG9ydGFibGVG
dW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uKCk7IH0KIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50KCkKICAgICB7CkBAIC05Myw3ICs5MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lk
KiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNt
OjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9h
ZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsK
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBv
aW50U2xvdygpOwogICAgIHB0cmRpZmZfdCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAKaW5kZXggN2FmMWEwNDUyYWUwZGY3ZWJkYzNjMjRkMDlmZmZiZTA3
YzEwZTBiNi4uOTJkZGNmNzg2ZTgxMDA1YTIxZTFmOGIxZjUwYTlkMjA5ZjllNjkyOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcApAQCAtMTkzLDcgKzE5Myw2IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2Jq
CiAKICAgICAgICAgICAgIFdhc206Okluc3RhbmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7
CiAgICAgICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24g
ZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICB2b2lkKiogYm94
ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBudWxscHRyOwogICAgICAgICAgICAgSlNPYmplY3QqIGZ1
bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOwogCiAgICAgICAgICAgICAvLyBpaS4g
SWYgdiBpcyBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0OgpAQCAtMjA2LDcgKzIw
NSw2IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAgICAgICAgICAgICAgICAgICAgIGltcG9y
dGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAg
ICAgICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gJndhc21GdW5jdGlvbi0+aW5zdGFuY2Uo
KS0+aW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludExvYWRMb2NhdGlv
biA9IHdhc21GdW5jdGlvbi0+ZW50cnlwb2ludExvYWRMb2NhdGlvbigpOwotICAgICAgICAgICAg
ICAgICAgICBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IHdhc21GdW5jdGlvbi0+Ym94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24oKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2ln
bmF0dXJlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUg
di5bW0Nsb3N1cmVdXS4KQEAgLTIyNSw3ICsyMjMsNiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9i
agogICAgICAgICAgICAgYXV0byogaW5mbyA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0
RnVuY3Rpb25JbmZvKGltcG9ydC5raW5kSW5kZXgpOwogICAgICAgICAgICAgaW5mby0+dGFyZ2V0
SW5zdGFuY2UgPSBjYWxsZWVJbnN0YW5jZTsKICAgICAgICAgICAgIGluZm8tPndhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uID0gZW50cnlwb2ludExvYWRMb2NhdGlvbjsKLSAgICAgICAgICAgIGlu
Zm8tPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gYm94ZWRDYWxsZWVMb2FkTG9jYXRpb247CiAg
ICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uPFdyaXRlQmFy
cmllcjxKU09iamVjdD4+KGltcG9ydC5raW5kSW5kZXgpLT5zZXQodm0sIG1faW5zdGFuY2UuZ2V0
KCksIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNTAsMTAg
KzM0Nyw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAgICAgICAgICAgICAvLyAgICAgYy4g
UmV0dXJuIGZ1bmMuCiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9j
ay0+ZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwot
ICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5i
b3hlZENhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAg
ICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNp
Z25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAgICBj
b25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlv
biogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCksIGZpZWxkLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAg
ICAgICAgd3JhcHBlciA9IGZ1bmN0aW9uOwogICAgICAgICB9CiAKQEAgLTQ2NCw4ICs0NjAsNyBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
V2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UpOwogICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5
cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRl
eFNwYWNlKTsKLSAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGNv
ZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0
YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAg
ICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAg
IH0KICAgICB9CkBAIC01ODAsMTQgKzU3NSwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgICAgIFdhc206OkNh
bGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAg
ICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgdm9pZCoq
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5ib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBj
b25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBl
eHBvcnQgbG9jYWwgZnVuY3Rpb24gImZvbyIgYXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAg
ICAgIC8vIFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8g
aW5kZXggMC4KICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5leHBvcnRz
LmZvbyA9PT0gdGFibGUuZ2V0KDApPwogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTgyNQogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoCi0gICAgICAgICAg
ICAgICAgdm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9u
U3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3Rh
bmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAg
ICAgICAgdm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9u
U3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3Rh
bmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIHNpZ25hdHVyZUluZGV4KTsKIAogICAgICAgICAgICAgbV9pbnN0YW5jZS0+dGFibGUodGFi
bGVJbmRleCktPnNldChlbGVtZW50SW5kZXgsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgICsrZWxl
bWVudEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCmluZGV4IDYyODYyYjQxMTc4NDY0ZTYx
M2UzZTc5MzA0MjY3MzMwNjUwZTgxMGEuLmNkZTRmM2NmMjYwNGFkZDc2Y2MwNGZiMjI0ZjlhNTJi
ZDJkYTAzNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKQEAgLTYwLDkgKzYwLDcgQEAgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+
aW5oZXJpdHM8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtKSwgIldlIHNob3VsZCBuZXZl
ciBkb3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAi
IjsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9u
KGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVu
Y3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBhdXRvIGltcG9ydEZ1bmN0
aW9uSW5mbyA9IGluc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRJ
bmRleCk7Ci0gICAgc3RhdGljIHZvaWQqIG51bGxCb3hlZENhbGxlZSA9IG51bGxwdHI7Ci0gICAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZpbXBvcnRGdW5jdGlvbklu
Zm8tPndhc21Ub0VtYmVkZGVyU3R1YiwgJm51bGxCb3hlZENhbGxlZSB9KTsKKyAgICBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgJmluc3RhbmNlLT5pbnN0YW5jZSgpLmlt
cG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRJbmRleCktPndhc21Ub0VtYmVkZGVyU3R1YiB9ICk7CiAg
ICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlv
biwgaW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1bHQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>