<?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>236875</bug_id>
          
          <creation_ts>2022-02-18 18:52:35 -0800</creation_ts>
          <short_desc>REGRESSION(r290188): Broke WebKitGTK &amp;amp; WPE build bots</short_desc>
          <delta_ts>2022-02-18 19:23:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>236868</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>mark.lam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1843752</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-02-18 18:52:35 -0800</bug_when>
    <thetext>https://commits.webkit.org/r290188 introduced a regression:
Broke WebKitGTK &amp;amp; WPE build bots

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>1843754</commentid>
    <comment_count>1</comment_count>
      <attachid>452614</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-02-18 18:53:04 -0800</bug_when>
    <thetext>Created attachment 452614
REVERT of r290188

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 revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert 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>1843755</commentid>
    <comment_count>2</comment_count>
      <attachid>452614</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 19:15:15 -0800</bug_when>
    <thetext>Comment on attachment 452614
REVERT of r290188

I&apos;m going to roll this out manually since cq is slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843757</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 19:22:13 -0800</bug_when>
    <thetext>Roll out landed in r290193: &lt;http://trac.webkit.org/r290193&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843758</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-18 19:23:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/89177391&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452614</attachid>
            <date>2022-02-18 18:53:04 -0800</date>
            <delta_ts>2022-02-18 19:15:15 -0800</delta_ts>
            <desc>REVERT of r290188</desc>
            <filename>bug-236875-20220218185304.patch</filename>
            <type>text/plain</type>
            <size>323865</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRjOTE0MDYzYjMxMzhl
ZTA2MTdlYzhmZmI5YTMxYzY4Y2E4OGM3YS4uNDhiNzVjNDU5MDNlN2I4MzZjMjVmNmNmZWRlMDg1
YTc5ZDFkMWNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIyLTAyLTE4ICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI5MDE4OC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNjg3NQorCisgICAgICAgIEJyb2tlIFdlYktpdEdUSyAmYW1wOyBXUEUg
YnVpbGQgYm90cworCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldDoKKworICAgICAgICAiUHJv
dmlkZSBhIFdlYkNvcmUgc3Vic3BhY2VJbXBsRm9yIHRlbXBsYXRlIHRvIG1ha2UgY29kZSBtb3Jl
CisgICAgICAgIHJlYWRhYmxlLiIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNjg2OAorICAgICAgICBodHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy9y
MjkwMTg4CisKIDIwMjItMDItMTggIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIE1vdmUgY29udGVudCBmaWx0ZXJpbmcgdG8gTmV0d29ya2luZyBwcm9jZXNz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZDE1ZDcwMDYzMTBjMTRlZmFlYTRmMWI1ZDgyNjZkMjhlYTE1MWY0ZS4uZjViNmM2NThm
NWNmZjMzMzM3Y2VjMWJiMTQ0NzY2NTU3NTVhODhkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjQyMCwxMSArMjQyMCwxMSBA
QAogCQk3QkI2ODBCQTI1QkExQkU0MDAyQjg3MzggLyogR3JhcGhpY3NDaGVja3NNYWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjY4MEI4MjVCQTFC
RTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRERBMzFGMjc0RkEwMjEwMDM4NjU5RSAvKiBH
cmFwaGljc0NvbnRleHRHTENvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QkREQTMxRDI3NEY5REE1MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdCRERBMzRDMjc1QTAxMzEwMDM4NjU5RSAvKiBQcm9jZXNzSWRlbnRpdHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzQ5Mjc1QTAxMzAw
MDM4NjU5RSAvKiBQcm9jZXNzSWRlbnRpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3QkUzN0Y4NzI3QkJCNzA4MDA3QTZDRDMgLyogVmlkZW9G
cmFtZUNWLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QkUzN0Y4NjI3QkJCNkZGMDA3QTZDRDMgLyogVmlkZW9GcmFtZUNWLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JFMzdGN0EyN0JCODZBQjAwN0E2
Q0QzIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkREQTMxQzI3NEY5REE0MDAzODY1OUUgLyogR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5tbSAqLzsgfTsKIAkJN0JFMzdGN0MyN0JCODZCODAwN0E2Q0QzIC8q
IEFOR0xFVXRpbGl0aWVzQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0JDRDQyREEyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVz
Q29jb2EuY3BwICovOyB9OwogCQk3QkUzN0Y3RDI3QkI4NkNEMDA3QTZDRDMgLyogQU5HTEVVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JDRDQyRDgyNzA1OTlFRjAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJ
N0JFMzdGN0UyN0JCODZEQjAwN0E2Q0QzIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjEwMzM5QTI1
NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCAqLzsgfTsKLQkJ
N0JFMzdGODcyN0JCQjcwODAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JFMzdGODYyN0JCQjZGRjAwN0E2Q0Qz
IC8qIFZpZGVvRnJhbWVDVi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCRTc0MjczODFGQTkwNkZCQjRGMEYyQyAvKiBKU1NWR0dyYXBoaWNzRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUw
QzRDMDJCRUQ4OTM2RjgxOEUyRjk5IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggKi87IH07CiAJ
CTdCRkY1OUY0Mjc1NzcyNjcwMDc3M0QzOSAvKiBEaXNwbGF5Q29uZmlndXJhdGlvbk1vbml0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRkY1OUVG
Mjc1NzcxRTgwMDc3M0QzOSAvKiBEaXNwbGF5Q29uZmlndXJhdGlvbk1vbml0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAyOUM2RTI0OTND
OEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTc0
NCw4ICs1NzQ0LDYgQEAKIAkJRkRGMDlEQzkxMzk5QjYyMjAwNjg4RTVCIC8qIEpTQmlxdWFkRmls
dGVyTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRGMDlEQzcxMzk5QjYyMjAwNjg4RTVCIC8qIEpTQmlxdWFkRmlsdGVyTm9kZS5oICovOyB9Owog
CQlGREY2QkFGOTEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjZC
QUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICov
OyB9OwogCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY3RTlD
MjEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggKi87IH07Ci0JCUZF
MEJDRjM0MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwQkNGMzEyN0MwNjYw
RjAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmggKi87IH07Ci0JCUZFMEJDRjM1
MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwQkNGMzMyN0MwNjYx
MDAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmggKi87IH07CiAJCUZF
MEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdl
YkV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQxMTE2Qzc4MjY0
MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLzsgfTsKIAkJRkUzNkZEMTcxNkM3ODI2
NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQxMzE2Qzc4MjY0MDBGODg3QzEg
LyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCAqLzsgfTsKQEAgLTE4MjkzLDggKzE4Mjkx
LDYgQEAKIAkJRkRGNkJBRjcxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZERjdF
OUMxMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRGN0U5QzIxM0FDMjFEQjAwQTUxRUFDIC8q
IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkUwQkNGMzEyN0MwNjYwRjAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAv
KiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTBEODRFODEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDg0RUExMDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXZlbnQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzZGRDExMTZDNzgyNjQwMEY4ODdDMSAvKiBD
aGFuZ2VWZXJzaW9uRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFu
Z2VWZXJzaW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkzNDAsOCAr
MjkzMzYsNiBAQAogCQkJCUJDNTNEQTQ3MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29y
bGQuY3BwICovLAogCQkJCUJDNTNEQTJEMTE0MzEyMUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29y
bGQuaCAqLywKIAkJCQkyRDI5Mzg2OTIzNUY2QjY4MDBDN0YzQjIgLyogRXhjZXB0aW9uRGV0YWls
cy5oICovLAotCQkJCUZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oICovLAotCQkJCUZFMEJDRjMxMjdDMDY2MEYwMEJGQjJEQiAvKiBFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oICovLAogCQkJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAv
KiBHQ0NvbnRyb2xsZXIuY3BwICovLAogCQkJCTE0MzJFODQ2MEM1MTQ5MzgwMEIxNTAwRiAvKiBH
Q0NvbnRyb2xsZXIuaCAqLywKIAkJCQlDNTg1QTY2MDExRDRGQUM1MDA0QzNFNEIgLyogSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAgKi8sCkBAIC0zNTE4OCw3ICszNTE4Miw2IEBACiAJCQkJNzE0QzdD
NkQxRkRBREFGNjAwRjJCRUUxIC8qIEpTQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcxMDI1RURFMUY5OUYxRUMwMDRBMjUwQyAvKiBKU0FuaW1hdGlvblRp
bWVsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTk1NkYxQzIzMzFBNjc3MDA1N0U5RDIgLyog
SlNBcHBsZVBheUNhbmNlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTBCQ0YzNTI3QzA2
NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExREY1QTk5MUY3RUM4QzAwMDU4QTQ3NyAvKiBKU0FwcGxlUGF5Q29udGFjdEZp
ZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NTk2QjkzODI1REVFRjAzMDBFRDJDRkEgLyogSlNB
cHBsZVBheUNvdXBvbkNvZGVDaGFuZ2VkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1RUFE
NTgzMjY2RUY1M0IwMDRCOUNGMSAvKiBKU0FwcGxlUGF5Q291cG9uQ29kZURldGFpbHMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzcxMTEsNyArMzcxMDQsNiBAQAogCQkJCTA3OEUwOTQ0MTdEMTZFMUMw
MDQyMEFBMSAvKiBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTM1OTEwQjFFN0REQzczMDBGMzA2MzAgLyogUlRDU2lnbmFsaW5nU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA3OEUwOTJBMTdEMTREMUMwMDQyMEFBMSAvKiBSVENTdGF0c1JlcG9y
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUwQkNGMzQyN0MwNjYxMDAwQkZCMkRCIC8qIEV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RTJDNDM2ODFCQ0VFMzc3
MDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5NDcx
N0QxNkUxQzAwNDIwQUExIC8qIFJUQ1ZvaWRSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
ODI0QUJBMzFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxODA4NjYz
MmM3MTZiMzc0MTk3NmI4NjMxYzRlNDkwM2YyZjJmNjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzIDogcHVibGljIERP
TUNsaWVudElzb1N1YnNwYWNlcyB7Ci1wdWJsaWM6Ci0gICAgRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMoKSA9IGRlZmF1bHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPiBtX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0OTRmZWU5ZWUzOTNmYzQyZDQ3N2YxYTRmYTFiM2VmNTNk
NzVjMDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
IDogcHVibGljIERPTUlzb1N1YnNwYWNlcyB7Ci1wdWJsaWM6Ci0gICAgRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMoKSA9IGRlZmF1bHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3Bh
Y2U+IG1fc3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5j
cHAKaW5kZXggYTNkMDkwOTEwOTk3NGMwYzcwMjM4ZTJhNjdkNmE5NjM4NTRkZDcwYS4uOGMzZjMz
OTMzM2UwNDgwM2YzZTVkNjIzM2Y1MDI0NTdiMWMwZjYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yLmNwcApAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmgiCiAKLSNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KQEAgLTUyLDEyICs1MCwzNiBAQCBjb25zdCBK
U0M6OkNsYXNzSW5mbyBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclByb3RvdHlw
ZTo6c19pbmZvID0geyAiRAogR0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0ZpbGVTeXN0ZW1EaXJl
Y3RvcnlIYW5kbGVJdGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKIHsKICAgICBKU0xv
Y2tIb2xkZXIgYXBpTG9ja2VyKHZtKTsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuZ2V0KCk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5nZXQoKTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0KLSAg
ICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRh
LmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkpCisgICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IGhlYXBEYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlKCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpT
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxl
SXRlcmF0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKTsKKyAgICAgICAgaGVhcERhdGEuc2V0Rmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSkpOworCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VO
RAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGF1dG8qIGNsaWVudFNwYWNlID0g
bmV3IEdDQ2xpZW50OjpJc29TdWJzcGFjZSgqc3BhY2UpOworICAgIGNsaWVudERhdGEuc2V0Rmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oY2xpZW50U3BhY2UpKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2U7
CiB9CiAKIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yX29uUHJvbWlzZVNldHRsZWRCb2R5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3IqIGNhc3RlZFRoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVKU0NsaWVudERhdGEuY3BwCmluZGV4IGFmOGI5MDI2YjNlNGFlM2I2MGJkODRlZjdiOTJmZGQw
NDZlODg2YzIuLmFhZmEyOGE5N2IwYmYxMzY0NTQzYTEwZDQyMTFiZGZlYjEwOWNmMmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
CkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIgogCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTQXVkaW9Xb3JrbGV0
R2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaCIKQEAgLTkwLDcgKzkwLDcgQEAgSlNIZWFwRGF0YTo6
SlNIZWFwRGF0YShIZWFwJiBoZWFwKQogICAgICwgbV9ydW50aW1lT2JqZWN0U3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgbV9ydW50aW1lT2JqZWN0SGVhcENlbGxUeXBlLCBKU0M6OkJpbmRp
bmdzOjpSdW50aW1lT2JqZWN0KQogICAgICwgbV93aW5kb3dQcm94eVNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5cGUsIEpTV2luZG93UHJveHkpCiAg
ICAgLCBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX2hl
YXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCwgSlNJREJTZXJpYWxp
emF0aW9uR2xvYmFsT2JqZWN0KQotICAgICwgbV9zdWJzcGFjZXMobWFrZVVuaXF1ZTxFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcz4oKSkKKyAgICAsIG1fc3Vic3BhY2VzKG1ha2VVbmlxdWU8RE9NSXNv
U3Vic3BhY2VzPigpKQogewogfQogCkBAIC0xMjIsNyArMTIyLDcgQEAgSlNWTUNsaWVudERhdGE6
OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVCht
X3J1bnRpbWVPYmplY3RTcGFjZSkKICAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3dp
bmRvd1Byb3h5U3BhY2UpCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9pZGJTZXJp
YWxpemF0aW9uU3BhY2UpCi0gICAgLCBtX2NsaWVudFN1YnNwYWNlcyhtYWtlVW5pcXVlPEV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzPigpKQorICAgICwgbV9jbGllbnRTdWJzcGFjZXMobWFr
ZVVuaXF1ZTxET01DbGllbnRJc29TdWJzcGFjZXM+KCkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAppbmRleCAxZmE1MzUxYzU1
MmY5YTk2NThhMDUzN2ZiYTI4ZGY4NGY3YzM4ZmJjLi45ZmY2YTU1ODRiZTMxMDFjMjYxODUyNTE0
NWZkZDQ5YWUyMjA5OTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oCkBAIC0zMSw4ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXM7Ci1jbGFzcyBFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlczsKK2NsYXNzIERPTUNsaWVudElzb1N1YnNwYWNlczsKK2NsYXNzIERP
TUlzb1N1YnNwYWNlczsKIAogY2xhc3MgSlNIZWFwRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSlNIZWFwRGF0YSk7CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
SlNIZWFwRGF0YSogZW5zdXJlSGVhcERhdGEoSlNDOjpIZWFwJik7CiAKICAgICBMb2NrJiBsb2Nr
KCkgeyByZXR1cm4gbV9sb2NrOyB9Ci0gICAgRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMmIHN1YnNw
YWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNlcy5nZXQoKTsgfQorICAgIERPTUlzb1N1YnNwYWNl
cyYgc3Vic3BhY2VzKCkgeyByZXR1cm4gKm1fc3Vic3BhY2VzLmdldCgpOyB9CiAKICAgICBWZWN0
b3I8SlNDOjpJc29TdWJzcGFjZSo+JiBvdXRwdXRDb25zdHJhaW50U3BhY2VzKCkgeyByZXR1cm4g
bV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOyB9CiAKQEAgLTU1LDYgKzU1LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgZnVuYygqc3BhY2UpOwogICAgIH0KIAorICAgIEpTQzo6SXNvU3Vic3BhY2Uq
IGZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkgeyByZXR1cm4gbV9maWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEpT
Qzo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQorCiBwcml2YXRlOgog
ICAgIExvY2sgbV9sb2NrOwogCkBAIC05MCw4ICs5Myw5IEBAIHByaXZhdGU6CiAgICAgSlNDOjpJ
c29TdWJzcGFjZSBtX3J1bnRpbWVPYmplY3RTcGFjZTsKICAgICBKU0M6Oklzb1N1YnNwYWNlIG1f
d2luZG93UHJveHlTcGFjZTsKICAgICBKU0M6Oklzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlv
blNwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6Oklzb1N1YnNwYWNlPiBtX2ZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzPiBtX3N1YnNwYWNlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RE9NSXNvU3Vic3BhY2VzPiBtX3N1YnNwYWNlczsKICAgICBWZWN0b3I8SlNDOjpJc29TdWJzcGFj
ZSo+IG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsKIH07CiAKQEAgLTEzNyw4ICsxNDEsMTAgQEAg
cHVibGljOgogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBydW50aW1lT2JqZWN0U3Bh
Y2UoKSB7IHJldHVybiBtX3J1bnRpbWVPYmplY3RTcGFjZTsgfQogICAgIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiB3aW5kb3dQcm94eVNwYWNlKCkgeyByZXR1cm4gbV93aW5kb3dQcm94eVNw
YWNlOyB9CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGlkYlNlcmlhbGl6YXRpb25T
cGFjZSgpIHsgcmV0dXJuIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOyB9CisgICAgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIGZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNl
KCkgeyByZXR1cm4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZS5nZXQo
KTsgfQorICAgIHZvaWQgc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uo
c3RkOjp1bmlxdWVfcHRyPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2Zp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFj
ZSwgbnVsbHB0cik7IH0KIAotICAgIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBjbGll
bnRTdWJzcGFjZXMoKSB7IHJldHVybiAqbV9jbGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KKyAgICBE
T01DbGllbnRJc29TdWJzcGFjZXMmIGNsaWVudFN1YnNwYWNlcygpIHsgcmV0dXJuICptX2NsaWVu
dFN1YnNwYWNlcy5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8RE9NV3JhcHBlcldv
cmxkKj4gbV93b3JsZFNldDsKQEAgLTE1OCw1NCArMTY0LDggQEAgcHJpdmF0ZToKICAgICBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CiAgICAgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXM+IG1fY2xpZW50U3Vic3BhY2Vz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4gbV9maWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2NsaWVudFN1YnNwYWNlczsKIH07CiAKLQotZW51bSBj
bGFzcyBVc2VDdXN0b21IZWFwQ2VsbFR5cGUgeyBZZXMsIE5vIH07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZSB1c2VDdXN0b21IZWFwQ2VsbFR5cGUsIHR5cGVu
YW1lIEdldENsaWVudCwgdHlwZW5hbWUgU2V0Q2xpZW50LCB0eXBlbmFtZSBHZXRTZXJ2ZXIsIHR5
cGVuYW1lIFNldFNlcnZlcj4KLUFMV0FZU19JTkxJTkUgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSwgR2V0Q2xpZW50IGdldENsaWVudCwgU2V0
Q2xpZW50IHNldENsaWVudCwgR2V0U2VydmVyIGdldFNlcnZlciwgU2V0U2VydmVyIHNldFNlcnZl
ciwgSlNDOjpIZWFwQ2VsbFR5cGUmICgqZ2V0Q3VzdG9tSGVhcENlbGxUeXBlKShKU0hlYXBEYXRh
JikgPSBudWxscHRyKQotewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTdWJzcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGdldENsaWVudChjbGllbnRTdWJzcGFjZXMpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzdWJzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlKiBzcGFjZSA9IGdl
dFNlcnZlcihzdWJzcGFjZXMpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSlNDOjpIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3Bh
Y2U+IHVuaXF1ZVN1YnNwYWNlOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHVzZUN1c3RvbUhlYXBD
ZWxsVHlwZSA9PSBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6OlllcyB8fCBzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUPiB8fCAhVDo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAodXNlQ3VzdG9tSGVhcENlbGxUeXBlID09IFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6WWVzKQotICAgICAgICAgICAgdW5pcXVlU3Vic3BhY2UgPSBtYWtlVW5p
cXVlPEpTQzo6SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGdldEN1c3RvbUhl
YXBDZWxsVHlwZShoZWFwRGF0YSksIFQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
VD4pCi0gICAgICAgICAgICAgICAgdW5pcXVlU3Vic3BhY2UgPSBtYWtlVW5pcXVlPEpTQzo6SXNv
U3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBUKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1bmlx
dWVTdWJzcGFjZSA9IG1ha2VVbmlxdWU8SlNDOjpJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUKTsKLSAgICAgICAgfQotICAgICAgICBz
cGFjZSA9IHVuaXF1ZVN1YnNwYWNlLmdldCgpOwotICAgICAgICBzZXRTZXJ2ZXIoc3Vic3BhY2Vz
LCB1bmlxdWVTdWJzcGFjZSk7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IFQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBhdXRvIHVuaXF1ZUNsaWVudFN1YnNwYWNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICBhdXRvKiBjbGllbnRTcGFjZSA9IHVuaXF1ZUNs
aWVudFN1YnNwYWNlLmdldCgpOwotICAgIHNldENsaWVudChjbGllbnRTdWJzcGFjZXMsIHVuaXF1
ZUNsaWVudFN1YnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMDIzYzA4YjU0Y2U5MjhmNWU1NmQ0ZmJiMzRlZTQyNzQz
MjlhNmZmYy4uN2UwMDQxY2UzMmEyZTczYjE1YTJlMmUzYmI5M2Q5ZTI0ZjNkZWIwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
QEAgLTQ4NzEsMzIgKzQ4NzEsNTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAK
ICAgICBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNl
LT5pdGVyYWJsZTsKIAotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIik7Ci0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0
b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1
YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpO1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpKVxuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTtcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTtcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
JHtpbnRlcmZhY2VOYW1lfS5nZXQoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghc3BhY2UpIHtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDtcbiIpOwogCi0gICAgbXkgJHVzZUN1c3RvbUhlYXBDZWxsOwotICAg
IG15ICRjdXN0b21IZWFwQ2VsbFR5cGVHZXR0ZXI7CiAgICAgaWYgKElzRE9NR2xvYmFsT2JqZWN0
KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgICR1c2VDdXN0b21IZWFwQ2VsbCA9ICJZZXMiOwotICAg
ICAgICAkY3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyID0gIltdIChhdXRvJiBzZXJ2ZXIpIC0+IEpT
Qzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNz
TmFtZX07IH0iOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2Vs
bFR5cGVGb3Ike2NsYXNzTmFtZX0sICR7Y2xhc3NOYW1lfSk7XG4iKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICAkdXNlQ3VzdG9tSGVhcENlbGwgPSAiTm8iOwotICAgICAgICAkY3VzdG9tSGVhcENl
bGxUeXBlR2V0dGVyID0gIm51bGxwdHIiOwotICAgIH0KLQotICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8JHtjbGFzc05hbWV9LCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6OiR1c2VDdXN0b21IZWFwQ2VsbD4odm0sXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpOyB9LFxuIik7Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBXVEZNb3ZlKHNwYWNlKTsg
fSxcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7IH0s
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IFdU
Rk1vdmUoc3BhY2UpOyB9LFxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICRj
dXN0b21IZWFwQ2VsbFR5cGVHZXR0ZXJcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFzc05h
bWV9PiB8fCAhJHtjbGFzc05hbWV9OjpuZWVkc0Rlc3RydWN0aW9uKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+KVxuIik7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsICR7Y2xhc3NOYW1lfSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGVsc2VcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgJHtjbGFzc05hbWV9KTtcbiIpOworICAgIH0KKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxlLWNvZGVcIilcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dp
Y2FsLWNvbXBhcmVcIilcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dClcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
fVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworCisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5h
bWV9ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTtcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikgewpAQCAt
Njc4NCwxMiArNjgwMiwzNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8JHtpdGVyYXRv
ck5hbWV9LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRv
ck5hbWV9LmdldCgpOyB9LAotICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gV1RGTW92
ZShzcGFjZSk7IH0sCi0gICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsgfSwKLSAgICAgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRl
cmF0b3JOYW1lfSA9IFdURk1vdmUoc3BhY2UpOyB9Ci0gICAgICAgICk7CisgICAgICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKKyAgICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7CisKKyAgICAgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAg
ICAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICAgICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7
CisgICAgICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+IHx8ICEke2l0ZXJhdG9yTmFtZX06Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+KQorICAgICAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAke2l0ZXJhdG9yTmFtZX0pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgJHtpdGVyYXRv
ck5hbWV9KTsKKyAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
QkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZVwiKQorICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7aXRlcmF0b3JOYW1l
fTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgICAgICB9CisK
KyAgICAgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0g
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0u
Z2V0KCk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCmluZGV4IDEzNWY2NTE2MTI1ZTRlZWIxZDY4
YWM4N2M5ZmE2ZTZkYjI5YTk4NDMuLmJmMDkzMmI2YTFhMjY3YTVkNTQzYzAxMmE5ZjY2MmI5NzQz
N2ZlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTRE9NV2luZG93LmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTRE9N
V2luZG93LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgpAQCAtMzY2LDEzICszNjYsMzIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpz
RE9NV2luZG93X1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvciwgKEpTR2wKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRE9NV2luZG93OjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0RPTVdpbmRvdywg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsgfSwK
LSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yRE9NV2luZG93ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93LmdldCgp
OyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JET01XaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1
dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBD
ZWxsVHlwZUZvckpTRE9NV2luZG93OyB9Ci0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRv
dy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Cisg
ICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdywgSlNET01XaW5kb3cpOworICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvckRPTVdpbmRvdyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
K0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNET01XaW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdyA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOwogfQogCiB2b2lk
IEpTRE9NV2luZG93OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5k
ZXggMGFiM2MxYjZkNzY4OWU1OGFkYTVhNTEwMTIyMmQ0NzNhMjgyYTEyYi4uMWQ0MmY2ZTdjYTI4
NzY5MGRlODg1MWZkNTlmNjI1ZjY2OTBjMDc5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpTRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgiCi0jaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTE2NywxMyArMTY3LDMyIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihq
c0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlX0V4cG9zZWRTdGFyQ29uc3RydWN0b3IsIChKCiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Olllcz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCi0gICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIp
IC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOyB9Ci0gICAgKTsKKyAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOworICAgIGlmICghc3Bh
Y2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxU
eXBlRm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSwgSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisg
ICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5nZXQoKTsKIH0KIAogdm9pZCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2Vk
U3Rhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBv
c2VkU3Rhci5jcHAKaW5kZXggNTc3NDg5NzYzNDcyYzVjNGU1YzAxYjRkOGVmOTVhMWQyYTkyMWM5
Ni4uOWU1MWM4ZjI4YjYwYWQ5NmQ2OThlNTE3Yjg4YTM3MmMyMzcxMjM1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRT
dGFyLmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTRXhwb3NlZFN0YXIuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMzEsMTMg
KzIzMSwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNFeHBvc2VkU3RhclByb3RvdHlw
ZUZ1bmN0aW9uX29wZXJhdGlvbkp1c3RGb3JXb3JrZXJDbwogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNFeHBvc2VkU3Rhcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNFeHBvc2VkU3RhciwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4
cG9zZWRTdGFyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7IH0sCi0gICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
ckV4cG9zZWRTdGFyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICAp
OworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwor
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRTdGFyPiB8fCAh
SlNFeHBvc2VkU3Rhcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rh
cj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkU3Rh
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkU3Rh
cik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRXhwb3NlZFN0YXI6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJO
SU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4
cG9zZWRTdGFyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkU3Rh
ci5nZXQoKTsKIH0KIAogdm9pZCBKU0V4cG9zZWRTdGFyOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93LmNwcAppbmRleCA2Y2MwMWI5NTUzYzcwNzY2ODZlNjhhMWRhNjVlYzNiZTI3ZmY2
NWQ1Li40NjNlZTNkYjI5ZDY3ZTUwNmQ4ZTE3N2M2NzQ5NjUwMDI0ZTEyYzkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3Jr
ZXJBbmRXaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTI0OSwxMyArMjQ5LDM2IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZUZ1bmN0
aW9uX2RvU29tZXRoaW5nCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGw8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3csIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5nZXQo
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gV1RGTW92ZShzcGFj
ZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNw
YWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAg
ICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Lmdl
dCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+IHx8ICFKU0V4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvdzo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3Jr
ZXJBbmRXaW5kb3c+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7CisgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JF
X1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7CiB9CiAKIHZvaWQgSlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcApp
bmRleCBhMTcxZGRjZWMxOTQxMmEzYjBiOWE2YjhlYjU3ODY3YzQzMjYwZjQ1Li4zYjRkMjk5OTZh
YzhjYmE3MDdkZDRhYzJkZThlNGNkNGI5NTIyNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGUuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNQYWludFdv
cmtsZXRHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUuaCIKQEAgLTE2NiwxMyArMTY2LDMyIEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc1BhaW50V29ya2xldEdsb2JhbFNjb3BlX1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
Q29uc3RyCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Olllcz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCi0gICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3Bl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6
SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlOyB9Ci0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xldEds
b2JhbFNjb3BlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50
V29ya2xldEdsb2JhbFNjb3BlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZSwgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSk7CisgICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9S
RV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKIH0KIAogdm9pZCBKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcApp
bmRleCBjYjFiNGY5MDYzNzMwM2Q3ZDIxMjA5NDA4ZWI5OWIyOGUyMjBhY2FmLi4xMGRjNDFjNmQ5
ODBiZTNkZDZkZjcwNWM0OWY2NmVmMWJlZmM4NDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE2NiwxMyArMTY2LDMyIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZV9TZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGVDb25zCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGw8SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBD
ZWxsVHlwZTo6WWVzPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0s
Ci0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9
LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckds
b2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIp
IC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JK
U1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsgfQotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
KworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsK
KyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9y
SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUsIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKTsK
KyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FS
TklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsK
IH0KIAogdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUds
b2JhbFNjb3BlLmNwcAppbmRleCBhNTNiZTczNDMyZmYwN2YyZDhiOWFiMGJlZTcwNDU3NzI0OTFi
MWExLi5lYTMyYWE0NjNhYTYwMjZlYWU0ZjMyYzYzZTY2NzNkMjQ2OTExNGMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUds
b2JhbFNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE1MiwxMyArMTUyLDMyIEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1NoYWRvd1JlYWxtR2xvYmFsU2NvcGVfU2hhZG93UmVhbG1H
bG9iYWxTY29wZUNvbnN0cnVjCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1NoYWRv
d1JlYWxtR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZSwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpZZXM+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUuZ2V0KCk7
IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2Jh
bFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+
IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1No
YWRvd1JlYWxtR2xvYmFsU2NvcGU7IH0KLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVh
bG1HbG9iYWxTY29wZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JT
aGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTaGFkb3dS
ZWFsbUdsb2JhbFNjb3BlLCBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUpOworICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JF
X1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKTsKIH0KIAogdm9pZCBKU1NoYWRvd1Jl
YWxtR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAppbmRleCAy
ZmM2MTZlZDQ0ZThiMjUxNmQwNGM5YjgzMmJiMmExY2Q2YjA2NDE5Li5kODYwZTNiNmE2MmY3Yzk5
OTk0NDA4YzYxMmI5NjFiNzUyZDJjNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNTaGFyZWRXb3JrZXJH
bG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTE1MCwxMyArMTUwLDMyIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
Uihqc1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlX1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3Ry
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3Bl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olll
cz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RG
TW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENl
bGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckds
b2JhbFNjb3BlOyB9Ci0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNj
b3BlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
KyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7CisgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJHbG9i
YWxTY29wZSwgSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSk7CisgICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJO
SU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNo
YXJlZFdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKIH0KIAogdm9pZCBKU1NoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAppbmRleCBkMDg3Yjk0MjRkYjQ1MmM5YzE3
MDJhNThkOGZkMTJmM2RjMjM3MzJiLi41NGFiNjgxZjdiNTE4NzQxMjhkOWFiYzhmMDI2MTJkZTRi
ZTQzYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKQEAgLTIzLDkgKzIzLDkgQEAKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRWxlbWVudElubGluZXMuaCIKLSNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSURM
VHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtNDMzLDEzICs0MzMsMzYg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVu
Y3Rpb25fbWV0aG9kV2l0aENFUmVhY3Rpb24KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RDRVJlYWN0aW9ucywgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOyB9LAotICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0Q0VSZWFjdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0
KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAg
ICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0KCk7
CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4gfHwgIUpTVGVzdENFUmVhY3Rpb25zOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4pCisgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENFUmVhY3Rpb25zKTsKKyAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1Nf
RU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VS
ZWFjdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0
aW9ucy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RDRVJlYWN0aW9uczo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCmluZGV4IGUwMWRiZDg2ODI2Nzk1N2M4MTRmNzFjODUy
OGE3MTIyMjk0N2JjOWYuLjlmMjA0MmQ3N2MwNGRjODllOGIzNzJmZDVjMWZhZmJjYzNkZjQ0M2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKQEAgLTIz
LDggKzIzLDggQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI1
OSwxMyArMjU5LDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25fdG9TdHJpbmcsCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKTsKKyAgICBpZiAoIXNw
YWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXI+IHx8ICFKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
K0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dB
Uk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAppbmRleCA4NWQwZTU0ZjNm
ZDAxODhkNWE0NTVkODI2YWExYzc2ZWZhYWNiYTcwLi5iNDU0MDNmOTM3NWI5ZGJiZWE4ZWEyNTQ4
NzMxZmZlZjIxYzA2NTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCkBAIC0yMiw4ICsyMiw4
IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbFRyYWNlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklE
TFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKQEAgLTUwOCwxMyArNTA4LDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25fdGVzdE9wZXJhdGlvbldpdGhEZWZhCiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDYWxsVHJhY2VyOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RD
YWxsVHJhY2VyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRy
YWNlci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Q2FsbFRyYWNlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Q2FsbFRyYWNlci5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENhbGxUcmFjZXI+IHx8ICFKU1Rlc3RDYWxs
VHJhY2VyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDYWxsVHJhY2VyPikK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDYWxsVHJhY2Vy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RDYWxsVHJh
Y2VyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q2FsbFRyYWNlcjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdO
T1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdENhbGxUcmFjZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RDYWxsVHJhY2VyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdENhbGxUcmFjZXI6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4IGQ2
MWM5NmU0MmI0OTllYjEwNjUwYmVlZmQ1M2Q0ZjU0OWZkZDljNmMuLjgzYjMzZjRhZDFlNzhlMTk5
MDUxMjkxZmE1ZmU4YmEzZmZiNjA3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0xNzEsMTMgKzE3MSwz
NiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3RvciwgKEpTR2xvYgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7IH0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9LAot
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51
bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yPiB8fCAhSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6
Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOwor
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisK
KyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5j
cHAKaW5kZXggNWRkMjJjMDYwOTIzMmY4YTQzMmQ2YzViMTg4MTY3NWM0ZWVkYmQyNy4uMTFlYThm
NjM2ZmZiMDkyOWJhYjkxMGYwNWNkYjkxYjRhMTJkYjI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzLmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC03ODQsMTMgKzc4NCwzNiBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oanNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uX3Bh
cnRpYWxNaXhpbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGw8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcywgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzID0gV1RGTW92ZShzcGFjZSk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1
ZGVzID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCk7CisgICAgaWYg
KCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzPiB8fCAhSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4pCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
K0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9
CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbElu
Y2x1ZGVzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
KyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0
aW9uYWxseVJlYWRXcml0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5jcHAKaW5kZXggMzE1YzgwNGJiYzdk
Y2FjMmI5NmQwZTdlZjM1Y2MzZjczNmNkOTAzMC4uMDU1NDhmNjFjZjg3Yjc5NjY4ZTU4YWZhMDdh
ZGYyZjFlNDUzNTU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdy
aXRlLmNwcApAQCAtMjIsMTAgKzIyLDEwIEBACiAjaW5jbHVkZSAiSlNUZXN0Q29uZGl0aW9uYWxs
eVJlYWRXcml0ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgpAQCAtNjA2LDEzICs2MDYsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fU0VUVEVSKHNl
dEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGVfc2V0dGluZ3NDb25kaXRpb25hbGx5UmUKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOyB9LAotICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RD
b25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJl
YWRXcml0ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpKQorICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgp
OworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZT4gfHwgIUpTVGVzdENvbmRpdGlvbmFs
bHlSZWFkV3JpdGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlv
bmFsbHlSZWFkV3JpdGU+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOworICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
RU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7CiB9
CiAKIHZvaWQgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAppbmRleCAwNTFl
YmEwMjg5NTE2ZGM2NTE0M2U5MjZjZWFiYTI0NTU3MjQzZWJhLi5hOGYxNWMzYzgwYzk3NGZiZTBh
NmJiODFmMjMzMGVmNjY1ODAzMGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcApAQCAtMjIsMTIgKzIyLDEy
IEBACiAjaW5jbHVkZSAiSlNUZXN0RE9NSklULmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01KSVRBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmgi
CiAjaW5jbHVkZSAiRE9NSklUSURMQ29udmVydC5oIgogI2luY2x1ZGUgIkRPTUpJVElETFR5cGUu
aCIKICNpbmNsdWRlICJET01KSVRJRExUeXBlRmlsdGVyLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTEy
NDcsMTMgKzEyNDcsMzYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKGpzVGVzdERPTUpJVFBy
b3RvdHlwZUZ1bmN0aW9uX2dldEVsZW1lbnRzQnlOYW1lV2l0aG91dFQKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdERPTUpJVDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RE9NSklULCBVc2VDdXN0b21I
ZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOyB9LAotICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RE9NSklUID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsgfSwKLSAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERPTUpJVCA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAg
KTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwor
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERPTUpJVD4gfHwgIUpT
VGVzdERPTUpJVDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RE9NSklUPikK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RET01KSVQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERPTUpJVCk7Cisg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVCA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0RE9NSklUOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5E
CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklU
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOwog
fQogCiB2b2lkIEpTVGVzdERPTUpJVDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCmluZGV4IDM3NGM5
YTU4MWY2YTY1ZTJmYTg0ZGRmNTdiMTQwMDg2YWE1Y2ZmNTYuLjg5Mjc1MDQwZmVkMzk5ZTk5MTQ5
MjA0ODZkODg3NjljZGIxYWMxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAKQEAg
LTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTgwMywxMyArODAzLDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVuY3Rpb25fdG9KU09OLCAoSlNHbG9i
YWxPCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3REZWZhdWx0VG9KU09OLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pT
T04gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT04gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgot
ICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsKKyAgICBp
ZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT04+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OOjpuZWVkc0Rlc3RydWN0
aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPikKKyAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsKKyAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dB
Uk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT04gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3REZWZhdWx0VG9KU09OLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAKaW5k
ZXggZDM3YmY3ODkzMTEyZDQ0Njc4Njc3YzdhMGNiNjYxMDE5NzFmZTkzOS4uZWI5OTk3ZmViNDUy
NjcxYzNjZTU5YjllYzk3MTU5YmJiZjJmYTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhw
b3NlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNjUs
MTMgKzI2NSwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkUHJvdG90eXBlRnVuY3Rpb25fdAogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCk7IH0s
Ci0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpOyB9LAot
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gV1RGTW92ZShzcGFjZSk7
IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpOworICAgIGlm
ICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RE
ZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVm
YXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9S
RV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0
KCk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcApp
bmRleCBiNjY2MmNkNWFmZWU1NjBjNDkxNDk4YWQxODc2OWM0NDk1NWU3NWNhLi5mYTk4NDFiMTc3
NGJjMmY4Nzk5YTQ0Njk4MDI5N2E0Yzg1MmMxMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKQEAgLTIyLDggKzIy
LDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgpAQCAtMTU3LDEzICsxNTcsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpz
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IsIChKU0cKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsK
KyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZT4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1Nf
RU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKIH0K
IAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAKaW5kZXggN2ZlZjU1ODVkOWZmZjZlZjE3YzhhYTc4
MTgxMTZkMjY3OWJiZWNmMy4uYjg3ZjMwYTIzMzRmNzk4NDEwZjIzMzFiMjI4YTljODRmZjczYWI3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yODcs
MTMgKzI4NywzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRQcm90b3R5cGVGdW5jdGlvbl90b0pTT04sIChKUwogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdCA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQo
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gV1RGTW92ZShzcGFjZSk7IH0s
Ci0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
PiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PikKKyAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9S
RV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmdl
dCgpOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAKaW5kZXggNDhiNmU0MmNiZWIwODBiMWJm
OWIyM2E1MTMzODdkZjc3NjE2YjYxZi4uN2QyNTY0ZjE5ZjdkMjUwZWQwODAxOGIwMjgwNmVkYTAx
YmQ4MDg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsLmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCkBAIC0zMjcsMTMgKzMyNywzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uX3RvSlNP
TgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCwgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0
KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gV1RGTW92
ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7IH0sCi0gICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAg
ICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6bmVlZHNEZXN0
cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4pCisg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lH
Tk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsKIH0K
IAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRo
ZXRpY0F0dHJpYnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5jcHAKaW5kZXggZWNk
ZGEwYmU3NmJkNTE3NTFhZmEyNGEzODg4OTYyYzE2MjFkMDdlMy4uYjI2NzI1OWRjZDZkYTMzMmFj
ODliNGIxNmRkZGE5ZmQyNjFhMzgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmNwcApAQCAtMjMsOCArMjMsOCBA
QAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWUuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjQxLDEzICsyNDEs
MzYgQEAgSlNDX0RFRklORV9DVVNUT01fU0VUVEVSKHNldEpTVGVzdERlbGVnYXRlVG9TaGFyZWRT
eW50aGV0aWNBdHRyaWJ1dGVfc2hhcmVkQXR0cmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERl
bGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgp
OyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRl
LmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
KyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpKQorICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGlj
QXR0cmlidXRlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJp
YnV0ZT4gfHwgIUpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNB
dHRyaWJ1dGU+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRy
aWJ1dGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVk
U3ludGhldGljQXR0cmlidXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FS
TklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUu
Z2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0
ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERv
bWFpblNlY3VyaXR5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHAKaW5kZXggNWNmNjc5ODQyOWVhYjBjZmYwYzgzN2Zk
Yjg1MDNhMTlkOTc2NmQ0My4uMjM4YzUwZjYxZWY1YWIwNjM5MjMyYTYwZDk5NTg5OTM3NmNjNGE3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERvbWFpblNlY3VyaXR5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZS5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
Ci0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCkBAIC0zMTUsMTMgKzMxNSwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0RG9tYWluU2VjdXJpdHlQcm90b3R5cGVGdW5jdGlvbl9vdmVybG9hZGVkTWV0aG9k
LAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RG9tYWluU2VjdXJpdHk6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdERvbWFpblNlY3VyaXR5LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RG9tYWluU2VjdXJpdHkuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1
cml0eSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsgfSwKLSAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERvbWFpblNlY3VyaXR5ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxw
dHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpKQorICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisK
KyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsK
KyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdERvbWFpblNlY3VyaXR5PiB8fCAhSlNUZXN0RG9tYWluU2VjdXJpdHk6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFpblNlY3VyaXR5PikKKyAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REb21haW5TZWN1cml0eSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RG9tYWluU2VjdXJp
dHkpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RG9tYWluU2VjdXJpdHk6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19F
TkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdERv
bWFpblNlY3VyaXR5OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKaW5kZXggOTI2OTIxZDgw
OTgzZjY2OWYxYTcwMDRjZWE5NjFlYzA2NTAyOTEzNy4uM2VkODJjMmY1YWNhODM0MDE1MGUzMmUx
MDBlODkwNWFkYThiZGYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcApA
QCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC00
NTQsMTMgKzQ1NCwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Byb3RvdHlwZUZ1bmN0aW9uX2VuYWJsZWRCeVNldHRpbgogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RW5hYmxlZEJ5
U2V0dGluZywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRC
eVNldHRpbmcuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nID0gV1RG
TW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7IH0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RF
bmFibGVkQnlTZXR0aW5nID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAg
ICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCkpCisgICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7Cisg
ICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPiB8fCAhSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZz4pCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGlu
Zyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RW5hYmxl
ZEJ5U2V0dGluZyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNl
dHRpbmcgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEVuYWJsZWRCeVNl
dHRpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9S
RV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5nZXQoKTsKIH0K
IAogdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmNwcAppbmRleCBkYzc2MTIwYmYyNDQxYzQxYTc5YWI1ZjhjODNmYTVjOGYzZjY3YzlmLi5hMTQ4
N2MyNDZjMTZiYjcyMmJjMzg1MDUxOTg5Y2YxNTM5ZmI2M2U4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUuaCIKQEAgLTE4MSwxMyArMTgxLDM2IEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc1Rlc3RFbmFibGVkRm9yQ29udGV4dF9UZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRl
eHRDb25zCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dC5nZXQoKTsgfSwKLSAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JD
b250ZXh0LmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5h
YmxlZEZvckNvbnRleHQuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+
IHx8ICFKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCk7CisgICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdO
T1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBkYzhhN2Fk
OTk2ZWQyMTc4Zjk3MTk5ZGZlNDEwN2MwMTY0NDg0YWY0Li5kNjg1ODUzZDEyOTgwYzg2OWZjOWQ4
M2QwMGNiODUxOTQzZTRjOGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3Bw
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgpAQCAtMzE4LDEzICszMTgsMzYg
QEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEV2ZW50Q29uc3RydWN0b3JfYXR0cjMs
IChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEcKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3IsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgp
OyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9
LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpOworICAgIGlmICghc3BhY2Up
IHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdEV2ZW50Q29uc3RydWN0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24p
OworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+KQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IpOwor
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5E
CitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3RvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggMDhiZTQyNmRiZjYzYTA2
MmU2MGQzODdkYjUwMmQwYTdlMzM1NTU3NC4uZmE5ZmY5ZmE3NjYwMWJkMmM4ZjRkMDQ2NmM3NDdh
OWMxMTdmODliMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC0yMiw4ICsyMiw4IEBA
CiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRUYXJnZXQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNTcsMTMgKzI1Nywz
NiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVG
dW5jdGlvbl9pdGVtLCAoSlNHbG9iYWxPYmplYwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0RXZlbnRUYXJnZXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV2ZW50VGFyZ2V0LCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7IH0sCi0gICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RFdmVudFRhcmdldCA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5n
ZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAg
ICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0LmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdEV2ZW50VGFyZ2V0PiB8fCAhSlNUZXN0RXZlbnRUYXJnZXQ6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV2ZW50VGFyZ2V0PikKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudFRhcmdldCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRUYXJnZXQpOworICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldCA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRUYXJnZXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5H
U19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RF
dmVudFRhcmdldCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50
VGFyZ2V0LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3Bw
CmluZGV4IDVmNWRjNGFjYzI0YTllOWRmYjY2NjQ5N2UwN2EyZWE5OTExM2E4NzIuLmVmNTAxMTBj
NmI3MzlhNGEzODE3ZjM3YjAzYThlYWYzNDcwMGE1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3Bw
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTgyLDEz
ICsxODIsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEV4Y2VwdGlvbl9uYW1l
LCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmoKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTVGVzdEV4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RXhjZXB0aW9uLCBVc2VDdXN0b21I
ZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOyB9LAotICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQo
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBu
dWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsKKyAgICBp
ZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdEV4Y2VwdGlvbj4gfHwgIUpTVGVzdEV4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Cisg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0RXhjZXB0aW9uPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RFeGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdEV4Y2VwdGlvbik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEV4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwor
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
RXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJ
R05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOwogfQogCiB2b2lkIEpT
VGVzdEV4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAppbmRl
eCA0NDUwY2EzZDFiNzkwZjAyZDJlN2E3MzcyYTllZjZiODc4OTU0MjdmLi40N2U3ZGRkNmUxZDhk
NmQyYzExMTc5OWJhN2NhN2ZiODBiNjFmODlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJh
dGVBZGRPcGFxdWVSb290LmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEdl
bmVyYXRlQWRkT3BhcXVlUm9vdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE4MiwxMyArMTgyLDM2IEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Rfc29tZUF0dHJpYnV0ZSwgKEpT
R2xvYmFsT2JqCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RHZW5lcmF0ZUFk
ZE9wYXF1ZVJvb3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCwgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKTsg
fSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IFdURk1vdmUoc3BhY2Up
OyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0
ZUFkZE9wYXF1ZVJvb3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAg
ICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpKQorICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisK
KyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Qu
Z2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q+IHx8ICFKU1Rlc3RHZW5lcmF0
ZUFkZE9wYXF1ZVJvb3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVy
YXRlQWRkT3BhcXVlUm9vdD4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QpOworICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VO
RAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlLmNwcAppbmRleCAwMjE4ZGJkN2FiMGY4MjlhZjZhMGNjNTljOWMyMTY4YzQzZDc5YzM3
Li43YmExZGZjMWFmYmZjZTIzODQzZjBhNDczZTYwMmUyODhlYmRhYjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE5MiwxMyArMTkyLDM2IEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2FTZWNyZXRBdHRy
aWJ1dGUsIChKU0dsb2JhbE9iCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQo
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7
CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKTsK
KyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+IHx8ICFKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VO
RAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggOWMxMmQwZTg1NGZmMzQ1ODU1ZjdjYWQ1
ZWQ0MWFiYjk4OWYwMzEzZC4uODkwODVkZDhlNmI4OTU5YjhkMWNkOGM5ODNkZjI5ZjQxYmEwYWZl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTIyLDEwICsyMiwxMCBAQAogI2lu
Y2x1ZGUgIkpTVGVzdEdsb2JhbE9iamVjdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAjaW5jbHVkZSAiRE9N
V3JhcHBlcldvcmxkLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5
cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTE4MjUsMTMgKzE4MjUsMzIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25fdGVzdEZlYXR1cmVHZXRTZWNyZXQKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEdsb2JhbE9iamVjdDo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0
R2xvYmFsT2JqZWN0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEds
b2JhbE9iamVjdC5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IFdURk1v
dmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHbG9iYWxP
YmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4g
SlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpTVGVz
dEdsb2JhbE9iamVjdDsgfQotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0
LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHbG9iYWxPYmpl
Y3QuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKKyAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1Rlc3RHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVj
dCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2xvYmFsT2JqZWN0Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklO
R1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEds
b2JhbE9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
CmluZGV4IGYzOThhYWQwZDI1OTE1NzEwZjIzYWE4OTUxN2M4MjU0Nzg1ZWEyMWYuLjNmNTY0YzYy
OWZhM2YzNWEwNTM3Mjk4Yjc4MDg2MzM1MWNjNWY5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0yNzEsMTMgKzI3
MSwzNiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllckNvbnN0cnVjdG9yLCAoSlNHbG9iYWxPYgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFw
RGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
CisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisK
KyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCmluZGV4IGVjNTA3ZjkzOWE2ZjEzY2YyODhmZjkwOThkNDk0NDBlYWE1MDdh
YmMuLmI4ZGY2ZTU4NDkzNDUyYjA4NjMxMGExNWFmNjAzNjk5N2ZhYzAzMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZl
cnRTdHJpbmdzLmgiCkBAIC0yNzEsMTMgKzI3MSwzNiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoanNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IsIChKU0ds
bwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24sIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRh
LmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisg
ICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2Uq
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8
fCAhSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9u
KTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKKyAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9S
RV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCmluZGV4IDgxZDRkYmZlZjg3NjQ0NTMwMDcyMDUzMDY2NGE5YTQzZjFjZDI3NzEu
LjU2NDlmN2EyN2YxOGFmMzM5YzMzZDY4ODZlNDZmMDczNGFiY2NjZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0yMiw4ICsy
Miw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzAzLDEz
ICszMDMsMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uX2luZGUKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwK
LSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAotICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRy
Ci0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcj4gfHwgIUpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVj
dGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPikKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
RU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmNwcAppbmRleCA0NjU4YTI1MDBlNGFlNDAyMjY1NzdlYmM0MzMxM2VjMmJiOTgxODAw
Li4xOWY1M2NiZTlkZDM0YTRiMTk5NzYwODdhOTlmYTg3Zjk0ZGJmNDk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmNwcApAQCAtMjUsOSArMjUsOSBAQAogI2luY2x1ZGUgIkpTVGVzdEludGVyZmFjZS5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRWxl
bWVudElubGluZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTExMDEsMTIgKzExMDEsMzYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PFRlc3RJbnRlcmZhY2VJdGVyYXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0g
ICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsgfSwKLSAgICAgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RJbnRlcmZhY2VJdGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
SXRlcmF0b3IuZ2V0KCk7IH0sCi0gICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBXVEZN
b3ZlKHNwYWNlKTsgfQotICAgICAgICApOworICAgICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEludGVyZmFjZUl0ZXJhdG9yLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICAgICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpOworICAg
ICAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgVGVzdEludGVyZmFjZUl0ZXJhdG9yPiB8fCAhVGVzdEludGVyZmFjZUl0ZXJh
dG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEludGVyZmFjZUl0ZXJh
dG9yPikKKyAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgVGVzdElu
dGVyZmFjZUl0ZXJhdG9yKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcik7CisgICAgICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
K0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IFRlc3RJbnRlcmZhY2VJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7CisgICAgICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAor
SUdOT1JFX1dBUk5JTkdTX0VORAorICAgICAgICB9CisKKyAgICAgICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKQEAgLTExODAsMTMgKzEyMDQsMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2ZvckVhY2gsIChKU0M6OkpTR2xvYmEKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEludGVyZmFjZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SW50
ZXJmYWNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
LmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0s
Ci0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEludGVyZmFjZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZSA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRl
cmZhY2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVy
ZmFjZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEludGVyZmFjZT4gfHwgIUpTVGVzdEludGVyZmFjZTo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlPikKKyAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2UpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZSk7CisgICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29T
dWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0SW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5E
CisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJm
YWNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdl
dCgpOwogfQogCiB2b2lkIEpTVGVzdEludGVyZmFjZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZS5jcHAKaW5kZXggMWM0NWI0N2VjZDA1YTNlODVmOTFmNWVkYzli
YzQxZmExYTgyMmRjZi4uMGY2YWRmZmViNjNjMWZlMjc0Nzc3NTBjZjIzMjk2OWM5Y2JhYTNiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3Bw
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlLmgiCkBAIC0xODIsMTMgKzE4MiwzNiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVfcmVhZG9ubHksIChKU0dsb2JhbE9iagogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7
IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IFdURk1vdmUo
c3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQoKTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAg
ICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlPiB8fCAhSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUpOworICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5H
U19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
LmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJh
YmxlLmNwcAppbmRleCA2NmY3NjRkY2U4MTYxYTY3Mzg5Y2RmZjQzMWZmZGUwNGY1ZTFhMjQ1Li5h
N2Y0ODg5MTNiOGRlZWJkYzFjYjhkZTljNTFkNDE4OTIzY2U5YTM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJs
ZS5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RJdGVyYWJsZS5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgi
CkBAIC0xOTYsMTIgKzE5NiwzNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiBjb25zdGV4
cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8VGVzdEl0
ZXJhYmxlSXRlcmF0b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKTsgfSwKLSAgICAgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJs
ZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdl
dCgpOyB9LAotICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsg
fQotICAgICAgICApOworICAgICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRl
cmF0b3IuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICAgICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgICAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKKyAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgaWYgKCFzcGFj
ZSkgeworICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRl
c3RJdGVyYWJsZUl0ZXJhdG9yPiB8fCAhVGVzdEl0ZXJhYmxlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1
Y3Rpb24pOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SXRlcmFibGVJdGVyYXRvcj4pCisgICAgICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFRlc3RJdGVyYWJsZUl0ZXJhdG9yKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIFRlc3RJdGVy
YWJsZUl0ZXJhdG9yKTsKKyAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJh
YmxlSXRlcmF0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0SXRl
cmFibGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQorICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAor
ICAgICAgICB9CisKKyAgICAgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
SXRlcmFibGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0yNzUsMTMgKzI5OSwz
NiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5j
dGlvbl9mb3JFYWNoLCAoSlNDOjpKU0dsb2JhbAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0SXRlcmFibGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEl0ZXJhYmxlLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJ
dGVyYWJsZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEl0ZXJhYmxlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICAp
OworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPiB8
fCAhSlNUZXN0SXRlcmFibGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0
ZXJhYmxlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJ
dGVyYWJsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
SXRlcmFibGUpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZSA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SXRlcmFibGU6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lH
Tk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJdGVyYWJsZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEl0ZXJhYmxlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdEl0ZXJhYmxlOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAppbmRleCA3YjE0NzkzMDRjMjZkMzZiNDc3NWQxYTQy
NmQwZGM2ZGJjYjkzMDJlLi43YWUzN2ZkMDU2MTdmMzQxYjU3NTRhMmI5OTYxMWM0ZDliMGVkODRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTIxLDgg
KzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oIgogCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3IuaCIKQEAgLTIyNSwxMyArMjI1LDM2IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1
bmN0aW9uX3Rlc3RDdXN0b21GCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5n
ZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShz
cGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOyB9LAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgot
ICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
KworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+IHx8ICFKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3I+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7CisgICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisg
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdO
T1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7CiB9CiAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2Fj
eUZhY3RvcnlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmNwcAppbmRleCAxMzljMzhiZmE3ZDFi
NTU0NDRhN2E4MjllNjNjM2VmYjU4ZGM1YjIwLi45MjY4ODUwOTY3ZWFhNzU3Nzg0ZjY2OGFmMzZi
Y2NhNTM5NTgzOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9u
LmNwcApAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5j
dGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTIyNywxMyArMjI3LDM2IEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb25Db25z
dHJ1Y3RvciwgKEpTR2xvYmFsT2JqZWN0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
biwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbi5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9
IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAg
ICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
KyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lG
YWN0b3J5RnVuY3Rpb24uZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24+IHx8
ICFKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rp
b24pOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rp
b24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAg
ICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdO
T1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
bi5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVy
ZmFjZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwCmluZGV4IDI3YWU3N2ViZGZjNjVhZjJk
NjQyYTExYmJjM2ZkMmZjZGE0MzFhMDAuLmRiNzAzMTQxMjJkYjZkNDY1MGNmYmNmZjBjZjVjMWI5
YTQ0MGEwZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0
LmNwcApAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeU5vSW50ZXJmYWNl
T2JqZWN0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzMwLDEzICszMzAs
MzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2Jq
ZWN0Q29uc3RydWN0b3JGdW5jdGlvbl9zdGF0aWMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RMZWdhY3lOb0ludGVy
ZmFjZU9iamVjdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2Fj
eU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRl
cmZhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmpl
Y3QuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IFdURk1vdmUo
c3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RM
ZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7CisgICAgaWYgKCFzcGFj
ZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdh
Y3lOb0ludGVyZmFjZU9iamVjdD4gfHwgIUpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0Ojpu
ZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVj
dD4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5
Tm9JbnRlcmZhY2VPYmplY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0Ojp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05P
UkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKTsKIH0KIAogdm9p
ZCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCmluZGV4IDA1NTQ2OGMyOWYzMDUyZmU2YjIxMzAzNDIyZTUwZDU4NGJm
MGYwZDYuLmFkYmJiNzNhZTFlMTg2NjIyNjM4YjU3OTQ4YTFmNWQ0MzJhYTBiMjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MjQ0LDEzICsyNDQsMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnNQcm90b3R5cGVGdW5jdGlvbl9uYW1lZEl0ZW0KIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Cisg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOworICAgIGlmICgh
c3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6
Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVf
V0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CiB9CiAKIHZvaWQgSlNU
ZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwCmluZGV4IGUxOGUwMDc0MDA1Zjhk
NWU1ZjA0YjM4ZjI1MGU4MDRhNGQ5OWE3OWIuLjIyYzA5YzcyZmVmYzY0M2EyNmNlZTZkMTNjZDhl
ODQxYTMwMWY5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3RNYXBMaWtlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzYxLDEzICszNjEsMzYgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGpzVGVzdE1hcExpa2VQcm90b3R5cGVGdW5jdGlvbl9kZWxldGUsIChKU0dsb2Jh
bE9iamVjdCoKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE1hcExpa2U6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE1hcExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RN
YXBMaWtlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IFdURk1vdmUoc3BhY2Up
OyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RNYXBMaWtlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBM
aWtlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
KyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtl
LmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZT4gfHwgIUpTVGVzdE1hcExpa2U6Om5lZWRzRGVzdHJ1
Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2U+KQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RNYXBMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RNYXBMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJ
R05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0
TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMuY3BwCmluZGV4IDRmZjlhZmQ4ZmEyN2M1MmI1YzM4Njk5ZDFlMTcyMTljZjA2Nzg2YzMu
LjNkZGY3YTQ0ZGJmMGViY2UyZTJiN2Y2ZWRkOGVhNTY1NjA0MjIxOGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzc1LDEzICszNzUs
MzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbl8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOyB9LAotICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOyB9LAotICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9
LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOworICAgIGlm
ICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5E
CitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmNwcAppbmRleCBhMWExNmU4MzNmMjU3N2I0YWUwNDM3ZDE1OWEyOWFiODEyZTQ2NmUw
Li5hZTExYzdjYTJjYjk2MjkwZDIzMDVjZTYzZDVlM2Q5ZGUxNzU1Y2NkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNw
cApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMzOSwxMyArMzM5LDM2IEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25z
dHJ1Y3RvciwgKEpTCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAot
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAg
ICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisK
KyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CisgICAgaWYg
KCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4pCisgICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JF
X1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Cisg
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCmluZGV4IDkzYmJkNDgwNDE1
NGRlZDY2MTE0MTFhNjU2YWE0OWEyYjYzZDY0YWYuLmM5ODM1YmJhYzFhMWU1YWYyOWY1YmE3MGY4
MmM4MjlkMGQ3MzFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcApAQCAtMjIsOCArMjIsOCBA
QAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgpAQCAtMzM5LDEzICszMzksMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0s
Ci0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1v
dmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJ
R05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKIH0KIAogdm9pZCBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5k
ZXggOTkyNDE3NTkxZWZjZDcxODI5NDAzNWFlOTU0OGE3YzViMjQzMmYyNi4uMzRjNzJhODE5OGI5
N2JmZmQ1ZDVkM2MyMGE1MGMxMTI2Mjk5NjdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zOTYs
MTMgKzM5NiwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdAogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICAp
OworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Cisg
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXIuY3BwCmluZGV4IDBjYjU0MWNjNjRiYTdkYjJmODAwNzNlZDM3YzE3MWQyMmM0
YTkzY2UuLmFlYmU2NzRjMDI1OTEyZGRkNmNjZGU5NGJkZjk2MzgxNmY4OGNlM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCkBAIC0yMiw4ICsy
Miw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgpAQCAtMjQxLDEzICsyNDEsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yLCAoSlNHbG9iYWxPYmoKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAotICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAg
KTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
KworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllci5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllcik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQor
CisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHAKaW5kZXggOTkyMmFiZGNjYTQ5ZTk3M2RlYjEwNjNhMjQxZTFiZjgwNzYzYWFlZC4u
ODMzZjNjNjNmOWRlYTEyY2ZiMzk4NTRhNzY5YTQ3NjM3ZjU1ZTM5YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24u
aCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlLmgiCkBAIC0yNDEsMTMgKzI0MSwzNiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIo
anNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvciwgKEpTR2xvYgog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uID0gV1RG
TW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQorICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPikKKyAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
bik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24pOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
K0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lH
Tk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdl
dCgpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAppbmRleCBhN2NkZWZj
NDk3MTUxODU2ZDJjZTRiZTc1YzRkMjRiM2Q5ZjM1M2VjLi5mYzY1NDY1Nzk0NjU0OTAxZWRjNDU4
N2Y3M2FjNTY3YTVkNGY4ZWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVz
LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKQEAgLTI2NSwxMyArMjY1LDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uX25hbWVk
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5n
ZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0gV1RG
TW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAot
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
LSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmdldCgpOworICAgIGlmICghc3BhY2UpIHsK
KyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6
bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcik7CisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
cjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dB
Uk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCmlu
ZGV4IGVkODRmODNlZGUyNGYxYjA2YjhiYjk2YjZmZmUxNzUzNGI5MzU5ZmMuLmE4MTc2ZWNhZmI2
MDI4NTA2YWI3ZDkzZTNjNDA3OTk4MjBmNmM5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcApAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtMjU3LDEzICsyNTcsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IsIChKU0dsb2IKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgp
OyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7IH0s
Ci0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2Up
OyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7CisgICAgaWYg
KCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklO
R1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKIH0KIAog
dm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGguY3BwCmluZGV4IGZiNmUzZGUyNDA1ZmM5YWM0MmIzZmJiZmVhODkzNGIz
M2E5NWZkYTAuLjEyYmQzM2Y0MWJhZWNiYWRmOTJkNDQwZmFkYWZlYWJlNGFhMDcyZWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjE1LDEz
ICsyMTUsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGhDb25zdHJ1Y3RvciwgKEpTR2xvYmFsT2JqZWN0KgogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGguZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRo
ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguZ2V0KCk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAg
IG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgu
Z2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGguZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoPiB8fCAhSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aD4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCk7CisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
KyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lH
Tk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsKIH0KIAogdm9pZCBKU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyLmNwcAppbmRleCAyODI3YjAxM2Q4ZmE5NjM3MzFmY2Y5ZDE2OGI0ZjAwODJjY2U1YTE5Li5j
OTQ4YmNiZmNmYjA5MTM5NmFkMWMzMGQ5ZTFmMzk2YjA3YzlmMWJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIxNSwx
MyArMjE1LDM2IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yLCAoSlNHbG9iYWxPYmplCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwor
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Cisg
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwor
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOworICAgIGlm
ICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcik7CisgICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
CisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VO
RAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CiB9
CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAppbmRleCAwMGUwZDU3NzQ1MDA2NjdjMmE3NTQz
YTZjNjgxYzliZTNmMzE0Y2I3Li5mOTA3NmJiNDE0NGQ5ZDUyYjNhMmJlOThmYWRmZTBlNzMzMDA0
YWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUuaCIKQEAgLTI0MSwxMyArMjQxLDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25f
Z2V0dGVyCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwK
LSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
LSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpuZWVk
c0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VO
RAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgp
OwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCmluZGV4IGVmODgwZTY2MzhmNDBjODMyMGI2
MmNiMDRlMTMyY2RlYzFlNWRkMjEuLmJkODAwZWMwMjQyNWRhZjgyOTU3ZDc1NjU1OTU3ZmZmODkz
Yzg4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNw
cApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMjk1LDEzICsyOTUsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKGpzVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IsIChKU0dsb2JhbE9i
amUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9
LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRy
Ci0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4gfHwgIUpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4pCisgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQor
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisg
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwor
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllci5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3Bw
CmluZGV4IGE3YmZmMjllYzJhYzM5ZGQwODQ3NzU3OTFkOTIzMTcxZGY0ZjEwZWUuLmE4Mjc5ZWJl
MTY2ZWM2YjZhYjUzNGZlNTZiYmFlNmM4M2QxNWFhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtMjk1LDEzICsyOTUsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvciwgKEpTR2xvYmEKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9
LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUo
c3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAotICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAot
ICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIGlmICghc3BhY2Up
IHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24p
OworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQor
CisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwCmluZGV4IGVmZTA2OTI3Y2E3ZGU0NzgyMDQ2N2QyNzBlMDNjY2QyNTQxNzFh
NzguLjE0OTQ0ZjdiODY2OWEyM2JkNjgzZDVhZTFjZjlhZjY1Yzc5MThiYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAgLTIyLDggKzIy
LDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzI2LDEzICszMjYsMzYgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQ
cm90b3R5cGVGdW5jdGlvbl9uYW1lZFMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Cisg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOworICAg
IGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwor
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVy
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJ
R05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3Bw
CmluZGV4IDc1YTI2OWUzZTQ5YTRkODg3NTNhYjI5NzZhNmZmNTNlNDAzZDJmZDEuLjk4YmQ2ZDM5
NTQxMjZhYjQ3NDgxNjc1NmNmMjBhYTNiZjE5M2I3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzczLDEzICszNzMsMzYgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJQ
cm90b3R5cGVGdW5jdGlvbl9pbmQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsK
KyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpKQor
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4g
fHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24p
OworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+KQorICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisg
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
RU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIuY3BwCmluZGV4IGUyOGU5YjQ2YzllYzAxZWU1MzY5YTg0MjJiYWNlMzI3MTZmMjVm
N2UuLjVjNmM3YTZiZDE0YWIzNTMwNjZmY2YzYjJhOTBjZGJhZWY3YmI0ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlci5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlw
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgpAQCAtNDIzLDEzICs0MjMsMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGVG
dW4KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOyB9LAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IFdURk1vdmUoc3BhY2Up
OyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOyB9LAot
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IFdURk1vdmUo
c3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpKQorICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklO
R1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
ciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCmluZGV4IGVjODEyYWY1
NDc5YWQwZDBhOTYxMmJlZTQxYTc0MDJlNDZhMGQyMjAuLjlhYmM2ZmI5Y2FmOGRiNmJkZmEwNWQ1
OWNiYjc3NTcxZmMyOTcyMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgpAQCAtMjcyLDEzICsyNzIsMzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNDb25zdHJ1Y3RvciwK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9
LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAotICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQorICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cz4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQor
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
RU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAppbmRleCBm
Nzg5NmNlY2YyMjY2OWM2YTVmYjIxNjM1ZDQzMmM2YWQ4ZDhjZmRkLi4xODE0ZDJmNGU0OTU3NDNk
MDlhOTZjNzAxMzcxOWJmNDA2MmVmYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNw
cApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgi
CiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgpAQCAtMzU2LDEzICszNTYsMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0luc3RhbmMK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmdldCgpOyB9LAot
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllcy5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllcyA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0g
ICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5nZXQoKTsKKyAgICBp
ZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcz4gfHwgIUpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6bmVlZHNEZXN0cnVj
dGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmdldCgpOwog
fQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
czo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMuY3BwCmluZGV4IDFjZThiMTIyYTk5ZTQwN2Y2ZjU2MmYxZjFiNTllODM1
NjRhYzIyYTYuLjc1MWE3ZTM4MmZhYzE5Y2E5MGJmNDA4ZGZiZDZhNDRiMjIwNWRmMzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJK
U0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCkBA
IC0zMzMsMTMgKzMzMywzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYQogCiBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucywg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7
IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gV1RGTW92ZShzcGFjZSk7
IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwor
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4pCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7CisgICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5H
U19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dElucy5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lc3BhY2VP
YmplY3QuY3BwCmluZGV4IDExMmVjNzIxODM1ZWIwMGNmNWVmZjA2ZDAzMGE0NTI5N2RhOWM3NjIu
LmI2OGNmMzkxNDE3MzlmM2Q3OGIwOWQzMTU3MzgzMTM1NTljYjNhMGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lc3BhY2VPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lc3BhY2VPYmplY3QuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
TmFtZXNwYWNlT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q2FsbGFibGUuaCIKQEAgLTI3NSwxMyArMjc1LDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3ROYW1lc3BhY2VPYmplY3RDb25zdHJ1Y3RvckZ1bmN0aW9uX25hbWVzcGFjZU9wZXJh
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE5hbWVzcGFjZU9iamVjdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFj
ZU9iamVjdCA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0s
Ci0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAg
bnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3Qu
Z2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q+IHx8ICFKU1Rlc3ROYW1lc3BhY2VPYmpl
Y3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVzcGFjZU9iamVjdD4p
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZXNwYWNl
T2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RO
YW1lc3BhY2VPYmplY3QpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3Bh
Y2VPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVzcGFj
ZU9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAg
ICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdO
T1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdCA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKTsKIH0K
IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAKaW5kZXggNGRjNWQzZjQ0YmQ4YzI5YjY0YTRhZmQ2ODY3MDFiNzg1Y2Q5
MjEyNi4uYTllMjczMjk3MjUxMDQ4N2FiMTA2ZWFhNWU0YmQyMWUyNjU5NzY5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcApAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94
eS5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC00
MDIsMTIgKzQwMiwzNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1v
ZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8VGVzdE5vZGVJdGVy
YXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRl
cmF0b3IuZ2V0KCk7IH0sCi0gICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gV1RGTW92
ZShzcGFjZSk7IH0sCi0gICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCk7IH0sCi0gICAgICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
Tm9kZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0KLSAgICAgICAgKTsKKyAgICAgICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOworICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNw
YWNlcygpOworICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7CisKKyAgICAgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKwor
ICAgICAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICAgICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdl
dCgpOworICAgICAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdE5vZGVJdGVyYXRvcj4gfHwgIVRlc3ROb2RlSXRlcmF0
b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0Tm9kZUl0ZXJhdG9yPikK
KyAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgVGVzdE5vZGVJdGVy
YXRvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBU
ZXN0Tm9kZUl0ZXJhdG9yKTsKKyAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5v
ZGVJdGVyYXRvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3ROb2Rl
SXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
KyAgICAgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICAg
ICAgfQorCisgICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJ
dGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2Rl
SXRlcmF0b3IuZ2V0KCk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTQ4MSwxMyArNTA1LDM2IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZm9yRWFjaCwgKEpT
Qzo6SlNHbG9iYWxPYmplCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROb2Rl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3ROb2RlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Tm9kZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
LSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Tm9kZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAg
ICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owor
CisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsKKyAgICBpZiAo
IXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5vZGU+IHx8ICFKU1Rlc3ROb2RlOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROb2RlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RO
b2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROb2Rl
KTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZSA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0Tm9kZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
KyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VO
RAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUg
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOwogfQog
CiB2b2lkIEpTVGVzdE5vZGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggNTVhNGZhZDcxM2RiNGM2NjUxYzRiM2U4OWM4ZTk1
MTI1Njg3MTUwMC4uOWVjZDUxZGEyOWE0ZGIxMGYyOTliZGU0ZmI5YzRkNzhhYTZlZWNiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTIyLDE0ICsyMiwxNCBAQAogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlz
ZVByb3h5LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldv
cmxkLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0Js
b2IuaCIKQEAgLTkwNjIsMTMgKzkwNjIsMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uX3RvU3RyaW5nLCAoSlNHbG9iYWxPYmplY3QqIGwKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0T2JqLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T2JqLmdldCgpOyB9LAotICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0T2JqID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9iai5nZXQoKTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE9iaiA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RPYmouZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
KworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE9iai5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9iaj4gfHwgIUpTVGVzdE9iajo6bmVlZHNE
ZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T2JqPikKKyAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RPYmopOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE9iaik7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE9iaiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0T2JqOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
RU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0T2JqID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0T2JqLmdldCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAKaW5kZXggMjhkMWI3NzNmNDAzOWE2
ZTg1YjhmMmU1NjAxZTYxZTBhYzNjOThmOS4uMzlkMjQyMGY1ZGI2OWQwMmYwN2M3NWVlMGJmYTk4
MDVmZmUxMjcyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3Bw
CkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwu
aCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFu
ZGxpbmcuaCIKQEAgLTIyOSwxMyArMjI5LDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uX2NvbmRpdGlvbmFsCiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGw8SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKTsgfSwKLSAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwor
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Cisg
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpOworICAgIGlmICghc3Bh
Y2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWw+IHx8ICFKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6bmVlZHNE
ZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+KQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE9wZXJhdGlvbkNvbmRp
dGlvbmFsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RP
cGVyYXRpb25Db25kaXRpb25hbCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RPcGVyYXRpb25Db25kaXRpb25hbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAg
IH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWwuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWw6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAppbmRleCBkMWQxNjc5
ZGM2ZDFlZWJkM2YxYjUwMjM0NzJiZjFkNWMxYWZmN2U5Li44MGNhMmQxNWFmN2E1ODQ3NWIzZjI0
ODY1MmI5MDFhNjBiN2MxMGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKQEAgLTMwMCwx
MyArMzAwLDM2IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3IsIChKU0dsb2JhbE9iamVjCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsKKyAgICBpZiAoIXNwYWNl
KSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM+IHx8ICFKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpuZWVk
c0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPikK
KyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5J
TkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAppbmRleCA0YWExMDhiNWU5ZmNlMmU4ODcwZTAx
MmY0N2IwZTY3MjVkMDE0ZDg1Li4xNDJkODYyYmRmMzcwMzE3NmU2ZmIwZDJhNWU4MjNjM2YzYTk4
NWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTIzNywxMyArMjM3LDM2IEBAIEpTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
Q29uc3RydWN0b3IsIChKCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsgfSwKLSAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsgfSwKLSAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQo
KTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+IHx8ICFKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpuZWVkc0Rlc3RydWN0aW9uKTsK
KyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPikKKyAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKTsKKyAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAg
IH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgpOwogfQogCiB2
b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdp
bkludGVyZmFjZS5jcHAKaW5kZXggOGVlMGUzZWNhNGJhNmIzMzlmZjk4NDQ2MmVkZWIxOGEyNjNh
ODE1NS4uMmY0M2QyNTBlMGM3Y2IxMTkyNGI4ZDUwMmEwZWI3ZWM3ZmZjMjYzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbklu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJK
U1Rlc3RQbHVnaW5JbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTIzOSwxMyArMjM5LDM2IEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvciwgKEpT
R2xvYmFsT2JqZWN0KiBsZXhpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQ
bHVnaW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFBsdWdpbkludGVyZmFjZSwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZS5nZXQoKTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQbHVnaW5J
bnRlcmZhY2UuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1
Z2luSW50ZXJmYWNlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+IHx8ICFK
U1Rlc3RQbHVnaW5JbnRlcmZhY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFBsdWdpbkludGVyZmFjZT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0UGx1Z2luSW50ZXJmYWNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2UpOworICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdFBsdWdpbkludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAor
ICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbklu
dGVyZmFjZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbklu
dGVyZmFjZS5nZXQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKaW5kZXggNzc5MGExMzgyMTExNTI2
NDViZjk4YzZlNjA0Mjk5ZDJhOTEwN2NiZi4uNjI2YmVjNTA2NDllOTBhMjZiM2Q1NzVlYzUyYTMw
ZWNlNDA3YjRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5j
cHAKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkRPTVByb21pc2VQcm94eS5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3IuaCIKQEAgLTI5OCwxMyArMjk4LDM2IEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRfcmVhc29uLCAoSlNHbG9iYWxPYmpl
Y3QqIGxlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsPEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsgfSwK
LSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IFdURk1vdmUoc3BhY2UpOyB9
LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7
CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpKQorICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0
KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ+IHx8ICFKU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudD4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQpOworICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
KyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAor
SUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsKIH0KIAogdm9p
ZCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHAK
aW5kZXggZDk2MzVkNjkyMzIyMWY2ZDcwNWYyMzU3YmZhNDNhNGQ4NjIwODRiMC4uZmNlZGZjZDhk
ZDE2MjFhYzA4ZDBlY2JmZWI2YjAxMWIwODQ3ZGZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5
TWFwTGlrZS5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seU1h
cExpa2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlLmgiCkBAIC0zMDAsMTMgKzMwMCwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNU
ZXN0UmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25fZm9yRWFjaCwgKEpTR2xvYgogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3RSZWFkT25seU1hcExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RSZWFkT25seU1hcExpa2UuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExp
a2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOyB9LAotICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlNYXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxw
dHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owor
CisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgp
OworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlPiB8fCAhSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZWFkT25seU1hcExpa2U+KQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5TWFwTGlr
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVhZE9u
bHlNYXBMaWtlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBM
aWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZWFkT25seU1hcExp
a2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7CiB9CiAKIHZv
aWQgSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwCmluZGV4
IDdkZGM2ZjQ2OTQ5ZWYxNzVkYmNmMWVhOTNjYjIzYjVkNTY5YWU4OWMuLjhlNWM2OTA3ZWJmZDlk
MGVkNzY4MjlkMmEwNWRlZmM4NDk4ZTRiZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExp
a2UuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0UmVhZE9ubHlTZXRMaWtl
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgpAQCAtMjc5LDEzICsyNzksMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFJl
YWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uX2ZvckVhY2gsIChKU0dsb2IKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0UmVh
ZE9ubHlTZXRMaWtlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVh
ZE9ubHlTZXRMaWtlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0g
V1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsgfSwKLSAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFJlYWRPbmx5U2V0TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0g
ICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2UuZ2V0KCkpCisgICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsKKyAg
ICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdFJlYWRPbmx5U2V0TGlrZT4gfHwgIUpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6bmVlZHNE
ZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlTZXRMaWtlPikKKyAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seVNldExpa2UpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5U2V0
TGlrZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZSA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklO
R1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpOwogfQogCiB2b2lkIEpT
VGVzdFJlYWRPbmx5U2V0TGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNw
cAppbmRleCA5ZTBmMTRmNTZlZjkzYThkMzAwMGMwN2NjZTRmYTQ5YmFiOTE0MDc0Li45NzBkZjZi
MjZmNDFiYTAzYjE2NjQ0MmQ4YWNlY2E2MDRhMWU1M2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpT
VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMTY2LDEzICsxNjYsMzYgQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0
cnVjdG9yLCAoSlNHbG9iYWxPYmplY3QKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0LmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0g
V1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKTsgfSwKLSAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAg
ICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3QuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwor
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdC5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdD4gfHwg
IUpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dCk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05P
UkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
LmdldCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCBlNDcy
ZjFhNDNkMzU0MzViYjk0ZDAyNmIxY2UwZTY3MGJiOTM0MDFlLi4yMGY2OGNhOTJhNjJjYTk4YmFi
NDI4MTRlZGZjZTczNTNiYzRiNjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM0NCwxMyArMzQ0LDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvbl9mCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7Cisg
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpKQor
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuZ2V0KCk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U+IHx8ICFKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Om5lZWRzRGVzdHJ1
Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4p
CisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpOworICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwor
SUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXRMaWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXRMaWtlLmNwcAppbmRleCA0ODJkODc3YWY0M2JhMjBiNDZjYzJiYjMyNDUz
ZDU3ODUyODNiODQ4Li42NmEyOTRhYWE3MGUwMTFmZTdiZDJjYWIyNjExOWJhYzcxYTNiOGJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2UuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U2V0
TGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTMzNywxMyArMzM3LDM2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3RTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25fZGVsZXRlLCAoSlNHbG9iYWxPYmplY3QqCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTZXRMaWtl
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKTsg
fSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlr
ZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAg
ICAgbnVsbHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owor
CisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKTsKKyAgICBp
ZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdFNldExpa2U+IHx8ICFKU1Rlc3RTZXRMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RTZXRMaWtlPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RTZXRMaWtlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3RTZXRMaWtlKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0
TGlrZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U2V0TGlrZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdT
X0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RTZXRMaWtlLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdFNldExpa2U6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAppbmRl
eCBkN2VhNmUxZTA2M2MyZTAyNTA1NzdhNGEwYzc2ODE3YTM5MjhjNjgxLi45NTZlZDdhZjk3NmU5
ZWJmYzY4ZTAyNDAzZGFjNWExNzUxNWUyMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCkBAIC0yMiw4ICsyMiw4IEBA
CiAjaW5jbHVkZSAiSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM0OSwxMyArMzQ5LDM2IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJv
dG90eXBlRnVuY3Rpb25fCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVs
bHB0cgotICAgICk7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7Cisg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHx8ICFKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5J
TkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwog
fQogCiB2b2lkIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXIuY3BwCmluZGV4IGNhNjA0ZGU3NGUwNWQ2ZmIxZmE3YmUxMWI4MTlhYjJmMjc4NjA3ZDcu
LjU1ODk5ZGE0YTNiOGFkMTVkNGI3NzA5YzgzODgxMzIxNjA1NzdmMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyLmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lm
aWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRT
dHJpbmdzLmgiCkBAIC0xODcsMTMgKzE4NywzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvbl90b1N0cmluZywgKEpTR2xvYmFsTwog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXI6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVz
dFN0cmluZ2lmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXIuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllciA9IFdURk1vdmUo
c3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAg
IEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyPiB8fCAh
SlNUZXN0U3RyaW5naWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0
cmluZ2lmaWVyPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RTdHJpbmdpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0U3RyaW5naWZpZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZp
ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyLmdldCgpOwogfQogCiB2b2lkIEpTVGVz
dFN0cmluZ2lmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uLmNwcAppbmRleCA5MDM2YWFlZjYwNTE5NTA5YzI5ZjRlNmM1OWM1OTQxN2U3ODQ3ZWY3
Li45MTZiOGZhNmI3NWUxYTk4ZjA4ODJjZDNiMGI4MDM1MjE0MTBlOGY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
bi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3Ry
aW5ncy5oIgpAQCAtMTg3LDEzICsxODcsMzYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uUHJvdG90eXBlRnVuY3Rpb25fdG8KIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0
aW9uLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24u
Z2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiA9IFdURk1v
dmUoc3BhY2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCk7
CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbj4gfHwgIUpTVGVzdFN0cmlu
Z2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24p
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05P
UkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24gPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQo
KTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCmluZGV4IGFmZjljMzJhNGIy
NTk4NTYwOTk1YjdkNzNhNzI2N2VjOTFjOWNjY2UuLjMwYzVhMTlmNjgyNjcyOWQyYTAzNTI1MzI4
ZDgzZDVmOWUxZmQzYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbi5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0yMDQsMTMgKzIwNCwzNiBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1
bmN0aW9uX3RvU3RyaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRP
cGVyYXRpb24uZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0
KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gV1RGTW92ZShzcGFj
ZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
KworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7CisgICAgaWYgKCFzcGFj
ZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbj4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbik7CisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24gPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJO
SU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bi5nZXQoKTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3Bw
CmluZGV4IGI4YjkwZjY4MmQyNmFmZmU5MGMyOTNlY2Q5MzJiMTFjOWJlNDY0MjkuLmRkMTc3MTNl
ZjhiNmZlNzE2YjRlY2NlOGY5Y2JhNTU3OGQxNTk1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRT
dHJpbmdzLmgiCkBAIC0yMDQsMTMgKzIwNCwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpbwog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMs
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIK
LSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50
ZWRBcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBs
ZW1lbnRlZEFzOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXM+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQor
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQK
K0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXMuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBs
ZW1lbnRlZEFzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcuY3BwCmluZGV4IDY0MDlmY2Q3NGNlYmEzMjhiNzEzYzcxMTY0ZDg1YjFkNjNm
MDA5NDIuLmY1MzUwMzgzMTYxNmNiOGIxNmFiMmZiMGIwNjc1YjI1ZDRlYTdmNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJp
bmcuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0xODcsMTMgKzE4NywzNiBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nUHJv
dG90eXBlRnVuY3RpbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmcsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
LSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOyB9LAotICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gV1RGTW92ZShzcGFjZSk7IH0sCi0g
ICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwor
CisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOworICAgIGlm
ICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nPiB8fCAhSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+KQorICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKTsKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9S
RV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmcgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwor
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZS5jcHAKaW5kZXggOTU0YmNkMDJkNWIzMjYwZDUyMzQ2N2MxNWE2YzUx
OTg4OTNkMjdiMC4uMzkzZWM2ZmQxOTQ5MDUyY2M2YjgwZDA1YzNlMDIyZTA3ODViOTJlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNw
cApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlLmgiCkBAIC0yMDMsMTMgKzIwMywzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZVByb3RvdHlwZUZ1bmN0aW9uX3RvUwog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0
dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUuZ2V0KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0
KCk7IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlID0gV1RGTW92ZShz
cGFjZSk7IH0sCi0gICAgICAgIG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0KCk7CisgICAg
aWYgKCFzcGFjZSkgeworICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZTo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT4pCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZSk7CisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
K0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Cisg
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCisgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19F
TkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsKIH0KIAogdm9pZCBK
U1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAppbmRleCAwNjUwM2M2MjhhMTBlMmE4ZDJl
OTE3ZTZjNTU3NDlkYzliMzZlMTNkLi4zYWQ5MDJkNzY1ZTJmY2FiNjdlZTkwNjY5ZTZlM2YxZmM4
ZDRhMDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZS5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIyMiwxMyArMjIyLDM2IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZVByb3RvdHlw
ZUZ1bmN0aW9uX3RvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgbnVsbHB0cgotICAgICk7Cisg
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
KworICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU+
IHx8ICFKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6bmVlZHNEZXN0cnVjdGlv
bik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU+KQorICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSk7CisgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dB
Uk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKKyAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUuZ2V0KCk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RUYWdnZWRXcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAppbmRleCAxNTdiNmZmMWExZDllNjdmNWRi
YmQ4YThiZmRkNTg4NmUwODA5ZTg4Li41Zjk2ZDg2YzQ3NjY5YTc1YzMzNDE3YzFhZmYxNzNlMWZj
ZWYwM2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdyYXBwZXIuY3BwCkBAIC0yMiw4ICsyMiw4IEBA
CiAjaW5jbHVkZSAiSlNUZXN0VGFnZ2VkV3JhcHBlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMTY1LDEzICsxNjUs
MzYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdFRhZ2dlZFdyYXBwZXJDb25zdHJ1
Y3RvciwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2EKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdFRhZ2dlZFdyYXBwZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFRhZ2dlZFdyYXBwZXIsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyLmdldCgpOyB9LAot
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlciA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdn
ZWRXcmFwcGVyLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAotICAgICAgICBudWxscHRyCi0gICAgKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdn
ZWRXcmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RU
YWdnZWRXcmFwcGVyLmdldCgpOworICAgIGlmICghc3BhY2UpIHsKKyAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0VGFnZ2VkV3JhcHBlcj4gfHwgIUpTVGVzdFRh
Z2dlZFdyYXBwZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRhZ2dlZFdy
YXBwZXI+KQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFRh
Z2dlZFdyYXBwZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdFRhZ2dlZFdyYXBwZXIpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdn
ZWRXcmFwcGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RUYWdnZWRX
cmFwcGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05P
UkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlciA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCk7CiB9CiAKIHZv
aWQgSlNUZXN0VGFnZ2VkV3JhcHBlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggYmFlYmJlNGJmOTM0Y2Vm
M2EzNGUwNGU5NTNjMjg1MDk1NzJjNGM1Mi4uYzlkNWJmMDhlYzQ4NjA4M2IxMjMzNTQ1ZDc2MmFm
OTkxODU3Y2FiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0VHlwZWRlZnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBA
IC03NzUsMTMgKzc3NSwzNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbl9jYWxsV2l0aFNlcXVlbmNlVGhhdFJlcQogCiBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0VHlwZWRlZnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFR5cGVkZWZzLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7IH0sCi0g
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5n
ZXQoKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVkZWZzID0gV1RGTW92ZShzcGFjZSk7IH0sCi0gICAgICAg
IG51bGxwdHIKLSAgICApOworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpKQorICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisK
KyAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQoKTsKKyAgICBp
ZiAoIXNwYWNlKSB7CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdFR5cGVkZWZzPiB8fCAhSlNUZXN0VHlwZWRlZnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdFR5cGVkZWZzPikKKyAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RUeXBlZGVmcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0VHlwZWRlZnMpOworICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RUeXBlZGVmcyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOworSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0VHlwZWRl
ZnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7CisgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCisgICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9X
QVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICB9CisKKyAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpOwogfQogCiB2b2lkIEpTVGVzdFR5cGVk
ZWZzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3Jr
ZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5kZXggMGZlZDBhMTA4NTE4MGQxYjZiZDIwY2I2
NzZiYmJmNmFhZjQ1YjU5OC4uNDc5Y2MzM2I5MmY4YjM4MjY2YWMyZjg1YmY2MjIxZDY2MzMwOGJm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
V29ya2VyR2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtMjIsOCArMjIsOCBAQAogI2lu
Y2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDYsMTMgKzI0NiwzMiBAQCBKU0NfREVG
SU5FX0NVU1RPTV9HRVRURVIoanNXb3JrZXJHbG9iYWxTY29wZV9Xb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yLCAoSlNHbAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXb3JrZXJH
bG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGw8SlNXb3JrZXJHbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpZZXM+KHZtLAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAotICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JX
b3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdl
dCgpOyB9LAotICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAg
ICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4gc2Vy
dmVyLm1faGVhcENlbGxUeXBlRm9ySlNXb3JrZXJHbG9iYWxTY29wZTsgfQotICAgICk7CisgICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOworICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7
CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZv
ckpTV29ya2VyR2xvYmFsU2NvcGUsIEpTV29ya2VyR2xvYmFsU2NvcGUpOworICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1Nf
RU5ECisgICAgfQorCisgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrZXJH
bG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xv
YmFsU2NvcGUuZ2V0KCk7CiB9CiAKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3Bl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRH
bG9iYWxTY29wZS5jcHAKaW5kZXggOGJjYzQ0ZTQwMjYyMGIwNjZkZWY1YWFkNjY1YWJjYWIzYzJi
MGRlMC4uZDcyZTViZjhjOWFhMWQ5MDFiNDdhZjAyMTAzMTAzZDUyNTM3OTQ3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2Jh
bFNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNX
b3JrbGV0R2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNjAsMTMgKzE2MCwzMiBAQCBKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoanNXb3JrbGV0R2xvYmFsU2NvcGVfV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0
b3IsIChKUwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXb3JrbGV0R2xvYmFsU2Nv
cGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTV29ya2xldEdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4o
dm0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgpOyB9LAotICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0
R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKLSAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7
IH0sCi0gICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAotICAgICAg
ICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4gc2VydmVy
Lm1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGU7IH0KLSAgICApOworICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKKyAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKKyAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBpZiAoIXNwYWNlKSB7
CisgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZv
ckpTV29ya2xldEdsb2JhbFNjb3BlLCBKU1dvcmtsZXRHbG9iYWxTY29wZSk7CisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1dvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5J
TkdTX0VORAorICAgIH0KKworICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29y
a2xldEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKKyAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3Jr
bGV0R2xvYmFsU2NvcGUuZ2V0KCk7CiB9CiAKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
</data>
<flag name="commit-queue"
          id="479699"
          type_id="3"
          status="-"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>