<?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>69112</bug_id>
          
          <creation_ts>2011-09-29 16:58:51 -0700</creation_ts>
          <short_desc>Start refactoring DFJSpeculativeJIT</short_desc>
          <delta_ts>2011-09-29 17:08:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>yuqiang.xian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475759</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-29 16:58:51 -0700</bug_when>
    <thetext>Again, move JSVALUE64 code into a DFJSpeculativeJIT64.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475760</commentid>
    <comment_count>1</comment_count>
      <attachid>109222</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-29 17:00:51 -0700</bug_when>
    <thetext>Created attachment 109222
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475761</commentid>
    <comment_count>2</comment_count>
      <attachid>109222</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 17:03:43 -0700</bug_when>
    <thetext>Comment on attachment 109222
Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=109222&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Start refactoring DFJSpeculativeJIT

DFG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475764</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-29 17:08:58 -0700</bug_when>
    <thetext>Fixed in r96379</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109222</attachid>
            <date>2011-09-29 17:00:51 -0700</date>
            <delta_ts>2011-09-29 17:03:42 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>69112.patch</filename>
            <type>text/plain</type>
            <size>257706</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYzNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTEtMDktMjkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IHJlZmFjdG9yaW5nIERGSlNwZWN1bGF0aXZlSklUCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTExMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFnYWluLCBtb3ZlIEpTVkFMVUU2
NCBjb2RlIGludG8gYSBERkpTcGVjdWxhdGl2ZUpJVDY0LmNwcAorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpkdW1wKToKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91
YmxlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlSlNG
aW5hbE9iamVjdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDExLTA5LTI5ICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBvdXQgdHJpdmlh
bGx5IGR1cGxpY2F0ZWQgY29kZSBpbiBERkdKSVRDb2RlR2VuZXJhdG9yLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk2Mzc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNCw2ICszMDQsNyBAQAogCQk4Njg4MEYxRTE0MzI4QkI5MDBCMDhENDIgLyog
REZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxQTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29t
cGlsZXJJbmxpbmVNZXRob2RzLmggKi87IH07CiAJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAv
KiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsKIAkJODY4ODBGNDQxNDM1MzFBODAwQjA4RDQyIC8qIERG
R0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4Njg4MEY0MzE0MzUzMUE3MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVy
YXRvcjY0LmNwcCAqLzsgfTsKKwkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1
bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
ICovOyB9OwogCQk4NjhCRkEwODExN0NFRkQxMDBCOTA4QjEgLyogQXRvbWljU3RyaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2OEJGQTAwMTE3
Q0VGRDEwMEI5MDhCMSAvKiBBdG9taWNTdHJpbmcuY3BwICovOyB9OwogCQk4NjhCRkEwOTExN0NF
RkQxMDBCOTA4QjEgLyogQXRvbWljU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NjhCRkEwMTExN0NFRkQxMDBCOTA4QjEgLyogQXRvbWljU3Ry
aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
ODY4QkZBMEExMTdDRUZEMTAwQjkwOEIxIC8qIEF0b21pY1N0cmluZ0ltcGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2OEJGQTAyMTE3Q0VGRDEwMEI5
MDhCMSAvKiBBdG9taWNTdHJpbmdJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNzEsNiArMTA3Miw3IEBACiAJCTg2ODgwRjFCMTQzMjhC
QjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOyBwYXRoID0g
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4Njg4MEYzMTE0MzRGRkFGMDBCMDhENDIgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBG
NDMxNDM1MzFBNzAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwOyBw
YXRoID0gZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOyBwYXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NjhCRkEwMDExN0NFRkQxMDBCOTA4QjEgLyogQXRvbWljU3Ry
aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEF0b21pY1N0cmlu
Zy5jcHA7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2OEJGQTAxMTE3Q0VGRDEwMEI5MDhCMSAvKiBBdG9taWNTdHJpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXRvbWljU3RyaW5nLmg7IHBhdGggPSB0ZXh0
L0F0b21pY1N0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjhCRkEwMjEx
N0NFRkQxMDBCOTA4QjEgLyogQXRvbWljU3RyaW5nSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBdG9taWNTdHJpbmdJbXBsLmg7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmlu
Z0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMDEsNiArMjMwMyw3IEBA
CiAJCQkJODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LywKIAkJCQk4NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAq
LywKIAkJCQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAgKi8sCisJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUNjQuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzM4NCw2ICszMzg3LDcgQEAKIAkJCQk4Njg4MEYxRDE0MzI4QkI5MDBCMDhE
NDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYx
RjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4Njg4MEY0NDE0MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRv
cjY0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiA5NjM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxMyBAQAogI2luY2x1ZGUg
IkRGR1NwZWN1bGF0aXZlSklULmgiCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorCiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisKIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50SW50ZXJuYWwoTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KQogewpAQCAtMTE0LDkxICsxMTYsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJCiAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiB9CiAKLSNpZm5kZWYg
TkRFQlVHCi12b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKLXsKLSAgICBz
d2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgU291cmNlTm90U2V0OgotICAgICAgICBmcHJpbnRm
KG91dCwgIk5vdFNldCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZhbHVlSW5SZWdpc3Rl
ckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICJJ
bnQzMiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhhdmVOb2RlOgotICAgICAgICBmcHJp
bnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAg
c3dpdGNoICh0ZWNobmlxdWUoKSkgewotICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlOgot
ICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbHJl
YWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgZnByaW50ZihvdXQsICIo
aW50MzIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgIGZwcmlu
dGYob3V0LCAiJSUlcyIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBmcHJpbnRmKG91dCwgImlu
dDMyKCUlJXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUkluZm86OmRl
YnVnTmFtZShmcHIoKSkpOwotICAgICAgICBicmVhazsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIGNhc2UgSW5QYWlyOgotICAgICAgICBmcHJpbnRmKG91dCwgInBhaXIoJSUlcywgJSUlcyki
LCBHUFJJbmZvOjpkZWJ1Z05hbWUodGFnR1BSKCkpLCBHUFJJbmZvOjpkZWJ1Z05hbWUocGF5bG9h
ZEdQUigpKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICIqJWQiLCB2aXJ0dWFsUmVnaXN0ZXIo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgIGZwcmludGYo
b3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRG9udEtub3c6Ci0gICAgICAgIGZwcmludGYob3V0LCAiISIpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKG91dCwgIj8lZCIsIHRlY2huaXF1
ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2VuZGlmCi0KLU9TUkV4aXQ6Ok9TUkV4
aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2ln
bmVkIHJlY292ZXJ5SW5kZXgpCi0gICAgOiBtX2NoZWNrKGNoZWNrKQotICAgICwgbV9ub2RlSW5k
ZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKLSAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1fYnl0
ZWNvZGVJbmRleEZvck9TUikKLSAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQot
ICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgLCBtX3Zhcmlh
YmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKLSAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0
LT5tX2xhc3RTZXRPcGVyYW5kKQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCi0g
ICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFi
bGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAg
ICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihq
aXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi12b2lkIE9T
UkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKLSAgICAg
ICAgbV9hcmd1bWVudHNbYXJndW1lbnRdLmR1bXAob3V0KTsKLSAgICBmcHJpbnRmKG91dCwgIiA6
ICIpOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFi
bGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdLmR1
bXAob3V0KTsKLX0KLSNlbmRpZgotCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewog
ICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGVJbmRleCwgcmV0
dXJuRm9ybWF0KTsKQEAgLTQxMSw0MCArMzI4LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQm9vbAogICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmIG5vZGUsIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKLXsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKVticmFu
Y2hOb2RlSW5kZXhdOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLQotICAg
IC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2Nr
LgotICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYg
aW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAg
aWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKLSAgICAgICAgY29uZGl0aW9uID0gSklUQ29t
cGlsZXI6OmludmVydChjb25kaXRpb24pOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2Vu
OwotICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAg
ICB9Ci0KLSAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAg
IGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAg
ICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6Oklt
bTMyKGltbSksIG9wMi5ncHIoKSksIHRha2VuKTsKLSAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtl
bik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihj
b25kaXRpb24sIG9wMS5ncHIoKSwgb3AyLmdwcigpKSwgdGFrZW4pOwotICAgIH0KLQotICAgIC8v
IENoZWNrIGZvciBmYWxsIHRocm91Z2gsIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGp1bXAuCi0gICAg
aWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIG5vdFRha2VuKTsKLX0KLQogSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6
OmNvbnZlcnRUb0RvdWJsZShKU1ZhbHVlT3BlcmFuZCYgb3AsIEZQUlJlZyByZXN1bHQpCiB7CiAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCBvcC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSk7CkBAIC00NjEsNTAgKzM0NCw2IEBAIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklU
Ojpjb252ZXIKICAgICByZXR1cm4gbm90TnVtYmVyOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5j
aE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCi17Ci0g
ICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsKLSAg
ICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgCi0gICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgCi0gICAgYWRkQnJhbmNoKG1f
aml0LmJyYW5jaERvdWJsZShjb25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpKSwgdGFrZW4p
OwotICAgIAotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICBhZGRC
cmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIpCi17Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0
LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQu
Z3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7Ci0gICAgCi0gICAgaWYgKHRha2VuID09IChtX2Js
b2NrICsgMSkpIHsKLSAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
OwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwotICAgICAgICB0YWtlbiA9IG5vdFRh
a2VuOwotICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICB9Ci0KLSAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIAotICAgIEdQUlJlZyBvcDFHUFIgPSBv
cDEuZ3ByKCk7Ci0gICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKLSAgICAKLSAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIAotICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKLSAgICBp
ZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1
bXAoKSwgbm90VGFrZW4pOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0cikKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CkBAIC01NTUsOCArMzk0LDYgQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgICAgICAgICAgdXNlKG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIHNo
b3VsZFNwZWN1bGF0ZUFycmF5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CiAgICAg
ICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5k
ZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOwotICAgICAgICAvLyB9IGVsc2Ug
aWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25OdW1lcmljKG5vZGUu
Y2hpbGQyKCkpKSB7Ci0gICAgICAgIC8vICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChu
b2RlLCBicmFuY2hOb2RlSW5kZXgsIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigp
KTsKICAgICAgICAgfSBlbHNlCkBAIC01NjYsNyArNDAzLDYgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICAvLyBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk5vdElu
dGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQogICAgICAgICBjb21waWxlT2JqZWN0RXF1
YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CiAgICAg
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIo
KSkpCkBAIC02MDQsMzYgKzQ0MCw2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9k
ZSYgbm9kZSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJl
LCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBzbG93UGF0aCkKLXsKLSAgICBNYXJrZWRTcGFjZTo6U2l6ZUNsYXNzKiBzaXplQ2xh
c3MgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLnNpemVDbGFzc0Zvck9iamVjdChzaXplb2Yo
SlNGaW5hbE9iamVjdCkpOwotICAgIAotICAgIG1faml0LmxvYWRQdHIoJnNpemVDbGFzcy0+Zmly
c3RGcmVlQ2VsbCwgcmVzdWx0R1BSKTsKLSAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7Ci0gICAgCi0gICAgLy8g
VGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBm
cmVzaCBvYmplY3QsIGJ1dAotICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0
LgotICAgIAotICAgIC8vIERpdGNoIHRoZSBzdHJ1Y3R1cmUgYnkgcGxhY2luZyBpdCBpbnRvIHRo
ZSBzdHJ1Y3R1cmUgc2xvdCwgc28gdGhhdCB3ZSBjYW4gcmV1c2UKLSAgICAvLyBzY3JhdGNoR1BS
LgotICAgIG1faml0LnN0b3JlUHRyKHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBKU09iamVjdDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKLSAgICAKLSAgICAvLyBO
b3cgdGhhdCB3ZSBoYXZlIHNjcmF0Y2hHUFIgYmFjaywgcmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0
aGUgZnJlZSBsaXN0Ci0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAm
c2l6ZUNsYXNzLT5maXJzdEZyZWVDZWxsKTsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBv
YmplY3QncyB2dGFibGUKLSAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSKSk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUg
b2JqZWN0J3MgaW5oZXJpdG9ySUQuCi0gICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5oZXJpdG9ySUQoKSkpOwotICAgIAotICAgIC8vIEluaXRpYWxpemUg
dGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRlci4KLSAgICBtX2ppdC5hZGRQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNPYmplY3QpKSwgcmVzdWx0R1BS
LCBzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRmluYWxPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlT
dG9yYWdlKCkpKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKQEAgLTIxMzMsMjc3ICsxOTM5LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICB1c2UobV9j
b21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChO
b2RlJiBub2RlKQotewotICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAKLSAg
ICBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKG5vZGUuY2hpbGQxKCksIG5vZGUubG9jYWwoKSk7Ci0g
ICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwoKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKLXsKLSAgICBBU1NFUlQobV9jb21waWxl
T2theSk7Ci0gICAgQVNTRVJUKG1fY29tcGlsZUluZGV4ID09IGJsb2NrLmJlZ2luKTsKLQotICAg
IGlmIChibG9jay5pc09TUlRhcmdldCkKLSAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoYmxv
Y2spOwotCi0gICAgbV9ibG9ja0hlYWRzW21fYmxvY2tdID0gbV9qaXQubGFiZWwoKTsKLSNpZiBF
TkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKLSAgICBtX2ppdC5icmVha3BvaW50
KCk7Ci0jZW5kaWYKLQotICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9h
cmd1bWVudHNBdEhlYWQuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJn
dW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5S
ZWdpc3RlckZpbGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9
IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJU
KG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOwot
ICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAgICAgICAgICAgIG1fdmFyaWFibGVz
W2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24obV9q
aXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
OwotICAgIH0KLSAgICAKLSAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsKLSAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0KLSAgICBmb3IgKDsgbV9jb21waWxlSW5kZXggPCBi
bG9jay5lbmQ7ICsrbV9jb21waWxlSW5kZXgpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0
LmdyYXBoKClbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ig
PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkgewotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJj
IyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5vZGUu
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0KCkpOwotI2VuZGlm
Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRMb2NhbCkKLSAgICAgICAgICAgICAgICBj
b21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIAotI2lm
IEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
U3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQg
MHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0KCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKERGR19KSVRf
QlJFQUtfT05fRVZFUllfTk9ERSkKLSAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSNl
bmRpZgotICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgY29tcGls
ZShub2RlKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkgewotICAgICAgICAgICAg
ICAgIG1fY29tcGlsZU9rYXkgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4
ID0gYmxvY2suZW5kOwotICAgICAgICAgICAgICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSNpZiBF
TkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQo
KSkgewotICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIi0+ICVzLCB2ciMlZCIsIGRhdGFGb3JtYXRUb1N0cmluZyhpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpLCAoaW50KW5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGlm
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgRlBSSW5mbzo6
ZGVidWdOYW1lKGluZm8uZnByKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIShp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8uZ3By
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIsICVzICVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8udGFnR1BS
KCkpLCBHUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5wYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgIik7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKLSNl
bmRpZgotICAgICAgICB9Ci0gICAgICAgIAotI2lmIEVOQUJMRShERkdfVkVSQk9TRV9WQUxVRV9S
RUNPVkVSSUVTKQotICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gLW1fYXJndW1lbnRzLnNpemUo
KSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgb3BlcmFuZCA8IC1SZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsrb3BlcmFuZCkKLSAgICAgICAgICAgIGNvbXB1
dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKLSAgICAgICAgCi0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiIDogIik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBv
cGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJhbmQp
Ci0gICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVy
cik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCi0gICAgICAgIAotICAgICAgICBpZiAobm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIH0K
LX0KLQotLy8gSWYgd2UgYXJlIG1ha2luZyB0eXBlIHByZWRpY3Rpb25zIGFib3V0IG91ciBhcmd1
bWVudHMgdGhlbgotLy8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZXkgYXJlIGNvcnJlY3Qgb24g
ZnVuY3Rpb24gZW50cnkuCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMo
KQotewotICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAgIG1fYnl0ZWNvZGVJbmRleEZv
ck9TUiA9IDA7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUo
KTsgKytpKQotICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdp
c3RlckZpbGUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lz
dGVyRmlsZSk7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1QYXJhbWV0ZXJzOyArK2kpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IChWaXJ0dWFsUmVnaXN0ZXIpKG1faml0LmNvZGVCbG9jaygpLT50aGlzUmVn
aXN0ZXIoKSArIGkpOwotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2pp
dC5ncmFwaCgpW21faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV1dLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgZWxzZSBpZiAo
aXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0
YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5n
cHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5n
cHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwotICAgICAgICB9IC8vIEZJWE1FOiBuZWVkIGJvb2xlYW4gcHJlZGljdGlvbnMs
IGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB0aGF0IHN1cHBvcnQuCi0gICAgfQotfQotCi1i
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKLXsKLSAgICBjaGVja0FyZ3VtZW50VHlwZXMo
KTsKLQotICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAgIGZvciAobV9ibG9jayA9IDA7
IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Jsb2NrKQotICAg
ICAgICBjb21waWxlKCptX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdKTsKLSAgICBsaW5r
QnJhbmNoZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVmFsdWVSZWNvdmVyeSBTcGVjdWxh
dGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmIHZhbHVl
U291cmNlKQotewotICAgIHN3aXRjaCAodmFsdWVTb3VyY2Uua2luZCgpKSB7Ci0gICAgY2FzZSBW
YWx1ZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFk
eUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgICAgIAotICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmls
ZToKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFz
VW5ib3hlZEludDMyKCk7Ci0KLSAgICBjYXNlIEhhdmVOb2RlOiB7Ci0gICAgICAgIGlmIChtX2pp
dC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNv
dXJjZS5ub2RlSW5kZXgoKSkpOwotICAgIAotICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1faml0
LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOwotICAgICAgICBpZiAoIW5vZGVQdHIt
PnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRl
YWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQsCi0g
ICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhlIEdDIGhh
cHB5IGFmdGVyIHRoZSBPU1IuCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29u
c3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgR2VuZXJhdGlv
bkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0
ZXIoKV07Ci0gICAgICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5k
ZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewotICAgICAgICAgICAgLy8gVHJ5IHRv
IHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhl
IHZhbHVlIHdlIHdhbnQuCi0gICAgICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0
aWVzOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRo
ZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUK
LSAgICAgICAgICAgIC8vICAgIHRoZW4gaXQgbWVhbnMgdGhhdCBhbGwgcmVtYWluaW5nIHVzZXMg
b2YgdGhlIHZhbHVlIHdvdWxkIGhhdmUgcGVyZm9ybWVkIGEKLSAgICAgICAgICAgIC8vICAgIFZh
bHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZh
bHVlVG9OdW1iZXIuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMy
OiBMaWtld2lzZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFs
dWUgaXMKLSAgICAgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0
LiBCdXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgotICAgICAgICAgICAgLy8gICAg
YW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRvTnVtYmVy
IGJlY2F1c2UgaXQKLSAgICAgICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcg
dXNlcyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBudW1iZXIgd2hpbGUKLSAgICAgICAgICAgIC8v
ICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9u
IG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCi0gICAgICAgICAgICAvLyAgICB0aGVu
IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZv
cm1lZCBudW1iZXIKLSAgICAgICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVy
bWVkaWF0ZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0
aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCi0g
ICAgICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0
aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCi0gICAgICAgICAgICAvLyAgICB0aGUgbnVt
YmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCi0gICAgICAgIAot
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgICAgIGlm
IChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgewotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBub2Rl
UHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpbmZvUHRy
ID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAg
ICAgICAgICAgIGlmIChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09
IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggdWludDMyVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJl
Z2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBo
KClbaW5mby5ub2RlSW5kZXgoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkg
ewotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
VG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBV
SW50MzJUb051bWJlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5k
ZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWVUb051bWJlckluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5kZXg7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9JbnQzMkluZGV4OwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleFRv
VXNlXTsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25v
ZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlu
Zm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2Up
OwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKLQotICAg
ICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgewot
ICAgICAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERv
dWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0
ci0+ZnByKCkpOwotICAgICAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgJiBE
YXRhRm9ybWF0SlMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluUGFp
cihpbmZvUHRyLT50YWdHUFIoKSwgaW5mb1B0ci0+cGF5bG9hZEdQUigpKTsKLSAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVn
aXN0ZXJGb3JtYXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihu
b2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwotICAgIAotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKLSAgICB9Ci0gICAgICAg
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeSgpOwotICAgIH0KLX0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NjM3NikJKGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6OTYzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjQ3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJERkdTcGVj
dWxhdGl2ZUpJVC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisjaWYgVVNFKEpTVkFMVUU2NCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTxib29sIHN0cmlj
dD4KK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJ
bmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK3sKKyNpZiBFTkFCTEUo
REZHX0RFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICJTcGVjSW50QCVkICAgIiwg
bm9kZUluZGV4KTsKKyNlbmRpZgorICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleF07CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CisKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkg
eworICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3Rh
bnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBE
YXRhRm9ybWF0SW50ZWdlcjsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKKworICAgICAg
ICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOworICAgICAgICAgICAgQVNT
RVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBn
cHIpOworICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CisgICAgICAgICAgICByZXR1cm4gZ3ByOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5m
by5zcGlsbEZvcm1hdCgpOworICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0
SlMpOworICAgICAgICAKKyAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlclNwaWxsZWQpOworICAgICAgICAKKyAgICAgICAgaWYgKHNwaWxsRm9ybWF0
ID09IERhdGFGb3JtYXRKU0ludGVnZXIpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGtub3cgdGhp
cyB3YXMgc3BpbGxlZCBhcyBhbiBpbnRlZ2VyIHdlIGNhbiBmaWxsIHdpdGhvdXQgY2hlY2tpbmcu
CisgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAg
ICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIHJldHVybkZv
cm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOworICAgICAgICAgICAgICAgIHJldHVybiBncHI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgICAgICByZXR1cm5Gb3JtYXQg
PSBEYXRhRm9ybWF0SlNJbnRlZ2VyOworICAgICAgICAgICAgcmV0dXJuIGdwcjsKKyAgICAgICAg
fQorICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIGdwcik7CisKKyAgICAgICAgLy8gRmlsbCBhcyBKU1ZhbHVlLCBhbmQgZmFsbCB0
aHJvdWdoLgorICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdl
cik7CisgICAgICAgIG1fZ3Bycy51bmxvY2soZ3ByKTsKKyAgICB9CisKKyAgICBjYXNlIERhdGFG
b3JtYXRKUzogeworICAgICAgICAvLyBDaGVjayB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlci4KKyAg
ICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAg
aW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAvLyBJ
ZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KKyAgICAgICAgaWYgKCFzdHJpY3QpIHsKKyAg
ICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CisgICAgICAgICAg
ICByZXR1cm4gZ3ByOworICAgICAgICB9CisgICAgICAgIC8vIGVsc2UgZmFsbCB0aHJvdWdoICYg
aGFuZGxlIGFzIERhdGFGb3JtYXRKU0ludGVnZXIuCisgICAgICAgIG1fZ3Bycy51bmxvY2soZ3By
KTsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6IHsKKyAgICAgICAgLy8g
SW4gYSBzdHJpY3QgZmlsbCB3ZSBuZWVkIHRvIHN0cmlwIG9mZiB0aGUgdmFsdWUgdGFnLgorICAg
ICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQ7CisgICAgICAgICAgICAvLyBJZiB0aGUgcmVnaXN0
ZXIgaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgd2UgbmVlZCB0byB0YWtlIGEgY29weS4KKyAgICAg
ICAgICAgIC8vIElmIG5vdCwgd2UnbGwgemVybyBleHRlbmQgaW4gcGxhY2UsIHNvIG1hcmsgb24g
dGhlIGluZm8gdGhhdCB0aGlzIGlzIG5vdyB0eXBlIERhdGFGb3JtYXRJbnRlZ2VyLCBub3QgRGF0
YUZvcm1hdEpTSW50ZWdlci4KKyAgICAgICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZv
LmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ3ByOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHQp
OworICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGdwciA9IGlu
Zm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybkZvcm1h
dCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorCisg
ICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogeworICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5n
cHIoKTsKKyAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKKyAgICAgICAgcmV0dXJuRm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXI7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorCisgICAgY2Fz
ZSBEYXRhRm9ybWF0RG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgY2FzZSBE
YXRhRm9ybWF0Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICBjYXNl
IERhdGFGb3JtYXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7CisgICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAgICAgIHJldHVybkZvcm1h
dCA9IERhdGFGb3JtYXRJbnRlZ2VyOworICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOworfQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBWYWx1ZVNvdXJj
ZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBj
YXNlIFNvdXJjZU5vdFNldDoKKyAgICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRm
KG91dCwgIkluUmVnRmlsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMySW5SZWdp
c3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1f
bm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFZhbHVlUmVjb3Zl
cnk6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsK
KyAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIt
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJv
eGVkSW50MzI6CisgICAgICAgIGZwcmludGYob3V0LCAiKGludDMyKSIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEluR1BSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZv
OjpkZWJ1Z05hbWUoZ3ByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKKyAgICAgICAgZnByaW50ZihvdXQsICJpbnQzMiglJSVzKSIsIEdQUkluZm86OmRl
YnVnTmFtZShncHIoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluRlBSOgorICAgICAg
ICBmcHJpbnRmKG91dCwgIiUlJXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnBy
aW50ZihvdXQsICIqJWQiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCku
ZGVzY3JpcHRpb24oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9udEtub3c6CisgICAg
ICAgIGZwcmludGYob3V0LCAiISIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBmcHJpbnRmKG91dCwgIj8lZCIsIHRlY2huaXF1ZSgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorI2VuZGlmCisKK09TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
Y2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCisgICAg
OiBtX2NoZWNrKGNoZWNrKQorICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkK
KyAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1fYnl0ZWNvZGVJbmRleEZvck9TUikKKyAgICAs
IG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQorICAgICwgbV9hcmd1bWVudHMoaml0LT5t
X2FyZ3VtZW50cy5zaXplKCkpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNp
emUoKSkKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQorewor
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3Vt
ZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1
bWVudF0pOworICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFy
aWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKKyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVd
ID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxl
XSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJn
dW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKKyAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRd
LmR1bXAob3V0KTsKKyAgICBmcHJpbnRmKG91dCwgIiA6ICIpOworICAgIGZvciAodW5zaWduZWQg
dmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkK
KyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdLmR1bXAob3V0KTsKK30KKyNlbmRpZgorCitH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQoreworICAgIHJldHVybiBmaWxsU3BlY3VsYXRl
SW50SW50ZXJuYWw8ZmFsc2U+KG5vZGVJbmRleCwgcmV0dXJuRm9ybWF0KTsKK30KKworR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGVJbmRleCBub2RlSW5k
ZXgpCit7CisgICAgRGF0YUZvcm1hdCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlcjsKKyAgICBHUFJS
ZWcgcmVzdWx0ID0gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPHRydWU+KG5vZGVJbmRleCwgbXVz
dEJlRGF0YUZvcm1hdEludGVnZXIpOworICAgIEFTU0VSVChtdXN0QmVEYXRhRm9ybWF0SW50ZWdl
ciA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRlBSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgp
Cit7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAi
U3BlY0RvdWJsZUAlZCAgICIsIG5vZGVJbmRleCk7CisjZW5kaWYKKyAgICBOb2RlJiBub2RlID0g
bV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworCisgICAgaWYgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKKworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBG
UFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRE
b3VibGVUb0ludHB0cihzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGVJbmRleCkpKSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJs
ZShncHIsIGZwcik7CisgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CisKKyAgICAgICAgICAg
ICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91Ymxl
KTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZnByOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29u
c3RhbnQobm9kZUluZGV4KSkgeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxv
Y2F0ZSgpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVl
T2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAgICAgICAgICAgdW5sb2NrKGdw
cik7CisKKyAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyRG91YmxlKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnBy
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnByOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBm
cHJBbGxvY2F0ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBEYXRhRm9ybWF0IHNw
aWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOworICAgICAgICBBU1NFUlQoc3BpbGxGb3Jt
YXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgdW5sb2NrKGdwcik7CisgICAg
fQorCisgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKKyAgICBjYXNlIERhdGFG
b3JtYXROb25lOiAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgorICAgIGNhc2UgRGF0YUZv
cm1hdEJvb2xlYW46IC8vIFRoaXMgdHlwZSBuZXZlciBvY2N1cnMuCisgICAgY2FzZSBEYXRhRm9y
bWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIAorICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNh
c2UgRGF0YUZvcm1hdEpTOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjogeworICAgICAg
ICBHUFJSZWcganNWYWx1ZUdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGpz
VmFsdWVHcHIpOworICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAg
R1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0ZSgpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisKKyAgICAg
ICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBh
IEpTVmFsdWUKKyAgICAgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCB0ZW1wR3ByKTsKKyAgICAg
ICAgdW5ib3hEb3VibGUodGVtcEdwciwgZnByKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICAvLyBGaW5hbGx5LCBo
YW5kbGUgaW50ZWdlcnMuCisgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZwcik7CisgICAgICAgIGhh
c1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOworCisgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGpz
VmFsdWVHcHIpOworICAgICAgICBtX2dwcnMudW5sb2NrKGpzVmFsdWVHcHIpOworICAgICAgICBt
X2dwcnMudW5sb2NrKHRlbXBHcHIpOworICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKGZw
cik7CisgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAg
ICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0
SW50ZWdlcjogeworICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAg
R1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAg
ICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGdwciwgZnByKTsKKyAgICAgICAgbV9ncHJz
LnVubG9jayhncHIpOworICAgICAgICByZXR1cm4gZnByOworICAgIH0KKworICAgIC8vIFVuYm94
IHRoZSBkb3VibGUKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogeworICAgICAgICBHUFJS
ZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7
CisgICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkgeworICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHdlIGRvbid0IHRyYW1wbGUgZ3ByIGlmIGl0IGlzIGluIHVzZS4KKyAgICAgICAgICAg
IEdQUlJlZyB0ZW1wID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCB0
ZW1wKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHRlbXAsIGZwcik7CisgICAgICAgICAgICB1
bmxvY2sodGVtcCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdW5ib3hEb3VibGUoZ3By
LCBmcHIpOworCisgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CisgICAgICAgIG1fZnBycy5y
ZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOworCisgICAgICAg
IGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICByZXR1cm4gZnByOworICAgIH0KKworICAg
IGNhc2UgRGF0YUZvcm1hdERvdWJsZTogeworICAgICAgICBGUFJSZWcgZnByID0gaW5mby5mcHIo
KTsKKyAgICAgICAgbV9mcHJzLmxvY2soZnByKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEludmFsaWRG
UFJSZWc7Cit9CisKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9k
ZUluZGV4IG5vZGVJbmRleCkKK3sKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAg
ZnByaW50ZihzdGRlcnIsICJTcGVjQ2VsbEAlZCAgICIsIG5vZGVJbmRleCk7CisjZW5kaWYKKyAg
ICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworCisg
ICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKKyAgICBjYXNlIERhdGFGb3JtYXRO
b25lOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOworCisgICAgICAgIGlmIChu
b2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0NlbGwo
KSkgeworICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJDb25zdGFudCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihqc1ZhbHVlLmFzQ2VsbCgpKSwgZ3ByKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZ3ByOworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwor
ICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3Bp
bGxlZCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTKTsKKyAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
SlNDZWxsKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcikp
OworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CisgICAg
ICAgIHJldHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICBj
YXNlIERhdGFGb3JtYXRKU0NlbGw6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7
CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQor
CisgICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3By
KCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFG
b3JtYXRKU0NlbGwpOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIGNhc2UgRGF0
YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgIGNhc2Ug
RGF0YUZvcm1hdEpTRG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICBjYXNl
IERhdGFGb3JtYXRKU0Jvb2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogeworICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOworICAgICAgICByZXR1cm4gYWxs
b2NhdGUoKTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworfQorCitHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisjaWYg
RU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0Jvb2xA
JWQgICAiLCBub2RlSW5kZXgpOworI2VuZGlmCisgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBo
KClbbm9kZUluZGV4XTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9k
ZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKworICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZv
cm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogeworICAgICAgICBHUFJSZWcgZ3By
ID0gYWxsb2NhdGUoKTsKKworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwor
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZ3ByOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgZ3ByKTsKKworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNCb29sZWFuKSB7
CisgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSks
IGdwcik7CisgICAgICAgIH0KKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIGNhc2UgRGF0
YUZvcm1hdEJvb2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7CisgICAgICAg
IEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAg
ICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CisgICAg
ICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOwor
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgZ3ByKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRp
b25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgIG1faml0LnhvclB0cihUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIHJl
dHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNh
c2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAg
Y2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBj
YXNlIERhdGFGb3JtYXRDZWxsOiB7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKCk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEludmFsaWRHUFJS
ZWc7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFu
Y2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBt
X2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJbmRleF07CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1f
aml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5C
eXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2Rl
T2Zmc2V0KCkpOworCisgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0
byB0aGUgdGFrZW4gYmxvY2suCisgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2Vu
IHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZh
bGwgdGhyb3VnaC4KKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICBj
b25kaXRpb24gPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmRpdGlvbik7CisgICAgICAgIEJsb2Nr
SW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIHRha2VuID0gbm90VGFrZW47CisgICAgICAgIG5v
dFRha2VuID0gdG1wOworICAgIH0KKworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDEoKSkpIHsKKyAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOworICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9u
LCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSwgb3AyLmdwcigpKSwgdGFrZW4pOworICAgIH0gZWxz
ZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaW50MzJf
dCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKKyAgICAgICAgYWRk
QnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBKSVRDb21waWxlcjo6
SW1tMzIoaW1tKSksIHRha2VuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgYWRkQnJhbmNo
KG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCkpLCB0YWtlbik7
CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIGZhbGwgdGhyb3VnaCwgb3RoZXJ3aXNlIHdlIG5l
ZWQgdG8ganVtcC4KKyAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKKyAgICAgICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworfQorCitKSVRDb21waWxlcjo6SnVt
cCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydFRvRG91YmxlKEdQUlJlZyB2YWx1ZSwgRlBSUmVnIHJl
c3VsdCwgR1BSUmVnIHRtcCkKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFs
dWUsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgCisgICAgbV9qaXQubW92
ZSh2YWx1ZSwgdG1wKTsKKyAgICB1bmJveERvdWJsZSh0bXAsIHJlc3VsdCk7CisgICAgCisgICAg
SklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBpc0ludGVn
ZXIubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZh
bHVlLCByZXN1bHQpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgcmV0dXJu
IG5vdE51bWJlcjsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91
YmxlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBp
bGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUg
PSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJbmRleF07CisgICAgQmxvY2tJbmRleCB0YWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFr
ZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3Jh
cGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOworICAgIAorICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOworICAgIAorICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29u
ZGl0aW9uLCBvcDEuZnByKCksIG9wMi5mcHIoKSksIHRha2VuKTsKKyAgICAKKyAgICBpZiAobm90
VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKKyAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
bm90VGFrZW4pOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmpl
Y3RFcXVhbGl0eShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2
cHRyKQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJ
bmRleF07CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworCisgICAgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsOworICAgIAorICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAg
IGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDsKKyAgICAgICAgQmxvY2tJbmRl
eCB0bXAgPSB0YWtlbjsKKyAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFr
ZW4gPSB0bXA7CisgICAgfQorCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICAKKyAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgIEdQUlJl
ZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgCisgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIodnB0cikpKTsKKyAgICAKKyAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmRp
dGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7CisgICAgaWYgKG5vdFRha2VuICE9IChtX2Js
b2NrICsgMSkpCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUs
IHZvaWQqIHZwdHIpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgCisgICAgR1BS
UmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
cHRyKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBvcDFHUFIsIG9wMkdQUik7CisgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Cisg
ICAgZmFsc2VDYXNlLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKEltbTMyKFZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKK30K
KworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21wYXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1
ZW50IGJyYW5jaC4KK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKIG9w
ZXJhdGlvbikKK3sKKyAgICAvLyBGdXNlZCBjb21wYXJlICYgYnJhbmNoLgorICAgIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOworICAgIGlmIChicmFu
Y2hOb2RlSW5kZXggIT0gTm9Ob2RlKSB7CisgICAgICAgIC8vIGRldGVjdFBlZXBIb2xlQnJhbmNo
IGN1cnJlbnRseSBvbmx5IHBlcm1pdHMgdGhlIGJyYW5jaCB0byBiZSB0aGUgdmVyeSBuZXh0IG5v
ZGUsCisgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJl
ZmVyZW5jZSB0aGUgY29tcGFyZS4gCisgICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291
bnQoKSA9PSAxKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50
ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbik7CisgICAgICAgICAg
ICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2go
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCBkb3VibGVDb25kaXRpb24pOworICAgICAgICAgICAgdXNl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIHNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBjb21w
aWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmds
b2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIHNob3VsZFNwZWN1bGF0ZUFycmF5KG5vZGUuY2hp
bGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmpl
Y3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
dXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24sIG9w
ZXJhdGlvbik7CisKKyAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmNv
bXBhcmUzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3Vs
ZCB1c2UgaXQgaGVyZS4KKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxz
ZSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgdHJ1ZUNhc2UgPSBtX2ppdC5icmFuY2hEb3VibGUoZG91YmxlQ29u
ZGl0aW9uLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgIG1faml0LnhvclB0cihJbW0z
Mih0cnVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQpOwor
CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0
YUZvcm1hdEpTQm9vbGVhbik7CisgICAgfSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAm
JiBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigp
KSkKKyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEo
KS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVx
ICYmIHNob3VsZFNwZWN1bGF0ZUFycmF5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQor
ICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0cik7CisgICAgZWxzZQorICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CisgICAgCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgR1BSUmVnIHJlc3VsdEdQUiwgR1BS
UmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgpCit7Cisg
ICAgTWFya2VkU3BhY2U6OlNpemVDbGFzcyogc2l6ZUNsYXNzID0gJm1faml0Lmdsb2JhbERhdGEo
KS0+aGVhcC5zaXplQ2xhc3NGb3JPYmplY3Qoc2l6ZW9mKEpTRmluYWxPYmplY3QpKTsKKyAgICAK
KyAgICBtX2ppdC5sb2FkUHRyKCZzaXplQ2xhc3MtPmZpcnN0RnJlZUNlbGwsIHJlc3VsdEdQUik7
CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdEdQUikpOworICAgIAorICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxv
Y2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKKyAgICAv
LyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KKyAgICAKKyAgICAvLyBEaXRjaCB0
aGUgc3RydWN0dXJlIGJ5IHBsYWNpbmcgaXQgaW50byB0aGUgc3RydWN0dXJlIHNsb3QsIHNvIHRo
YXQgd2UgY2FuIHJldXNlCisgICAgLy8gc2NyYXRjaEdQUi4KKyAgICBtX2ppdC5zdG9yZVB0cihz
dHJ1Y3R1cmUsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OnN0
cnVjdHVyZU9mZnNldCgpKSk7CisgICAgCisgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBzY3JhdGNo
R1BSIGJhY2ssIHJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdAorICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7
CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJnNpemVDbGFzcy0+Zmlyc3RGcmVlQ2Vs
bCk7CisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgdnRhYmxlCisgICAgbV9q
aXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UikpOworICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIGluaGVyaXRvcklELgor
ICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZkluaGVyaXRv
cklEKCkpKTsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBz
dG9yYWdlIHBvaW50ZXIuCisgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKEpTT2JqZWN0KSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgbV9q
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBKU0ZpbmFsT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKK3sKKyAgICBOb2RlVHlwZSBvcCA9
IG5vZGUub3A7CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBKU0NvbnN0YW50OgorICAg
ICAgICBpbml0Q29uc3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKworICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1w
dCB0byBjb21waWxlLgorICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgewor
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2Fs
KCkpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgICAgICAvLyBMaWtlIGludGVnZXJSZXN1bHQs
IGJ1dCBkb24ndCB1c2VDaGlsZHJlbiAtIG91ciBjaGlsZHJlbiBhcmUgcGhpIG5vZGVzLAorICAg
ICAgICAgICAgLy8gYW5kIGRvbid0IHJlcHJlc2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0YWZs
b3cgd2l0aCB2aXJ0dWFsIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgbV9n
cHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVn
ZXIpOworICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRJ
bnRlZ2VyKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKG5vZGUubG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIC8v
IExpa2UganNWYWx1ZVJlc3VsdCwgYnV0IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxkcmVu
IGFyZSBwaGkgbm9kZXMsCisgICAgICAgICAgICAvLyBhbmQgZG9uJ3QgcmVwcmVzZW50IHZhbHVl
cyB3aXRoaW4gdGhpcyBkYXRhZmxvdyB3aXRoIHZpcnR1YWwgcmVnaXN0ZXJzLgorICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgICAgICAgICBtX2dwcnMucmV0YWluKHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVySlMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBEYXRhRm9ybWF0
IGZvcm1hdDsKKyAgICAgICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkK
KyAgICAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNDZWxsOworICAgICAgICAgICAg
ZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAg
ICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNCb29sZWFuOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG1fY29tcGls
ZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAg
IC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJl
IHN0b3JlZCBhbmQKKyAgICAgICAgLy8gYXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3Jl
IHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3ZQorICAgICAgICAvLyBrbm93IHdoZXJlIHRo
ZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKKyAgICAgICAg
Ly8gcmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAg
IAorICAgICAgICAvLyBBcyBmYXIgYXMgT1NSIGlzIGNvbmNlcm5lZCwgd2UncmUgb24gdGhlIGJ5
dGVjb2RlIGluZGV4IGNvcnJlc3BvbmRpbmcKKyAgICAgICAgLy8gdG8gdGhlICpuZXh0KiBpbnN0
cnVjdGlvbiwgc2luY2Ugd2UndmUgYWxyZWFkeSAiZXhlY3V0ZWQiIHRoZQorICAgICAgICAvLyBT
ZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIHNhbWUKKyAgICAgICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgorICAg
ICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpOworICAgICAgICBOb2RlJiBuZXh0Tm9kZSA9IG1faml0LmdyYXBoKClbbV9j
b21waWxlSW5kZXgrMV07CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGFzc2VydGlvbiB3aWxs
IGZhaWwgaWYgd2UgZXZlciBlbWl0IG11bHRpcGxlIFNldExvY2FsJ3MgZm9yCisgICAgICAgIC8v
IGEgc2luZ2xlIGJ5dGVjb2RlIGluc3RydWN0aW9uLiBUaGF0J3MgdW5saWtlbHkgdG8gaGFwcGVu
LiBCdXQgaWYKKyAgICAgICAgLy8gaXQgZG9lcywgdGhlIHNvbHV0aW9uIGlzIHRvIHRvIGhhdmUg
dGhpcyBwZXJmb3JtIGEgc2VhcmNoIHVudGlsCisgICAgICAgIC8vIGl0IGZpbmRzIGEgTm9kZSB3
aXRoIGEgZGlmZmVyZW50IGJ5dGVjb2RlIGluZGV4IGZyb20gdGhlIG9uZSB3ZSd2ZQorICAgICAg
ICAvLyBnb3QsIGFuZCB0byBhYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIFNldExvY2FsJ3MgYWxvbmcg
dGhlIHdheS4gT3IsCisgICAgICAgIC8vIGJldHRlciB5ZXQsIGhhbmRsZSBhbGwgb2YgdGhlIFNl
dExvY2FsJ3MgYXQgb25jZTogYWJzdHJhY3QgaW50ZXJwcmV0CisgICAgICAgIC8vIGFsbCBvZiB0
aGVtLCB0aGVuIGVtaXQgY29kZSBmb3IgYWxsIG9mIHRoZW0sIHdpdGggT1NSIGV4aXRpbmcgdG8K
KyAgICAgICAgLy8gdGhlIG5leHQgbm9uLVNldExvY2FsIGluc3RydWN0aW9uLiBOb3RlIHRoZSBz
cGVjaWFsIGNhc2UgZm9yIHdoZW4KKyAgICAgICAgLy8gYm90aCB0aGlzIFNldExvY2FsIGFuZCB0
aGUgbmV4dCBvcCBoYXZlIGEgYnl0ZWNvZGUgaW5kZXggb2YgMDsgdGhpcworICAgICAgICAvLyBv
Y2N1cnMgZm9yIFNldExvY2FsJ3MgZ2VuZXJhdGVkIGF0IHRoZSB0b3Agb2YgdGhlIGNvZGUgYmxv
Y2sgdG8KKyAgICAgICAgLy8gaW5pdGlhbGl6ZSBsb2NhbHMgdG8gdW5kZWZpbmVkLiBJZGVhbGx5
LCB3ZSdkIGhhdmUgYSB3YXkgb2YgbWFya2luZworICAgICAgICAvLyBpbiB0aGUgQ29kZU9yaWdp
biB0aGF0IGEgU2V0TG9jYWwgaXMgc3ludGhldGljLiBUaGlzIHdpbGwgbWFrZSB0aGUKKyAgICAg
ICAgLy8gYXNzZXJ0aW9uIG1vcmUgc2Vuc2libGUtbG9va2luZy4gV2Ugc2hvdWxkIHRoZW4gYWxz
byBhc3NlcnQgdGhhdAorICAgICAgICAvLyBzeW50aGV0aWMgU2V0TG9jYWwncyBkb24ndCBoYXZl
IHNwZWN1bGF0aW9uIGNoZWNrcywgc2luY2UgdGhleQorICAgICAgICAvLyBzaG91bGQgb25seSBi
ZSBkcm9wcGluZyB2YWx1ZXMgdGhhdCB3ZSBzdGF0aWNhbGx5IGtub3cgd2UgYXJlCisgICAgICAg
IC8vIGFsbG93ZWQgdG8gZHJvcCBpbnRvIHRoZSB2YXJpYWJsZXMuIERGR1Byb3BhZ2F0b3Igd2ls
bCBndWFyYW50ZWUKKyAgICAgICAgLy8gdGhpcywgc2luY2UgaXQgc2hvdWxkIGhhdmUgYXQgbGVh
c3QgYW4gYXBwcm94aW1hdGlvbiAoaWYgbm90CisgICAgICAgIC8vIGV4YWN0IGtub3dsZWRnZSkg
b2YgdGhlIHR5cGUgb2YgdGhlIFNldExvY2FsJ3MgY2hpbGQgbm9kZSwgYW5kCisgICAgICAgIC8v
IHNob3VsZCBtZXJnZSB0aGF0IGluZm9ybWF0aW9uIGludG8gdGhlIGxvY2FsIHRoYXQgaXMgYmVp
bmcgc2V0LgorICAgICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSICE9IG5leHROb2Rl
LmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpCisgICAgICAgICAgICAgICB8fCAoIW1fYnl0ZWNv
ZGVJbmRleEZvck9TUiAmJiAhbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsK
KyAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCk7CisgICAgICAgIAorICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlm
IChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgeworICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2Rl
LmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkp
KTsKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgfSBlbHNl
IGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CisgICAgICAgICAgICBT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZCBib29sZWFuKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoYm9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdw
cigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhl
IHZhbHVlIG9mCisgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3Rl
cnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICB2YWx1
ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlOjpm
b3JQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcDsg
aXQganVzdCBtYXJrcyB0aGUgZmFjdCB0aGF0IHRoZSBhcmd1bWVudCBpcyBiZWluZyB1c2VkLgor
ICAgICAgICAvLyBCdXQgaXQgbWF5IGJlIHByb2ZpdGFibGUgdG8gdXNlIHRoaXMgYXMgYSBob29r
IHRvIHJ1biBzcGVjdWxhdGlvbiBjaGVja3MKKyAgICAgICAgLy8gb24gYXJndW1lbnRzLCB0aGVy
ZWJ5IGFsbG93aW5nIHVzIHRvIHRyaXZpYWxseSBlbGltaW5hdGUgc3VjaCBjaGVja3MgaWYKKyAg
ICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIG5vdCB1c2VkLgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKKworICAgICAgICAgICAgYml0T3Aob3As
IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CisKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CisKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxk
MigpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7
CisKKyAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJlZzIgPSBvcDIuZ3ByKCk7CisgICAgICAgICAgICBiaXRPcChvcCwgcmVnMSwgcmVnMiwg
cmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
Qml0UlNoaWZ0OgorICAgIGNhc2UgQml0TFNoaWZ0OgorICAgIGNhc2UgQml0VVJTaGlmdDoKKyAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworCisgICAgICAgICAgICBzaGlm
dE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYg
MHgxZiwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IERvIG5vdCBhbGxvdyBzaGlmdCBhbW91bnQgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LCBNYWNy
b0Fzc2VtYmxlciBkb2VzIG5vdCBwZXJtaXQgdGhpcy4KKyAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKworICAgICAgICAgICAgR1BSUmVnIHJl
ZzEgPSBvcDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKKyAg
ICAgICAgICAgIHNoaWZ0T3Aob3AsIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CisKKyAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CisgICAg
ICAgIGlmICghbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgc29tZXRpbWVzIHByb2R1Y2VzIGRv
dWJsZXMuIFNvIHByb2R1Y2UgYSBkb3VibGUgZXZlcnkKKyAgICAgICAgICAgIC8vIHRpbWUuIFRo
aXMgYXQgbGVhc3QgYWxsb3dzIHN1YnNlcXVlbnQgY29kZSB0byBub3QgaGF2ZSB3ZWlyZCBjb25k
aXRpb25hbHMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IG9wMS5ncHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyBvdXRwdXRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBv
dXRwdXRGUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBw
b3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1
YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAgICAgbV9qaXQuYWRkRG91
YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBvdXRwdXRGUFIp
OworICAgICAgICAgICAgcG9zaXRpdmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBkb3VibGVSZXN1bHQob3V0cHV0RlBSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworCisgICAgICAg
IC8vIFRlc3QgdGhlIG9wZXJhbmQgaXMgcG9zaXRpdmUuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIFRy
dXN0ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgsIG9wMS5mb3JtYXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBWYWx1ZVRvSW50MzI6IHsKKyAgICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVn
ZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4K
KyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5vZGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGROb3RTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICAvLyBEbyBpdCB0aGUg
c2FmZSB3YXkuCisgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBWYWx1ZVRvTnVtYmVyOiB7CisgICAgICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCBy
ZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICBtX2ppdC5t
b3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIFZhbHVlVG9Eb3VibGU6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCks
IHJlc3VsdC5mcHIoKSk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBWYWx1ZUFkZDoK
KyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AyLmdwcigpLCByZXN1bHQuZ3By
KCkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0xKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3cs
IG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOworCisgICAgICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDIoKSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihu
b2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
b3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQz
MihJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNy
b0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIo
KSkpOworCisgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxLCBvcDIpOworCisgICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIyID0gb3AyLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IGdwclJlc3VsdCA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAg
ICAgICAgICAgIGlmIChncHIxID09IGdwclJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYWRkMzIoZ3ByMiwgZ3ByUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShncHIyLCBncHJSZXN1bHQpOworICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihncHIxLCBncHJSZXN1bHQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgY2hlY2sgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGdw
cjEsIGdwcjIsIGdwclJlc3VsdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQs
IGdwcjIpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhjaGVjaywgU3BlY3VsYXRpb25SZWNv
dmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgICAgICBtX2pp
dC5hZGREb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChvcCA9
PSBWYWx1ZUFkZCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgICAgICAKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk5v
dE51bWJlcihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdC5ncHIoKSwgb3AxR1BSLCBvcDJHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkLCBy
ZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3AyR1BSKTsKKyAgICAgICAgCisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbnQz
Ml90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgICAgICAgICAgaWYg
KG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKworICAgICAgICAgICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgICAgICBpZiAobm9kZUNh
blRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hTdWIzMihNYWNy
b0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkp
KTsKKworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKworICAgICAgICBGUFJSZWcgcmVnMSA9
IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgIG1f
aml0LnN1YkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOworCisgICAgICAgIGRvdWJs
ZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgICAgICBHUFJSZWcgcmVnMSA9
IG9wMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZWcyID0gb3AyLmdwcigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBXaGF0IGlzIHVuZm9ydHVuYXRlIGlzIHRoYXQgd2UgY2Fu
bm90IHRha2UgYWR2YW50YWdlIG9mIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoKQorICAgICAgICAg
ICAgLy8gaGVyZS4gQSBtdWx0aXBseSBvbiBpbnRlZ2VycyBwZXJmb3JtZWQgaW4gdGhlIGRvdWJs
ZSBkb21haW4gYW5kIHRoZW4gdHJ1bmNhdGVkIHRvCisgICAgICAgICAgICAvLyBhbiBpbnRlZ2Vy
IHdpbGwgZ2l2ZSBhIGRpZmZlcmVudCByZXN1bHQgdGhhbiBhIG11bHRpcGx5IHBlcmZvcm1lZCBp
biB0aGUgaW50ZWdlcgorICAgICAgICAgICAgLy8gZG9tYWluIGFuZCB0aGVuIHRydW5jYXRlZCwg
aWYgdGhlIGludGVnZXIgZG9tYWluIHJlc3VsdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGluCisgICAg
ICAgICAgICAvLyBzb21ldGhpbmcgYmlnZ2VyIHRoYW4gd2hhdCBhIDMyLWJpdCBpbnRlZ2VyIGNh
biBob2xkLiBKYXZhU2NyaXB0IG1hbmRhdGVzIHRoYXQKKyAgICAgICAgICAgIC8vIHRoZSBzZW1h
bnRpY3MgYXJlIGFsd2F5cyBhcyBpZiB0aGUgbXVsdGlwbHkgaGFkIGJlZW4gcGVyZm9ybWVkIGlu
IHRoZSBkb3VibGUKKyAgICAgICAgICAgIC8vIGRvbWFpbi4KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgemVybywgaWYgdGhlIHVzZXJzIG9mIHRoaXMg
bm9kZSBjYXJlIGFib3V0IHN1Y2ggdGhpbmdzLgorICAgICAgICAgICAgaWYgKCFub2RlQ2FuSWdu
b3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3Rl
ZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKKworICAg
ICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIu
ZnByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBcml0
aERpdjogeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
LCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgZWF4KHRo
aXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhp
cywgWDg2UmVnaXN0ZXJzOjplZHgpOworICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdDMyKEpJVENv
bXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYg
dGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3
ZSdyZSBub3QgYWJvdXQKKyAgICAgICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4K
KyAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbnVtZXJh
dG9yTm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
b3AxR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgICAgICAgICBudW1lcmF0b3JOb25aZXJvLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHRlbXAyID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgICAgIGlmIChvcDJHUFIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwgb3AyR1BS
ID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7CisgICAgICAgICAgICAgICAgdGVtcDIgPSBhbGxvY2F0
ZSgpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCB0ZW1wMik7CisgICAgICAg
ICAgICAgICAgb3AyR1BSID0gdGVtcDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCBlYXguZ3ByKCkpOworICAgICAgICAgICAgbV9q
aXQuYXNzZW1ibGVyKCkuY2RxKCk7CisgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2
bF9yKG9wMkdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhl
cmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBiZSBvYmxp
Z2F0ZWQgdG8KKyAgICAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGluc3RlYWQu
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21w
aWxlcjo6Tm9uWmVybywgZWR4LmdwcigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQoZWF4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CisKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQ
UlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVn
MiwgcmVzdWx0LmZwcigpKTsKKworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJpdGhN
b2Q6IHsKKyAgICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEo
KSkgfHwgc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMigpKQorICAgICAgICAg
ICAgfHwgIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEu
ZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KGZtb2QsIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
ZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICAgICAgR1BSUmVnIG9wMUdwciA9IG9w
MS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG9wMkdwciA9IG9wMi5ncHIoKTsKKworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3Ay
R3ByKSk7CisKKyAgICAgICAgR1BSUmVnIHRlbXAyID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
aWYgKG9wMkdwciA9PSBYODZSZWdpc3RlcnM6OmVheCB8fCBvcDJHcHIgPT0gWDg2UmVnaXN0ZXJz
OjplZHgpIHsKKyAgICAgICAgICAgIHRlbXAyID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUob3AyR3ByLCB0ZW1wMik7CisgICAgICAgICAgICBvcDJHcHIgPSB0ZW1wMjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1faml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOworICAgICAg
ICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsKKyAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRp
dmxfcihvcDJHcHIpOworCisgICAgICAgIGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgdW5sb2NrKHRlbXAyKTsKKworICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgQXJpdGhBYnM6IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZS5jaGlsZDEoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFn
cygpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEp
OworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgICAgIG1faml0LnJzaGlmdDMyKHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgbV9q
aXQuYWRkMzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIG1faml0
LnhvcjMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0Lmdw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpKSk7CisgICAgICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2
ZVplcm9Db25zdGFudCA9IC0wLjA7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KCZuZWdhdGl2ZVplcm9Db25zdGFudCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgbV9qaXQuYW5k
bm90RG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgQXJpdGhNaW46CisgICAgY2FzZSBBcml0aE1heDogeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigp
KSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3Ax
TGVzcyA9IG1faml0LmJyYW5jaDMyKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDEuZ3ByKCksIG9wMi5ncHIo
KSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgIGlmIChvcDEuZ3ByKCkgIT0gcmVzdWx0LmdwcigpKSB7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAg
ICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9q
aXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09
IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBvcDIgaXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlz
IE5hTgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNo
RG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
IDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7
CisgICAgICAgIAorICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGlj
aCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAg
IC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KKyAgICAgICAgbV9qaXQu
YWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICBk
b25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAKKyAgICAgICAgb3AyTGVzcy5saW5r
KCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigpLCByZXN1bHQuZnBy
KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG9wMS5mcHIoKSAhPSByZXN1bHQuZnByKCkpIHsK
KyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZURv
dWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFy
aXRoU3FydDogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAg
ICAgICAKKyAgICAgICAgbV9qaXQuc3FydERvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgIAorICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9naWNhbE5vdDogewor
ICAgICAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1f
aml0LmdldFByZWRpY3Rpb24obm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChpc0Jvb2xlYW5Q
cmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8ICFwcmVkaWN0aW9uKSB7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7IC8vIEZJWE1FOiBXZSBjb3VsZCByZXVzZSwgYnV0IG9uIHNw
ZWN1bGF0aW9uIGZhaWwgd291bGQgbmVlZCByZWNvdmVyeSB0byByZXN0b3JlIHRhZyAoYWtpbiB0
byBhZGQpLgorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5v
blplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpKTsKKyAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhl
cmUuCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG5vblNwZWN1bGF0aXZlTG9naWNhbE5vdChub2RlKTsKKyAgICAg
ICAgCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAg
ICAgIGlmIChjb21wYXJlKG5vZGUsIEpJVENvbXBpbGVyOjpMZXNzVGhhbiwgSklUQ29tcGlsZXI6
OkRvdWJsZUxlc3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVzcykpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBp
ZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6TGVzc1RoYW5PckVxdWFsLCBKSVRDb21waWxl
cjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVy
OgorICAgICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6R3JlYXRlclRoYW4sIEpJ
VENvbXBpbGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKKyAgICAgICAgaWYgKGNvbXBhcmUobm9kZSwgSklUQ29tcGlsZXI6OkdyZWF0ZXJU
aGFuT3JFcXVhbCwgSklUQ29tcGlsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXJFcSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGlmIChpc051bGxDb25zdGFudChub2Rl
LmNoaWxkMSgpKSkgeworICAgICAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwo
bm9kZSwgbm9kZS5jaGlsZDIoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUuY2hp
bGQyKCkpKSB7CisgICAgICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2Rl
LCBub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6
RXF1YWwsIEpJVENvbXBpbGVyOjpEb3VibGVFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUVxKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKKyAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRCeVZhbDogeworICAg
ICAgICBBU1NFUlQobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuIFdlIGhhdmVuJ3QgeWV0IGNoZWNrZWQgdGhpcyBp
cyBhIEpTQXJyYXksIHNvIHRoaXMgaXMgb25seSBzYWZlIGlmCisgICAgICAgIC8vIGFuIGFjY2Vz
cyB3aXRoIG9mZnNldCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkgaXMgdmFsaWQgZm9yIGFsbCBK
U0NlbGxzIQorICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworCisgICAgICAg
IC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29u
dGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCisgICAgICAgIC8vIElm
IHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lw
IHRoZSBjaGVjay4KKyAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBGSVhNRTog
SW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vzc2VzIHRvIHRo
ZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVscCB0byBjYWNoZQorICAgICAgICAvLyB0aGUgc3RvcmFn
ZSBwb2ludGVyIC0gZXNwZWNpYWxseSBpZiB0aGVyZSBoYXBwZW5zIHRvIGJlIGFub3RoZXIgcmVn
aXN0ZXIgZnJlZSByaWdodCBub3cuIElmIHdlIGRvIHNvLAorICAgICAgICAvLyB0aGVuIHdlJ2xs
IG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgdGVtcG9yYXJ5IGZvciByZXN1bHQuCisgICAgICAgIEdQ
UlRlbXBvcmFyeSYgcmVzdWx0ID0gc3RvcmFnZTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBQdXRCeVZhbDogeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2
YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgorICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDMoKSwgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOworCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVk
IHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCisgICAgICAgIC8vIElmIHdlIGhh
dmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBj
aGVjay4KKyAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworCisgICAg
ICAgIGJhc2UudXNlKCk7CisgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICB2YWx1ZS51
c2UoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdpdGhpbkFycmF5
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKKworICAgICAgICAvLyBDb2RlIHRvIGhhbmRsZSBwdXQgYmV5b25kIGFycmF5
IGJvdW5kcy4KKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaFJlZyk7Cisg
ICAgICAgIHNldHVwU3R1YkFyZ3VtZW50cyhiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcp
OworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHMpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2hSZWcpOwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB3YXNCZXlvbmRBcnJheUJvdW5kcyA9IG1faml0Lmp1
bXAoKTsKKworICAgICAgICB3aXRoaW5BcnJheUJvdW5kcy5saW5rKCZtX2ppdCk7CisKKyAgICAg
ICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdlLgorICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHNjcmF0Y2hSZWc7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisKKyAg
ICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVu
dCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RI
b2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSkpOworICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bnVtVmFsdWVzSW5WZWN0b3IpKSk7CisKKyAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBh
IGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAg
bV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworCisgICAgICAgIGxl
bmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgbm90SG9sZVZhbHVl
LmxpbmsoJm1faml0KTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5
LgorICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKworICAgICAgICB3
YXNCZXlvbmRBcnJheUJvdW5kcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlUmVn
ID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OworCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5j
aGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOworCisg
ICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzY3JhdGNoUmVnOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwor
CisgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVSZWcg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
CisKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIERGRzo6SnVtcDogeworICAgICAgICBCbG9ja0luZGV4IHRha2VuID0g
bV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOworICAgICAgICBpZiAodGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKKyAgICAg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKKyAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJyYW5j
aDoKKyAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcCh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBo
KCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKKyAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24g
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAgICAgICAgICAgY29u
ZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87CisgICAgICAgICAgICAgICAgQmxvY2tJbmRl
eCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAg
ICAgICAgICAgIG5vdFRha2VuID0gdG1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgb3AuZ3By
KCkpLCB0YWtlbik7CisgICAgICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkK
KyAgICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKworICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRl
Y29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5n
cmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDsKKwor
ICAgICAgICAgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgICAg
ICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CisgICAgICAgICAgICAgICAgQmxv
Y2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwor
ICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3Au
Z3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIHRha2VuKTsKKworICAgICAg
ICAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCisgICAgICAgICAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBlbWl0QnJhbmNoKG5vZGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
UmV0dXJuOiB7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciAhPSBH
UFJJbmZvOjpyZWdUMSk7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisKKyNpZiBFTkFCTEUoREZHX1NVQ0NF
U1NfU1RBVFMpCisgICAgICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigiU3BlY3Vs
YXRpdmVKSVQiKTsKKyAgICAgICAgbV9qaXQuZW1pdENvdW50KGNvdW50ZXIpOworI2VuZGlmCisK
KyAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIuCisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAvLyBH
cmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICAgICAgbV9qaXQuZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAg
ICAgICAvLyBSZXN0b3JlIG91ciBjYWxsZXIncyAiciIuCisgICAgICAgIG1faml0LmVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgLy8gUmV0dXJuLgorICAgICAgICBtX2ppdC5y
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7CisgICAgICAg
IG1faml0LnJldCgpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgVGhyb3c6CisgICAg
Y2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOiB7CisgICAgICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRo
cm93IHN0YXRlbWVudHMgYXJlIHJhcmUgYW5kIGFyZSBpbnRlbmRlZCB0byBleGl0IHRoZSBjb2Rl
IGJsb2NrCisgICAgICAgIC8vIGFueXdheSwgc28gd2UganVzdCBPU1IgYmFjayB0byB0aGUgb2xk
IEpJVCBmb3Igbm93LgorICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgVG9QcmltaXRpdmU6IHsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgICAgIC8vIEl0J3MgcmVhbGx5IHByb2ZpdGFibGUgdG8gc3BlY3VsYXRlIGludGVnZXIs
IHNpbmNlIGl0J3MgcmVhbGx5IGNoZWFwLAorICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgZG9u
J3QgaGF2ZSB0byBkbyBhbnkgcmVhbCB3b3JrLCBhbmQgd2UgZW1pdCBhIGxvdCBsZXNzIGNvZGUu
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBpZiAob3AxLmZvcm1hdCgpID09IERhdGFGb3Jt
YXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmlu
ZyBzcGVjdWxhdGlvbiBoZXJlLgorICAgICAgICAKKyAgICAgICAgYm9vbCB3YXNQcmltaXRpdmUg
PSBpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duQm9vbGVhbihub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG9wMS51c2UoKTsK
KyAgICAgICAgCisgICAgICAgIGlmICh3YXNQcmltaXRpdmUpCisgICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgYWxyZWFkeVByaW1pdGl2ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRy
KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb25Ub1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU3RyQ2F0
OgorICAgIGNhc2UgTmV3QXJyYXk6IHsKKyAgICAgICAgLy8gV2UgcmVhbGx5IGRvbid0IHdhbnQg
dG8gZ3JvdyB0aGUgcmVnaXN0ZXIgZmlsZSBqdXN0IHRvIGRvIGEgU3RyQ2F0IG9yIE5ld0FycmF5
LgorICAgICAgICAvLyBTYXkgd2UgaGF2ZSA1MCBmdW5jdGlvbnMgb24gdGhlIHN0YWNrIHRoYXQg
YWxsIGhhdmUgYSBTdHJDYXQgaW4gdGhlbSB0aGF0IGhhcworICAgICAgICAvLyB1cHdhcmRzIG9m
IDEwIG9wZXJhbmRzLiBJbiB0aGUgREZHIHRoaXMgd291bGQgbWVhbiB0aGF0IGVhY2ggb25lIGdl
dHMKKyAgICAgICAgLy8gc29tZSByYW5kb20gdmlydHVhbCByZWdpc3RlciwgYW5kIHRoZW4gdG8g
ZG8gdGhlIFN0ckNhdCB3ZSdkIG5lZWQgYSBzZWNvbmQKKyAgICAgICAgLy8gc3BhbiBvZiAxMCBv
cGVyYW5kcyBqdXN0IHRvIGhhdmUgc29tZXdoZXJlIHRvIGNvcHkgdGhlIDEwIG9wZXJhbmRzIHRv
LCB3aGVyZQorICAgICAgICAvLyB0aGV5J2QgYmUgY29udGlndW91cyBhbmQgd2UgY291bGQgZWFz
aWx5IHRlbGwgdGhlIEMgY29kZSBob3cgdG8gZmluZCB0aGVtLgorICAgICAgICAvLyBVZ2x5ISBT
byBpbnN0ZWFkIHdlIHVzZSB0aGUgc2NyYXRjaEJ1ZmZlciBpbmZyYXN0cnVjdHVyZSBpbiBKU0ds
b2JhbERhdGEuIFRoYXQKKyAgICAgICAgLy8gd2F5LCB0aG9zZSA1MCBmdW5jdGlvbnMgd2lsbCBz
aGFyZSB0aGUgc2FtZSBzY3JhdGNoQnVmZmVyIGZvciBvZmZsb2FkaW5nIHRoZWlyCisgICAgICAg
IC8vIFN0ckNhdCBvcGVyYW5kcy4gSXQncyBhYm91dCBhcyBnb29kIGFzIHdlIGNhbiBkbywgdW5s
ZXNzIHdlIHN0YXJ0IGRvaW5nCisgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgY29hbGVzY2lu
ZyB0byBlbnN1cmUgdGhhdCBvcGVyYW5kcyB0byBTdHJDYXQgZ2V0IHNwaWxsZWQKKyAgICAgICAg
Ly8gaW4gZXhhY3RseSB0aGUgcGxhY2Ugd2hlcmUgU3RyQ2F0IHdhbnRzIHRoZW0sIG9yIGVsc2Ug
aGF2ZSB0aGUgU3RyQ2F0CisgICAgICAgIC8vIHJlZmVyIHRvIHRob3NlIG9wZXJhbmRzJyBTZXRM
b2NhbCBpbnN0cnVjdGlvbnMgdG8gZm9yY2UgdGhlbSB0byBzcGlsbCBpbgorICAgICAgICAvLyB0
aGUgcmlnaHQgcGxhY2UuIEJhc2ljYWxseSwgYW55IHdheSB5b3UgY3V0IGl0LCB0aGUgY3VycmVu
dCBhcHByb2FjaAorICAgICAgICAvLyBwcm9iYWJseSBoYXMgdGhlIGJlc3QgYmFsYW5jZSBvZiBw
ZXJmb3JtYW5jZSBhbmQgc2Vuc2liaWxpdHkgaW4gdGhlIHNlbnNlCisgICAgICAgIC8vIHRoYXQg
aXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIERGRyBKSVQganVzdCB0
byBtYWtlIFN0ckNhdAorICAgICAgICAvLyBmYXN0IGFuZCBwcmV0dHkuCisgICAgICAgIAorICAg
ICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUq
PihtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiBub2RlLm51bUNoaWxkcmVuKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZElkeCkgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlz
LCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBvcGVy
YW5kSWR4XSk7CisgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOworICAg
ICAgICAgICAgb3BlcmFuZC51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIob3BHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAKKyAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3AgPT0gU3Ry
Q2F0ID8gb3BlcmF0aW9uU3RyQ2F0IDogb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwg
YnVmZmVyLCBub2RlLm51bUNoaWxkcmVuKCkpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgTmV3QXJyYXlC
dWZmZXI6IHsKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgR1BSUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgbm9kZS5zdGFydENvbnN0YW50KCksIG5vZGUubnVt
Q29uc3RhbnRzKCkpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIE5ld1JlZ2V4cDogeworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdSZWdleHAsIHJlc3VsdC5ncHIoKSwgbV9qaXQuY29kZUJsb2NrKCktPnJlZ2V4cChu
b2RlLnJlZ2V4cEluZGV4KCkpKTsKKyAgICAgICAgCisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVz
cyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKworICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1
ZS5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBzbyBt
dWNoIHByb2ZpdCB0byBzcGVjdWxhdGUgaGVyZS4gVGhlIG9ubHkgdGhpbmdzIHdlCisgICAgICAg
IC8vIHNwZWN1bGF0ZSBvbiBhcmUgKDEpIHRoYXQgaXQncyBhIGNlbGwsIHNpbmNlIHRoYXQgZWxp
bWluYXRlcyBjZWxsIGNoZWNrcworICAgICAgICAvLyBsYXRlciBpZiB0aGUgcHJvdG8gaXMgcmV1
c2VkLCBhbmQgKDIpIGlmIHdlIGhhdmUgYSBGaW5hbE9iamVjdCBwcmVkaWN0aW9uCisgICAgICAg
IC8vIHRoZW4gd2Ugc3BlY3VsYXRlIGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBp
ZiBpdCBpc24ndCAoc2luY2UKKyAgICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5n
IHNsb3cgcGF0aCBhIGxvdCkuCisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBwcm90byh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIAor
ICAgICAgICBHUFJSZWcgcHJvdG9HUFIgPSBwcm90by5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAKKyAgICAgICAgcHJvdG8udXNlKCk7CisgICAgICAgIAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIAorICAgICAg
ICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3
ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlCisgICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2Jq
ZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQorICAg
ICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBMb2FkIHRoZSBpbmhlcml0
b3JJRCAodGhlIFN0cnVjdHVyZSB0aGF0IG9iamVjdHMgd2hvIGhhdmUgcHJvdG9HUFIgYXMgdGhl
IHByb3RvdHlwZQorICAgICAgICAvLyB1c2UgdG8gcmVmZXIgdG8gdGhhdCBwcm90b3R5cGUpLiBJ
ZiB0aGUgaW5oZXJpdG9ySUQgaXMgbm90IHNldCwgZ28gdG8gc2xvdyBwYXRoLgorICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BS
KSk7CisgICAgICAgIAorICAgICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAg
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUocHJvdG9HUFIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ3JlYXRlVGhpcyk7CisgICAgICAgIG1faml0Lm1v
dmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIE5ld09iamVjdDogeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgCisgICAgICAgIGVtaXRBbGxvY2F0ZUpT
RmluYWxPYmplY3QoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgc2xvd1BhdGgubGlu
aygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb25OZXdPYmplY3QpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgCisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgR2V0Q2FsbGVlOiB7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OkNh
bGxlZSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEdldFNj
b3BlQ2hhaW46IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluKSksIHJlc3VsdEdQUik7CisgICAgICAgIGJvb2wgY2hlY2tU
b3BMZXZlbCA9IG1faml0LmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAm
JiBtX2ppdC5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgICAgICBpbnQg
c2tpcCA9IG5vZGUuc2NvcGVDaGFpbkRlcHRoKCk7CisgICAgICAgIEFTU0VSVChza2lwIHx8ICFj
aGVja1RvcExldmVsKTsKKyAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Cisg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsKKyAgICAg
ICAgICAgIGlmIChjaGVja1RvcExldmVsKQorICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RD
cmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihtX2ppdC5jb2RlQmxv
Y2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hh
aW5Ob2RlLCBuZXh0KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3Jl
YXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHNraXAtLSkKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZXN1bHRHUFIpOwor
CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldFNjb3BlZFZhcjogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBzY29wZUNoYWluKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHNj
b3BlQ2hhaW4uZ3ByKCksIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGVDaGFpbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoUmVnaXN0ZXIuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3Moc2NvcGVDaGFpbi5ncHIoKSwgSlNWYXJpYWJsZU9iamVjdDo6
b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWUuZ3ByKCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG5vZGUudmFyTnVtYmVy
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHdyaXRlQmFycmllcihzY29wZUNoYWlu
LmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFi
bGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIAorICAgICAgICBpZiAo
cmVzdWx0R1BSID09IGJhc2VHUFIpCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gdHJ5QWxsb2Nh
dGUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlc3VsdEdQUjsK
KyAgICAgICAgCisgICAgICAgIGJhc2UudXNlKCk7CisKKyAgICAgICAgY2FjaGVkR2V0QnlJZChi
YXNlR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpKTsK
KworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgR2V0QXJyYXlMZW5ndGg6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
aXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgCisgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpKSk7Cisg
ICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDog
eworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgU3RvcmFnZUFjY2Vz
c0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0TWV0aG9kOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CisKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgCisgICAgICAgIGlm
IChyZXN1bHRHUFIgPT0gYmFzZUdQUikKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSB0cnlBbGxv
Y2F0ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVzdWx0R1BS
OworICAgICAgICAKKyAgICAgICAgYmFzZS51c2UoKTsKKworICAgICAgICBjYWNoZWRHZXRNZXRo
b2QoYmFzZUdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBub2RlLmlkZW50aWZpZXJOdW1iZXIo
KSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgQ2hlY2tNZXRob2Q6IHsKKyAgICAgICAgTWV0aG9kQ2hlY2tEYXRhJiBt
ZXRob2RDaGVja0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0
aG9kQ2hlY2tEYXRhSW5kZXgoKV07CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsgLy8gdGhpcyBuZWVkcyB0byBiZSBhIHNlcGFyYXRlIHJlZ2lzdGVyLCB1bmZv
cnR1bmF0ZWx5LgorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7Cisg
ICAgICAgIGlmIChtZXRob2RDaGVja0RhdGEucHJvdG90eXBlICE9IG1faml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpIHsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlw
ZS0+c3RydWN0dXJlQWRkcmVzcygpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRo
b2RDaGVja0RhdGEucHJvdG90eXBlU3RydWN0dXJlKSkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKyAgICAgICAgaW5pdENvbnN0YW50SW5mbyhtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgUHV0QnlJZDog
eworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIAorICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgIAorICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICB2YWx1ZS51c2UoKTsKKworICAgICAg
ICBjYWNoZWRQdXRCeUlkKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBzY3JhdGNo
R1BSLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKKyAgICAgICAgCisgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKKyAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAK
KyAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgY2Fj
aGVkUHV0QnlJZChiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwgc2NyYXRjaEdQUiwg
bm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CisKKyAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CisgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKGdsb2JhbE9iamVjdC0+YWRkcmVzc09mUmVnaXN0ZXJzKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3JHbG9iYWxWYXIocmVz
dWx0LmdwcigpLCBub2RlLnZhck51bWJlcigpKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGds
b2JhbE9iamVjdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Cisg
ICAgICAgIAorICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0UmVnID0gZ2xvYmFsT2JqZWN0Lmdw
cigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RSZWcpOworCisgICAgICAgIHdyaXRl
QmFycmllcihtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLmdwcigpLCBu
b2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7
CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhnbG9iYWxP
YmplY3RSZWcsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yR2xvYmFsVmFyKHNjcmF0Y2hSZWcsIG5vZGUudmFyTnVtYmVyKCkpKTsKKworICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0
dXJlKHRoaXMpOworCisgICAgICAgIC8vIFNwZWN1bGF0ZSB0aGF0IGJhc2UgJ0ltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UnLgorICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmUuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3Q4KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmUuZ3By
KCksIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOworCisgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBJbnN0YW5jZU9mOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICAvLyBCYXNlIHVudXNlZCBzaW5jZSB3ZSBzcGVjdWxh
dGUgZGVmYXVsdCBJbnN0YW5jZU9mIGJlaGF2aW91ciBpbiBDaGVja0hhc0luc3RhbmNlLgorICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm90b3R5cGUodGhpcywgbm9kZS5jaGlsZDMoKSk7
CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgR1BSUmVn
IHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm90b3R5cGVSZWcgPSBw
cm90b3R5cGUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvdHlwZSBpcyBhbiBvYmplY3QuCisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG90eXBlUmVnLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoSWZOb3RPYmplY3Qoc2NyYXRjaFJlZykpOworCisgICAgICAg
IC8vIEluaXRpYWxpemUgc2NyYXRjaFJlZyB3aXRoIHRoZSB2YWx1ZSBiZWluZyBjaGVja2VkLgor
ICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlUmVnLCBzY3JhdGNoUmVnKTsKKworICAgICAgICAvLyBX
YWxrIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgdGhlIHZhbHVlIChpbiBzY3JhdGNoUmVnKSwg
Y29tcGFyaW5nIHRvIHByb3RvdHlwZVJlZy4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGxvb3AoJm1faml0KTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJl
ZywgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKKyAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZywgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKS5saW5rVG8obG9vcCwgJm1faml0KTsKKworICAgICAgICAvLyBObyBt
YXRjaCAtIHJlc3VsdCBpcyBmYWxzZS4KKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBzY3Jh
dGNoUmVnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcHV0UmVzdWx0ID0gbV9qaXQu
anVtcCgpOworCisgICAgICAgIGlzSW5zdGFuY2UubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpKSwgc2NyYXRjaFJlZyk7CisKKyAgICAgICAgcHV0UmVzdWx0LmxpbmsoJm1f
aml0KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2NvbXBpbGVJbmRleCwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
UGhpOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIGNhc2UgQnJlYWtwb2lu
dDoKKyNpZiBFTkFCTEUoREVCVUdfV0lUSF9CUkVBS1BPSU5UKQorICAgICAgICBtX2ppdC5icmVh
a3BvaW50KCk7CisjZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3Ry
dWN0OgorICAgICAgICBlbWl0Q2FsbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFJlc29sdmU6IHsKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlLCBy
ZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBSZXNvbHZlQmFzZTogeworICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlLCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIo
bm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBSZXNvbHZlQmFzZVN0cmljdFB1dDogeworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJlc29sdmVCYXNlU3RyaWN0UHV0LCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBSZXNv
bHZlR2xvYmFsOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXNvbHZlSW5mbyh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gZ2xv
YmFsT2JqZWN0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzb2x2ZUluZm9HUFIgPSByZXNvbHZl
SW5mby5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZl
R2xvYmFsRGF0YVtub2RlLnJlc29sdmVHbG9iYWxEYXRhSW5kZXgoKV07CisgICAgICAgIEdsb2Jh
bFJlc29sdmVJbmZvKiByZXNvbHZlSW5mb0FkZHJlc3MgPSAmKG1faml0LmNvZGVCbG9jaygpLT5n
bG9iYWxSZXNvbHZlSW5mbyhkYXRhLnJlc29sdmVJbmZvSW5kZXgpKTsKKworICAgICAgICAvLyBD
aGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVjdAorICAgICAgICBtX2ppdC5tb3ZlKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSks
IGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIocmVzb2x2ZUluZm9BZGRyZXNzKSwgcmVzb2x2ZUluZm9HUFIpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIHN0cnVjdHVyZSkpLCByZXN1bHRHUFIpOworICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVzTWF0Y2ggPSBtX2ppdC5icmFuY2hQdHIo
SklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOworCisgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUocmVzb2x2
ZUluZm9HUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUoSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGRh
dGEuaWRlbnRpZmllck51bWJlcikpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJlc29sdmVHbG9iYWwpOworICAgICAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgd2FzU2xvdyA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICAvLyBGYXN0IGNhc2UKKyAgICAg
ICAgc3RydWN0dXJlc01hdGNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlBy
b3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoR2xvYmFsUmVz
b2x2ZUluZm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7CisgICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRD
b21waWxlcjo6U2NhbGVQdHIpLCByZXN1bHRHUFIpOworCisgICAgICAgIHdhc1Nsb3cubGluaygm
bV9qaXQpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRm9yY2VPU1JFeGl0OiB7Cisg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgor
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQor
ICAgICAgICB1c2UobV9jb21waWxlSW5kZXgpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTW92SGludChOb2RlJiBub2RlKQoreworICAgIEFTU0VSVChub2RlLm9wID09IFNldExv
Y2FsKTsKKyAgICAKKyAgICBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKG5vZGUuY2hpbGQxKCksIG5v
ZGUubG9jYWwoKSk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwoKTsKK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKK3sKKyAgICBB
U1NFUlQobV9jb21waWxlT2theSk7CisgICAgQVNTRVJUKG1fY29tcGlsZUluZGV4ID09IGJsb2Nr
LmJlZ2luKTsKKyAgICAKKyAgICBpZiAoYmxvY2suaXNPU1JUYXJnZXQpCisgICAgICAgIG1faml0
Lm5vdGljZU9TUkVudHJ5KGJsb2NrKTsKKyAgICAKKyAgICBtX2Jsb2NrSGVhZHNbbV9ibG9ja10g
PSBtX2ppdC5sYWJlbCgpOworI2lmIEVOQUJMRShERkdfSklUX0JSRUFLX09OX0VWRVJZX0JMT0NL
KQorICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorICAgIEFTU0VSVChtX2Fy
Z3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsK
KyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKG1f
aml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigp
KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay5t
X2xvY2Fsc0F0SGVhZC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJp
YWJsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
Lm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lz
dGVyRmlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFs
dWVTb3VyY2U6OmZvclByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBtX2xhc3RTZXRP
cGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2Rl
SW5kZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisKKyAg
ICBmb3IgKDsgbV9jb21waWxlSW5kZXggPCBibG9jay5lbmQ7ICsrbV9jb21waWxlSW5kZXgpIHsK
KyAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdOworICAg
ICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOworICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRp
dmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIs
IChpbnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1f
aml0LmRlYnVnT2Zmc2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBT
ZXRMb2NhbCkKKyAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2Rl
IEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgs
IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0KCkpOwor
I2VuZGlmCisjaWYgRU5BQkxFKERGR19KSVRfQlJFQUtfT05fRVZFUllfTk9ERSkKKyAgICAgICAg
ICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgICAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgICAgICAgICAgY29tcGlsZShub2RlKTsKKyAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkgeworICAgICAgICAgICAgICAgIG1fY29tcGlsZU9rYXkgPSB0cnVlOworICAg
ICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2suZW5kOworICAgICAgICAgICAgICAg
IGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAg
ICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkgeworICAgICAgICAgICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsK
KyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVzLCB2ciMlZCIsIGRhdGFGb3Jt
YXRUb1N0cmluZyhpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpLCAoaW50KW5vZGUudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIsICVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGluZm8uZnByKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIsICVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8uZ3ByKCkpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgIik7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKKyNl
bmRpZgorICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfVkVSQk9TRV9WQUxVRV9S
RUNPVkVSSUVTKQorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gLW1fYXJndW1lbnRzLnNpemUo
KSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgb3BlcmFuZCA8IC1SZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1
dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyAgICAgICAgCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiIDogIik7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBv
cGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJhbmQp
CisgICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVy
cik7CisjZW5kaWYKKyAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBpZiAo
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgIH0KK30KKworLy8gSWYgd2UgYXJlIG1ha2luZyB0eXBlIHByZWRpY3Rpb25zIGFib3V0IG91
ciBhcmd1bWVudHMgdGhlbgorLy8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZXkgYXJlIGNvcnJl
Y3Qgb24gZnVuY3Rpb24gZW50cnkuCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50
VHlwZXMoKQoreworICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOworICAgIG1fYnl0ZWNvZGVJ
bmRleEZvck9TUiA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRz
LnNpemUoKTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVl
SW5SZWdpc3RlckZpbGUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJ
blJlZ2lzdGVyRmlsZSk7CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2Rl
QmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzOyArK2kpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IChWaXJ0dWFsUmVnaXN0ZXIpKG1faml0LmNvZGVCbG9jaygpLT50
aGlzUmVnaXN0ZXIoKSArIGkpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUg
PSBtX2ppdC5ncmFwaCgpW21faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV1dLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIGVs
c2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CisgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7Cisg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIo
KSk7CisgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAu
Z3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQoreworICAgIGNo
ZWNrQXJndW1lbnRUeXBlcygpOworCisgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CisgICAg
Zm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgp
OyArK21fYmxvY2spCisgICAgICAgIGNvbXBpbGUoKm1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9i
bG9ja10pOworICAgIGxpbmtCcmFuY2hlcygpOworICAgIHJldHVybiB0cnVlOworfQorCitWYWx1
ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBW
YWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCit7CisgICAgc3dpdGNoICh2YWx1ZVNvdXJjZS5raW5k
KCkpIHsKKyAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6CisgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKyAgICAgICAgCisgICAgY2FzZSBJ
bnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFk
eUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKTsKKyAgICAgICAgCisgICAgY2FzZSBIYXZl
Tm9kZTogeworICAgICAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKSkpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQu
dmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKKyAgICAKKyAgICAg
ICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgp
XTsKKyAgICAgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAg
ICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2Ug
dGhpcyBub2RlLCBvciBvcGVyYW5kLAorICAgICAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVu
ZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgorICAgICAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9
CisgICAgCisgICAgICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbklu
Zm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICBpZiAoIWluZm9QdHItPmFs
aXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkp
IHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5v
ZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50LgorICAgICAgICAgICAgLy8g
VGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBWYWx1ZVRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVl
IGlzIGEgVmFsdWVUb051bWJlciBub2RlCisgICAgICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5z
IHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1l
ZCBhCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBU
aHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmlu
ZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRv
SW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRv
SW50MzIKKyAgICAgICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0
dGVyIGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0CisgICAgICAgICAgICAvLyAgICBt
ZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVt
YmVyIHdoaWxlCisgICAgICAgICAgICAvLyAgICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQg
dG8gSW50MzIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6
IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJl
cgorICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5pbmcgdXNlcyBhcmUgb25l
cyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisgICAgICAgICAgICAvLyAgICBy
YXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQgYmUgYSBV
SW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMg
c3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcgdXNlcyBvZgor
ICAgICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIg
aW50ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIp
IHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQx
KCk7CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07
CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZp
cnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAm
JiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBpZiAo
IWZvdW5kKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBO
b05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBO
b05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1
YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgp
OyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldOworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2Rl
SW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1
ZVRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5k
ZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4VG9Vc2U7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBO
b05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJl
ckluZGV4OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMkluZGV4ICE9IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJ
bmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJl
ckluZGV4OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZUluZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAm
bV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgICAgIGluZm9Q
dHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJ
bmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpj
b25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBBU1NFUlQo
aW5mb1B0ci0+YWxpdmUoKSk7CisKKyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3Rl
ckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3Jt
YXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0g
RGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52
aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFs
dWVSZWNvdmVyeSgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NjM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDE0ICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIkRG
R1NwZWN1bGF0aXZlSklULmgiCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSNpZiBVU0UoSlNWQUxV
RTY0KQogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCkKIHsKQEAgLTE0Myw3ICsxNDMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRl
Z2VyOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAg
Y2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQpAQCAtMTUyLDg2ICsxNTIsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRJCiAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiB9CiAKLSNpZm5kZWYgTkRFQlVH
Ci12b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGtpbmQoKSkgewotICAgIGNhc2UgU291cmNlTm90U2V0OgotICAgICAgICBmcHJpbnRmKG91dCwg
Ik5vdFNldCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6
Ci0gICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICJJbnQzMiIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhhdmVOb2RlOgotICAgICAgICBmcHJpbnRmKG91
dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNo
ICh0ZWNobmlxdWUoKSkgewotICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlOgotICAgICAg
ICBmcHJpbnRmKG91dCwgIi0iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbHJlYWR5SW5S
ZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgZnByaW50ZihvdXQsICIoaW50MzIp
Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgIGZwcmludGYob3V0
LCAiJSUlcyIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBmcHJpbnRmKG91dCwgImludDMyKCUl
JXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW5GUFI6Ci0gICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUkluZm86OmRlYnVnTmFt
ZShmcHIoKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgZnByaW50ZihvdXQsICJb
JXNdIiwgY29uc3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBEb250S25vdzoKLSAgICAgICAgZnByaW50ZihvdXQsICIhIik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYob3V0LCAiPyVkIiwgdGVjaG5pcXVlKCkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZW5kaWYKLQotT1NSRXhpdDo6T1NSRXhpdChNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVj
b3ZlcnlJbmRleCkKLSAgICA6IG1fY2hlY2soY2hlY2spCi0gICAgLCBtX25vZGVJbmRleChqaXQt
Pm1fY29tcGlsZUluZGV4KQotICAgICwgbV9ieXRlY29kZUluZGV4KGppdC0+bV9ieXRlY29kZUlu
ZGV4Rm9yT1NSKQotICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCi0gICAgLCBt
X2FyZ3VtZW50cyhqaXQtPm1fYXJndW1lbnRzLnNpemUoKSkKLSAgICAsIG1fdmFyaWFibGVzKGpp
dC0+bV92YXJpYWJsZXMuc2l6ZSgpKQotICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFz
dFNldE9wZXJhbmQpCi17Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpOwotICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKLSAgICAgICAg
bV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQt
Pm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7Ci0gICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7
IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQotICAgICAgICBtX3Zh
cmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV92
YXJpYWJsZXNbdmFyaWFibGVdKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgT1NSRXhpdDo6
ZHVtcChGSUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2Fy
Z3VtZW50c1thcmd1bWVudF0uZHVtcChvdXQpOwotICAgIGZwcmludGYob3V0LCAiIDogIik7Ci0g
ICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6
ZSgpOyArK3ZhcmlhYmxlKQotICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0uZHVtcChvdXQp
OwotfQotI2VuZGlmCi0KIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChO
b2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7CiAgICAgcmV0
dXJuIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4obm9kZUluZGV4LCByZXR1cm5Gb3Jt
YXQpOwpAQCAtNDI4LDcgKzM0OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQotICAgICAgICAKKwogICAgIGNhc2UgRGF0YUZv
cm1hdFN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTUx
MCw0MCArNDMwLDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAog
ICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2Rl
SW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKLXsKLSAg
ICBOb2RlJiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKVticmFuY2hOb2RlSW5kZXhdOwotICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5j
aE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLQotICAgIC8vIFRoZSBicmFuY2ggaW5z
dHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgotICAgIC8vIElmIHRha2Vu
IGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2gg
Y29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAgaWYgKHRha2VuID09IChtX2Js
b2NrICsgMSkpIHsKLSAgICAgICAgY29uZGl0aW9uID0gSklUQ29tcGlsZXI6OmludmVydChjb25k
aXRpb24pOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwotICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOwotICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICB9Ci0KLSAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgYWRkQnJhbmNoKG1f
aml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6OkltbTMyKGltbSksIG9wMi5ncHIo
KSksIHRha2VuKTsKLSAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigp
KSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9w
MS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtlbik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIo
KSwgb3AyLmdwcigpKSwgdGFrZW4pOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBmYWxsIHRo
cm91Z2gsIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGp1bXAuCi0gICAgaWYgKG5vdFRha2VuICE9ICht
X2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsK
LX0KLQogSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRUb0RvdWJsZShH
UFJSZWcgdmFsdWUsIEZQUlJlZyByZXN1bHQsIEdQUlJlZyB0bXApCiB7CiAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHZhbHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwpAQCAtNTY0
LDUwICs0NTAsNiBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAg
ICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgs
IEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQotewotICAgIE5vZGUmIGJy
YW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJbmRleF07Ci0gICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5j
aE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
bV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RU
YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIAotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hE
b3VibGUoY29uZGl0aW9uLCBvcDEuZnByKCksIG9wMi5mcHIoKSksIHRha2VuKTsKLSAgICAKLSAg
ICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0
Lmp1bXAoKSwgbm90VGFrZW4pOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVl
cEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4
LCB2b2lkKiB2cHRyKQotewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2Jy
YW5jaE5vZGVJbmRleF07Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9B
c3NlbWJsZXI6OkVxdWFsOwotICAgIAotICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7
Ci0gICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDsKLSAgICAgICAg
QmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKLSAgICAg
ICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgfQotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKLSAgICAKLSAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwot
ICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7Ci0gICAgCi0gICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICAKLSAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
UHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7Ci0gICAgaWYgKG5vdFRha2Vu
ICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRh
a2VuKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5v
ZGUmIG5vZGUsIHZvaWQqIHZwdHIpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwpAQCAtNjk1LDM2ICs1MzcsNiBAQCBib29sIFNwZWN1bGF0aXZl
SklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9i
amVjdChUIHN0cnVjdHVyZSwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgpCi17Ci0gICAgTWFya2VkU3BhY2U6OlNp
emVDbGFzcyogc2l6ZUNsYXNzID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5zaXplQ2xhc3NG
b3JPYmplY3Qoc2l6ZW9mKEpTRmluYWxPYmplY3QpKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkUHRy
KCZzaXplQ2xhc3MtPmZpcnN0RnJlZUNlbGwsIHJlc3VsdEdQUik7Ci0gICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikp
OwotICAgIAotICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hh
dCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKLSAgICAvLyBpdCdzIHN0aWxsIG9uIHRo
ZSBHQydzIGZyZWUgbGlzdC4KLSAgICAKLSAgICAvLyBEaXRjaCB0aGUgc3RydWN0dXJlIGJ5IHBs
YWNpbmcgaXQgaW50byB0aGUgc3RydWN0dXJlIHNsb3QsIHNvIHRoYXQgd2UgY2FuIHJldXNlCi0g
ICAgLy8gc2NyYXRjaEdQUi4KLSAgICBtX2ppdC5zdG9yZVB0cihzdHJ1Y3R1cmUsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OnN0cnVjdHVyZU9mZnNldCgpKSk7
Ci0gICAgCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBzY3JhdGNoR1BSIGJhY2ssIHJlbW92ZSB0
aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUiwgJnNpemVDbGFzcy0+Zmlyc3RGcmVlQ2VsbCk7Ci0gICAgCi0gICAgLy8g
SW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgdnRhYmxlCi0gICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0
VlB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUikpOwotICAgIAotICAgIC8v
IEluaXRpYWxpemUgdGhlIG9iamVjdCdzIGluaGVyaXRvcklELgotICAgIG1faml0LnN0b3JlUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZkluaGVyaXRvcklEKCkpKTsKLSAgICAKLSAg
ICAvLyBJbml0aWFsaXplIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0g
ICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTT2Jq
ZWN0KSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0ZpbmFsT2JqZWN0Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CkBAIC03Njcs
NyArNTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0SlNW
YWx1ZShtX2NvbXBpbGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZXN1bHQuZ3ByKCksIGZvcm1h
dCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC04MzAsMTMgKzY0MiwxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgp
KSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3Nh
cnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCiAgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFy
aWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBm
aWxlLgogICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgp
KSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAg
Ly8gVGhpcyBpcyBhIG5vLW9wOyBpdCBqdXN0IG1hcmtzIHRoZSBmYWN0IHRoYXQgdGhlIGFyZ3Vt
ZW50IGlzIGJlaW5nIHVzZWQuCiAgICAgICAgIC8vIEJ1dCBpdCBtYXkgYmUgcHJvZml0YWJsZSB0
byB1c2UgdGhpcyBhcyBhIGhvb2sgdG8gcnVuIHNwZWN1bGF0aW9uIGNoZWNrcwpAQCAtOTE3LDcg
KzcyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZG91YmxlUmVzdWx0KG91dHB1dEZQUiwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogCkBAIC05MjgsNyArNzQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgsIG9wMS5mb3JtYXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisK
ICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewogICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRl
SW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUg
d2F5LgpAQCAtOTgwLDcgKzc5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlm
IChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpOwpA
QCAtMTAxMyw3ICs4MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIoKTsKICAgICAgICAgICAgIEdQ
UlJlZyBncHIyID0gb3AyLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIGdwclJlc3VsdCA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGdwcjEgPT0gZ3ByUmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihncHIy
LCBncHJSZXN1bHQpOwpAQCAtMTA0MCwxNyArODUyLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGUFJS
ZWcgcmVnMSA9IG9wMS5mcHIoKTsKICAgICAgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigp
OwogICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7
Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
CisKICAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAgICAgCisKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIApAQCAtMTEyMCw3ICs5
MzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAg
ICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJlZzIg
PSBvcDIuZ3ByKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gV2hhdCBpcyB1bmZv
cnR1bmF0ZSBpcyB0aGF0IHdlIGNhbm5vdCB0YWtlIGFkdmFudGFnZSBvZiBub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKCkKICAgICAgICAgICAgIC8vIGhlcmUuIEEgbXVsdGlwbHkgb24gaW50ZWdlcnMg
cGVyZm9ybWVkIGluIHRoZSBkb3VibGUgZG9tYWluIGFuZCB0aGVuIHRydW5jYXRlZCB0bwogICAg
ICAgICAgICAgLy8gYW4gaW50ZWdlciB3aWxsIGdpdmUgYSBkaWZmZXJlbnQgcmVzdWx0IHRoYW4g
YSBtdWx0aXBseSBwZXJmb3JtZWQgaW4gdGhlIGludGVnZXIKQEAgLTExNDIsNyArOTU0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEsIG9wMik7CkBAIC0xMjUxLDcgKzEwNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGludGVnZXJSZXN1bHQoZWR4Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKICAg
ICBjYXNlIEFyaXRoQWJzOiB7CiAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuY2hpbGQxKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKQEAgLTE5NzAsNyArMTc4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY2FzZSBDaGVja01ldGhvZDogewogICAgICAgICBN
ZXRob2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSA9IG1faml0LmdyYXBoKCkubV9tZXRob2RD
aGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXTsKICAgICAgICAgCkBAIC0yMTk1
LDI4MiArMjAwNywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIAorCiAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUo
KSkKICAgICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1vdkhpbnQoTm9kZSYgbm9kZSkKLXsKLSAgICBBU1NFUlQobm9kZS5vcCA9PSBT
ZXRMb2NhbCk7Ci0gICAgCi0gICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChub2RlLmNoaWxkMSgp
LCBub2RlLmxvY2FsKCkpOwotICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7Ci19
Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCi17Ci0g
ICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwotICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBi
bG9jay5iZWdpbik7Ci0gICAgCi0gICAgaWYgKGJsb2NrLmlzT1NSVGFyZ2V0KQotICAgICAgICBt
X2ppdC5ub3RpY2VPU1JFbnRyeShibG9jayk7Ci0gICAgCi0gICAgbV9ibG9ja0hlYWRzW21fYmxv
Y2tdID0gbV9qaXQubGFiZWwoKTsKLSNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9C
TE9DSykKLSAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0jZW5kaWYKLSAgICAKLSAgICBBU1NFUlQo
bV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFs
dWU7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQotICAgICAgICAgICAgbV9hcmd1
bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlv
bihtX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKSk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxv
Y2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dmFyaWFibGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay5tX2xvY2Fsc0F0SGVhZFtpXS52YWx1ZTsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5S
ZWdpc3RlckZpbGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9
IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKLSAgICB9Ci0gICAgCi0gICAgbV9sYXN0
U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgbV9ieXRl
Y29kZUluZGV4Rm9yT1NSID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwot
Ci0gICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2suZW5kOyArK21fY29tcGlsZUluZGV4
KSB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XTsK
LSAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1
bGF0aXZlSklUIHNraXBwaW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAg
ICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKG5vZGUub3Ag
PT0gU2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcg
Tm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUlu
ZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBtX2ppdC5kZWJ1Z09mZnNldCgp
KTsKLSNlbmRpZgotI2lmIEVOQUJMRShERkdfSklUX0JSRUFLX09OX0VWRVJZX05PREUpCi0gICAg
ICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKLSAgICAgICAgICAgIGNvbXBpbGUobm9kZSk7Ci0gICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpIHsKLSAgICAgICAgICAgICAgICBtX2NvbXBpbGVPa2F5ID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKLSAgICAgICAgICAg
ICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQot
ICAgICAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIo
KV07Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlcywgdnIjJWQiLCBkYXRh
Rm9ybWF0VG9TdHJpbmcoaW5mby5yZWdpc3RlckZvcm1hdCgpKSwgKGludClub2RlLnZpcnR1YWxS
ZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9
IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiLCAlcyIsIEZQUkluZm86OmRlYnVnTmFtZShpbmZvLmZwcigpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiLCAlcyIsIEdQUkluZm86OmRlYnVnTmFtZShpbmZvLmdwcigpKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgIik7
Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICAKLSNpZiBFTkFCTEUoREZHX1ZFUkJPU0VfVkFM
VUVfUkVDT1ZFUklFUykKLSAgICAgICAgZm9yIChpbnQgb3BlcmFuZCA9IC1tX2FyZ3VtZW50cy5z
aXplKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IG9wZXJhbmQgPCAtUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyArK29wZXJhbmQpCi0gICAgICAgICAgICBj
b21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7Ci0gICAgICAgIAot
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiA6ICIpOwotICAgICAgICAKLSAgICAgICAgZm9yIChp
bnQgb3BlcmFuZCA9IDA7IG9wZXJhbmQgPCAoaW50KW1fdmFyaWFibGVzLnNpemUoKTsgKytvcGVy
YW5kKQotICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChz
dGRlcnIpOwotI2VuZGlmCi0gICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICNlbmRpZgotICAgICAgICAKLSAgICAgICAg
aWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLSAgICB9Ci19Ci0KLS8vIElmIHdlIGFyZSBtYWtpbmcgdHlwZSBwcmVkaWN0aW9ucyBhYm91
dCBvdXIgYXJndW1lbnRzIHRoZW4KLS8vIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGV5IGFyZSBj
b3JyZWN0IG9uIGZ1bmN0aW9uIGVudHJ5Lgotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1
bWVudFR5cGVzKCkKLXsKLSAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKLSAgICBtX2J5dGVj
b2RlSW5kZXhGb3JPU1IgPSAwOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3Vt
ZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShW
YWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFi
bGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZh
bHVlSW5SZWdpc3RlckZpbGUpOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQu
Y29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVyczsgKytpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2ppdC5jb2RlQmxvY2so
KS0+dGhpc1JlZ2lzdGVyKCkgKyBpKTsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRU
eXBlID0gbV9qaXQuZ3JhcGgoKVttX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAg
ICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkg
ewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAu
Z3ByKCkpOwotICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0
ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKLXsKLSAg
ICBjaGVja0FyZ3VtZW50VHlwZXMoKTsKLQotICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwot
ICAgIGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNp
emUoKTsgKyttX2Jsb2NrKQotICAgICAgICBjb21waWxlKCptX2ppdC5ncmFwaCgpLm1fYmxvY2tz
W21fYmxvY2tdKTsKLSAgICBsaW5rQnJhbmNoZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
VmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29u
c3QgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlKQotewotICAgIHN3aXRjaCAodmFsdWVTb3VyY2Uu
a2luZCgpKSB7Ci0gICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgICAgIAotICAgIGNh
c2UgSW50MzJJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7Ci0gICAgICAgIAotICAgIGNhc2Ug
SGF2ZU5vZGU6IHsKLSAgICAgICAgaWYgKG1faml0LmlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9k
ZUluZGV4KCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1f
aml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7Ci0gICAgCi0g
ICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKV07Ci0gICAgICAgIGlmICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAg
ICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIg
dXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKLSAgICAgICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0
byBVbmRlZmluZWQgdG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KLSAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgfQotICAgIAotICAgICAgICBHZW5lcmF0aW9uSW5mbyogaW5mb1B0ciA9ICZtX2dlbmVyYXRp
b25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgaWYgKCFpbmZvUHRy
LT5hbGl2ZSgpIHx8IGluZm9QdHItPm5vZGVJbmRleCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRl
eCgpKSB7Ci0gICAgICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0
ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KLSAgICAgICAgICAg
IC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6Ci0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2
YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9kZQotICAgICAgICAgICAgLy8gICAgdGhlbiBpdCBt
ZWFucyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJm
b3JtZWQgYQotICAgICAgICAgICAgLy8gICAgVmFsdWVUb051bWJlciBjb252ZXJzaW9uIGFueXdh
eS4gVGh1cywgd2UgY2FuIHN1YnN0aXR1dGUgVmFsdWVUb051bWJlci4KLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1h
aW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcwotICAgICAgICAgICAgLy8gICAgVmFs
dWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuIEJ1dCBpZiB0aGVyZSBpcyBib3RoIGEgVmFs
dWVUb0ludDMyCi0gICAgICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0aGVuIHdl
IGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAotICAgICAgICAgICAgLy8g
ICAgbWVhbnMgdGhhdCBzb21lIHJlbWFpbmluZyB1c2VzIHdvdWxkIGhhdmUgY29udmVydGVkIHRv
IG51bWJlciB3aGlsZQotICAgICAgICAgICAgLy8gICAgb3RoZXJzIHdvdWxkIGhhdmUgY29udmVy
dGVkIHRvIEludDMyLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFVJbnQzMlRvTnVt
YmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9O
dW1iZXIKLSAgICAgICAgICAgIC8vICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJl
IG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51bWJlcgotICAgICAgICAgICAgLy8g
ICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJl
IGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAgICAgICAgICAgIC8vICAgIGFsdGVybmF0aXZl
IGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMg
b2YKLSAgICAgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUlu
dDMyIGludGVybWVkaWF0ZS4KLSAgICAgICAgCi0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVt
YmVyKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNo
aWxkMSgpOwotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5k
ZXhdOwotICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRy
LT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZl
KCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQotICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAg
aWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvTnVtYmVySW5k
ZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4
ID0gTm9Ob2RlOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4
ID0gTm9Ob2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25JbmZvLnNp
emUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5v
Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtpbmZvLm5vZGVJbmRleCgpXTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uu
bm9kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
VmFsdWVUb051bWJlcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvRG91YmxlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5k
ZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQz
MkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleFRvVXNlOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXgg
IT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9O
dW1iZXJJbmRleDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAh
PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0lu
dDMySW5kZXg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAh
PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9O
dW1iZXJJbmRleDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleFRvVXNlID0gTm9Ob2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgewotICAgICAgICAgICAgICAgICAgICBub2RlUHRy
ID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOwotICAgICAgICAgICAgICAgICAgICBp
bmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5u
b2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgQVNT
RVJUKGluZm9QdHItPmFsaXZlKCkpOwotCi0gICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZv
cm1hdCgpICE9IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgICAgICBpZiAoaW5mb1B0ci0+cmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQotICAgICAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVy
Rm9ybWF0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgp
ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0
ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKLSAgICAKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7Ci0gICAgfQotICAgICAgICAKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3ZlcnkoKTsKLSAgICB9Ci19CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NjM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwy
MTc2ICsyOCwxNzAgQEAKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogCiAjaWYgRU5B
QkxFKERGR19KSVQpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi10ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3Jt
YXQmIHJldHVybkZvcm1hdCkKLXsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAg
ZnByaW50ZihzdGRlcnIsICJTcGVjSW50QCVkICAgIiwgbm9kZUluZGV4KTsKLSNlbmRpZgotICAg
IE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAg
ICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAgIGNhc2UgRGF0YUZvcm1hdE5v
bmU6IHsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50
KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KCk7Ci0gICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKLSAgICAg
ICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBH
UFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLQotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgp
KSB7Ci0gICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2Rl
SW5kZXgpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcihncHIpOwotICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdElu
dGVnZXI7Ci0gICAgICAgICAgICByZXR1cm4gZ3ByOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwotICAgICAg
ICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwotICAgICAgICAKLSAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIp
IHsKLSAgICAgICAgICAgIC8vIElmIHdlIGtub3cgdGhpcyB3YXMgc3BpbGxlZCBhcyBhbiBpbnRl
Z2VyIHdlIGNhbiBmaWxsIHdpdGhvdXQgY2hlY2tpbmcuCi0gICAgICAgICAgICBpZiAoc3RyaWN0
KSB7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdl
cihncHIpOwotICAgICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2Vy
OwotICAgICAgICAgICAgICAgIHJldHVybiBncHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7Ci0gICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwot
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKLSAgICAgICAgfQotICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0KLSAgICAg
ICAgLy8gRmlsbCBhcyBKU1ZhbHVlLCBhbmQgZmFsbCB0aHJvdWdoLgotICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAgICAgIG1fZ3Bycy51bmxv
Y2soZ3ByKTsKLSAgICB9Ci0KLSAgICBjYXNlIERhdGFGb3JtYXRKUzogewotICAgICAgICAvLyBD
aGVjayB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlci4KLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8u
Z3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERh
dGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJl
dHVybi4KLSAgICAgICAgaWYgKCFzdHJpY3QpIHsKLSAgICAgICAgICAgIHJldHVybkZvcm1hdCA9
IERhdGFGb3JtYXRKU0ludGVnZXI7Ci0gICAgICAgICAgICByZXR1cm4gZ3ByOwotICAgICAgICB9
Ci0gICAgICAgIC8vIGVsc2UgZmFsbCB0aHJvdWdoICYgaGFuZGxlIGFzIERhdGFGb3JtYXRKU0lu
dGVnZXIuCi0gICAgICAgIG1fZ3Bycy51bmxvY2soZ3ByKTsKLSAgICB9Ci0KLSAgICBjYXNlIERh
dGFGb3JtYXRKU0ludGVnZXI6IHsKLSAgICAgICAgLy8gSW4gYSBzdHJpY3QgZmlsbCB3ZSBuZWVk
IHRvIHN0cmlwIG9mZiB0aGUgdmFsdWUgdGFnLgotICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHQ7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcmVnaXN0ZXIgaGFzIGFscmVhZHkgYmVlbiBsb2Nr
ZWQgd2UgbmVlZCB0byB0YWtlIGEgY29weS4KLSAgICAgICAgICAgIC8vIElmIG5vdCwgd2UnbGwg
emVybyBleHRlbmQgaW4gcGxhY2UsIHNvIG1hcmsgb24gdGhlIGluZm8gdGhhdCB0aGlzIGlzIG5v
dyB0eXBlIERhdGFGb3JtYXRJbnRlZ2VyLCBub3QgRGF0YUZvcm1hdEpTSW50ZWdlci4KLSAgICAg
ICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9ncHJz
LmxvY2soZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZ3ByOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9q
aXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuRm9y
bWF0ID0gRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3By
cy5sb2NrKGdwcik7Ci0gICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7
Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdl
cjogewotICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgbV9ncHJzLmxv
Y2soZ3ByKTsKLSAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7Ci0gICAg
ICAgIHJldHVybiBncHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgotICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKLSAgICBj
YXNlIERhdGFGb3JtYXRKU0RvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAg
Y2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKCk7Ci0gICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwot
ICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgRGF0
YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotfQot
Ci0jaWZuZGVmIE5ERUJVRwotdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFNvdXJjZU5vdFNldDoKLSAgICAg
ICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWYWx1
ZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIkluUmVnRmlsZSIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmlu
dGYob3V0LCAiSW50MzIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIYXZlTm9kZToKLSAg
ICAgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi12b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25z
dAotewotICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKLSAgICBjYXNlIEFscmVhZHlJblJlZ2lz
dGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICItIik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI6Ci0gICAgICAgIGZwcmlu
dGYob3V0LCAiKGludDMyKSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluR1BSOgotICAg
ICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgZnByaW50
ZihvdXQsICJpbnQzMiglJSVzKSIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEluRlBSOgotICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBG
UFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICIqJWQiLCB2aXJ0dWFs
UmVnaXN0ZXIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAg
IGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRG9udEtub3c6Ci0gICAgICAgIGZwcmludGYob3V0LCAiISIpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKG91dCwgIj8lZCIs
IHRlY2huaXF1ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2VuZGlmCi0KLU9TUkV4
aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBq
aXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCi0gICAgOiBtX2NoZWNrKGNoZWNrKQotICAgICwg
bV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKLSAgICAsIG1fYnl0ZWNvZGVJbmRleChq
aXQtPm1fYnl0ZWNvZGVJbmRleEZvck9TUikKLSAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVy
eUluZGV4KQotICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCi0gICAg
LCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKLSAgICAsIG1fbGFzdFNldE9w
ZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJn
dW1lbnQpCi0gICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOwotICAgIGZvciAodW5zaWdu
ZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJs
ZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVH
Ci12b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAotewotICAgIGZvciAodW5zaWdu
ZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVu
dCkKLSAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdLmR1bXAob3V0KTsKLSAgICBmcHJpbnRm
KG91dCwgIiA6ICIpOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8
IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFy
aWFibGVdLmR1bXAob3V0KTsKLX0KLSNlbmRpZgotCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9y
bWF0KQotewotICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGVJ
bmRleCwgcmV0dXJuRm9ybWF0KTsKLX0KLQotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50U3RyaWN0KE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgRGF0YUZvcm1hdCBt
dXN0QmVEYXRhRm9ybWF0SW50ZWdlcjsKLSAgICBHUFJSZWcgcmVzdWx0ID0gZmlsbFNwZWN1bGF0
ZUludEludGVybmFsPHRydWU+KG5vZGVJbmRleCwgbXVzdEJlRGF0YUZvcm1hdEludGVnZXIpOwot
ICAgIEFTU0VSVChtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciA9PSBEYXRhRm9ybWF0SW50ZWdlcik7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0jaWYgRU5BQkxFKERGR19ERUJV
R19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGVJ
bmRleCk7Ci0jZW5kaWYKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOwotCi0gICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0Tm9uZSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLQotICAgICAgICBp
ZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUo
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0cihzdGF0aWNfY2Fz
dDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpKSkpLCBncHIpOwotICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7Ci0gICAgICAgICAg
ICAgICAgdW5sb2NrKGdwcik7Ci0KLSAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxEb3VibGUoZnByKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnByOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAg
ICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpKSkpLCBncHIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIs
IGZwcik7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0KLSAgICAgICAgICAgICAgICBt
X2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZnByOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBmcHJBbGxvY2F0ZSgpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZv
cm1hdCgpOwotICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwotICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIHNwaWxsRm9y
bWF0KTsKLSAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERhdGFGb3JtYXROb25lOiAvLyBTaG91bGQgaGF2
ZSBmaWxsZWQsIGFib3ZlLgotICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IC8vIFRoaXMgdHlw
ZSBuZXZlciBvY2N1cnMuCi0gICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIAotICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0g
ICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTOgotICAgIGNh
c2UgRGF0YUZvcm1hdEpTQm9vbGVhbjogewotICAgICAgICBHUFJSZWcganNWYWx1ZUdwciA9IGlu
Zm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGpzVmFsdWVHcHIpOwotICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0
ZSgpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0KLSAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBo
ZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICAgICAgbV9qaXQu
bW92ZShqc1ZhbHVlR3ByLCB0ZW1wR3ByKTsKLSAgICAgICAgdW5ib3hEb3VibGUodGVtcEdwciwg
ZnByKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0
Lmp1bXAoKTsKLQotICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCi0gICAgICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKGpzVmFsdWVHcHIsIGZwcik7Ci0gICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9q
aXQpOwotCi0gICAgICAgIG1fZ3Bycy5yZWxlYXNlKGpzVmFsdWVHcHIpOwotICAgICAgICBtX2dw
cnMudW5sb2NrKGpzVmFsdWVHcHIpOwotICAgICAgICBtX2dwcnMudW5sb2NrKHRlbXBHcHIpOwot
ICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91
YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7Ci0gICAgICAgIGluZm8ua2lsbFNw
aWxsZWQoKTsKLSAgICAgICAgcmV0dXJuIGZwcjsKLSAgICB9Ci0KLSAgICBjYXNlIERhdGFGb3Jt
YXRKU0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7
Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGdwciwgZnByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOwotICAgICAgICBy
ZXR1cm4gZnByOwotICAgIH0KLQotICAgIC8vIFVuYm94IHRoZSBkb3VibGUKLSAgICBjYXNlIERh
dGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKLSAg
ICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgIGlmIChtX2dwcnMuaXNM
b2NrZWQoZ3ByKSkgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHRyYW1wbGUg
Z3ByIGlmIGl0IGlzIGluIHVzZS4KLSAgICAgICAgICAgIEdQUlJlZyB0ZW1wID0gYWxsb2NhdGUo
KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCB0ZW1wKTsKLSAgICAgICAgICAgIHVuYm94
RG91YmxlKHRlbXAsIGZwcik7Ci0gICAgICAgICAgICB1bmxvY2sodGVtcCk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgdW5ib3hEb3VibGUoZ3ByLCBmcHIpOwotCi0gICAgICAgIG1fZ3By
cy5yZWxlYXNlKGdwcik7Ci0gICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotCi0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwot
ICAgICAgICByZXR1cm4gZnByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTog
ewotICAgICAgICBGUFJSZWcgZnByID0gaW5mby5mcHIoKTsKLSAgICAgICAgbV9mcHJzLmxvY2so
ZnByKTsKLSAgICAgICAgcmV0dXJuIGZwcjsKLSAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludmFsaWRGUFJSZWc7Ci19Ci0KLUdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSNp
ZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICJTcGVjQ2Vs
bEAlZCAgICIsIG5vZGVJbmRleCk7Ci0jZW5kaWYKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3Jh
cGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotCi0gICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKLSAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOwotCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihq
c1ZhbHVlLmFzQ2VsbCgpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7
Ci0gICAgICAgICAgICByZXR1cm4gZ3ByOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChpbmZv
LnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwotICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLQot
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgaWYg
KGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNDZWxsKQotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAgfQot
Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6IHsK
LSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdw
cik7Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SlM6
IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2Nr
KGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOwotICAgICAgICBy
ZXR1cm4gZ3ByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKLSAgICBj
YXNlIERhdGFGb3JtYXRJbnRlZ2VyOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAg
IGNhc2UgRGF0YUZvcm1hdERvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0g
ICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbigpOwotICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKLSAgICB9Ci0gICAgICAg
IAotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnZh
bGlkR1BSUmVnOwotfQotCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
ZWFuKE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NF
KQotICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0Jvb2xAJWQgICAiLCBub2RlSW5kZXgpOwotI2Vu
ZGlmCi0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKLQotICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7Ci0gICAgY2FzZSBEYXRh
Rm9ybWF0Tm9uZTogewotICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLQotICAgICAg
ICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKGpzVmFsdWUu
aXNCb29sZWFuKCkpIHsKLSAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUp
KSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1h
dEpTQm9vbGVhbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZ3ByOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0
KCkgJiBEYXRhRm9ybWF0SlMpOwotICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLQotICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgaWYgKGluZm8uc3BpbGxG
b3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNCb29sZWFuKSB7Ci0gICAgICAgICAgICBtX2ppdC54b3JQ
dHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwg
SW52YWxpZEdQUlJlZykpOwotICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwotICAgICAgICBy
ZXR1cm4gZ3ByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgY2Fz
ZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigp
OwotICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICByZXR1cm4gZ3ByOwotICAgIH0K
LQotICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdw
cigpOwotICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3Bl
Y3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BS
UmVnKSk7Ci0gICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAgfQotCi0gICAg
Y2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgotICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Ci0g
ICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgot
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRDZWxsOiB7Ci0g
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7Ci0gICAgICAgIHJldHVybiBh
bGxvY2F0ZSgpOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4
IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQotewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJ
bmRleF07Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotCi0gICAgLy8gVGhl
IGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCi0gICAg
Ly8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQg
dGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFr
ZW4gPT0gKG1fYmxvY2sgKyAxKSkgewotICAgICAgICBjb25kaXRpb24gPSBKSVRDb21waWxlcjo6
aW52ZXJ0KGNvbmRpdGlvbik7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47Ci0gICAg
ICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KLQot
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgaW50MzJf
dCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21waWxlcjo6SW1tMzIoaW1t
KSwgb3AyLmdwcigpKSwgdGFrZW4pOwotICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNv
bmRpdGlvbiwgb3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSksIHRha2VuKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLmNoaWxkMigpKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlv
biwgb3AxLmdwcigpLCBvcDIuZ3ByKCkpLCB0YWtlbik7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sg
Zm9yIGZhbGwgdGhyb3VnaCwgb3RoZXJ3aXNlIHdlIG5lZWQgdG8ganVtcC4KLSAgICBpZiAobm90
VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
bm90VGFrZW4pOwotfQotCi1KSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVy
dFRvRG91YmxlKEdQUlJlZyB2YWx1ZSwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIHRtcCkKLXsKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWUsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7Ci0gICAgCi0gICAgbV9qaXQubW92ZSh2YWx1ZSwgdG1wKTsKLSAgICB1bmJv
eERvdWJsZSh0bXAsIHJlc3VsdCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAKLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIAot
ICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlLCByZXN1bHQpOwotICAgIAotICAg
IGRvbmUubGluaygmbV9qaXQpOwotCi0gICAgcmV0dXJuIG5vdE51bWJlcjsKLX0KLQotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmIG5vZGUsIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uKQotewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5v
ZGVJbmRleF07Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIAotICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIAotICAg
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29uZGl0aW9uLCBvcDEuZnByKCksIG9wMi5m
cHIoKSksIHRha2VuKTsKLSAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkK
LSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwotfQotCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKQotewotICAgIE5vZGUmIGJyYW5j
aE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJbmRleF07Ci0gICAgQmxvY2tJbmRleCB0
YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5v
ZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9q
aXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtl
bkJ5dGVjb2RlT2Zmc2V0KCkpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwotICAgIAotICAgIGlmICh0
YWtlbiA9PSAobV9ibG9jayArIDEpKSB7Ci0gICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAg
dGFrZW4gPSBub3RUYWtlbjsKLSAgICAgICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgfQotCi0gICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAKLSAgICBHUFJS
ZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7Ci0g
ICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICAKLSAg
ICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0
YWtlbik7Ci0gICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJy
YW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIpCi17Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgCi0gICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsK
LSAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7Ci0gICAg
bV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgZmFsc2VDYXNlLmxpbmsoJm1faml0
KTsKLSAgICBtX2ppdC5tb3ZlKEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwotICAgIGRv
bmUubGluaygmbV9qaXQpOwotCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBjb21wYXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1ZW50IGJyYW5jaC4KLWJvb2wgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJs
ZUNvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKLXsKLSAgICAvLyBGdXNl
ZCBjb21wYXJlICYgYnJhbmNoLgotICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBkZXRl
Y3RQZWVwSG9sZUJyYW5jaCgpOwotICAgIGlmIChicmFuY2hOb2RlSW5kZXggIT0gTm9Ob2RlKSB7
Ci0gICAgICAgIC8vIGRldGVjdFBlZXBIb2xlQnJhbmNoIGN1cnJlbnRseSBvbmx5IHBlcm1pdHMg
dGhlIGJyYW5jaCB0byBiZSB0aGUgdmVyeSBuZXh0IG5vZGUsCi0gICAgICAgIC8vIHNvIGNhbiBi
ZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCi0g
ICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKLQotICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkg
ewotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hO
b2RlSW5kZXgsIGNvbmRpdGlvbik7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBk
b3VibGVDb25kaXRpb24pOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0g
Q29tcGFyZUVxICYmIHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KG5vZGUuY2hpbGQxKCksIG5v
ZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0
eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVj
dFZQdHIpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgdXNl
KG5vZGUuY2hpbGQyKCkpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVx
ICYmIHNob3VsZFNwZWN1bGF0ZUFycmF5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hO
b2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOwotICAgICAgICAgICAg
dXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9k
ZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24sIG9wZXJhdGlvbik7Ci0KLSAgICAgICAgbV9j
b21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCkpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwg
b3AyKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kaXRpb24sIG9wMS5n
cHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYg
d2UgYWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KLSAgICAgICAg
bV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1h
dEpTQm9vbGVhbik7Ci0gICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5j
aGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVU
cnVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdHJ1ZUNh
c2UgPSBtX2ppdC5icmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBvcDEuZnByKCksIG9wMi5m
cHIoKSk7Ci0gICAgICAgIG1faml0LnhvclB0cihJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0gICAg
fSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBzaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdChub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkKLSAgICAgICAgY29tcGlsZU9iamVj
dEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOwot
ICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIHNob3VsZFNwZWN1bGF0ZUFycmF5
KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1
YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7Ci0gICAgZWxzZQot
ICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24s
IG9wZXJhdGlvbik7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChU
IHN0cnVjdHVyZSwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgpCi17Ci0gICAgTWFya2VkU3BhY2U6OlNpemVDbGFz
cyogc2l6ZUNsYXNzID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5zaXplQ2xhc3NGb3JPYmpl
Y3Qoc2l6ZW9mKEpTRmluYWxPYmplY3QpKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkUHRyKCZzaXpl
Q2xhc3MtPmZpcnN0RnJlZUNlbGwsIHJlc3VsdEdQUik7Ci0gICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwotICAg
IAotICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBr
bm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKLSAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydz
IGZyZWUgbGlzdC4KLSAgICAKLSAgICAvLyBEaXRjaCB0aGUgc3RydWN0dXJlIGJ5IHBsYWNpbmcg
aXQgaW50byB0aGUgc3RydWN0dXJlIHNsb3QsIHNvIHRoYXQgd2UgY2FuIHJldXNlCi0gICAgLy8g
c2NyYXRjaEdQUi4KLSAgICBtX2ppdC5zdG9yZVB0cihzdHJ1Y3R1cmUsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OnN0cnVjdHVyZU9mZnNldCgpKSk7Ci0gICAg
Ci0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBzY3JhdGNoR1BSIGJhY2ssIHJlbW92ZSB0aGUgb2Jq
ZWN0IGZyb20gdGhlIGZyZWUgbGlzdAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUiwgJnNpemVDbGFzcy0+Zmlyc3RGcmVlQ2VsbCk7Ci0gICAgCi0gICAgLy8gSW5pdGlh
bGl6ZSB0aGUgb2JqZWN0J3MgdnRhYmxlCi0gICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUikpOwotICAgIAotICAgIC8vIEluaXRp
YWxpemUgdGhlIG9iamVjdCdzIGluaGVyaXRvcklELgotICAgIG1faml0LnN0b3JlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZkluaGVyaXRvcklEKCkpKTsKLSAgICAKLSAgICAvLyBJ
bml0aWFsaXplIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0gICAgbV9q
aXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTT2JqZWN0KSks
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0ZpbmFsT2JqZWN0OjpvZmZzZXRP
ZlByb3BlcnR5U3RvcmFnZSgpKSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKLXsKLSAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7Ci0KLSAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICBpbml0Q29uc3RhbnRJbmZvKG1f
Y29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3Rpb24oKTsKLQotICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24g
Zm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgotICAgICAgICBp
ZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgewotICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBpZiAoaXNJ
bnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwotCi0g
ICAgICAgICAgICAvLyBMaWtlIGludGVnZXJSZXN1bHQsIGJ1dCBkb24ndCB1c2VDaGlsZHJlbiAt
IG91ciBjaGlsZHJlbiBhcmUgcGhpIG5vZGVzLAotICAgICAgICAgICAgLy8gYW5kIGRvbid0IHJl
cHJlc2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0YWZsb3cgd2l0aCB2aXJ0dWFsIHJlZ2lzdGVy
cy4KLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZp
cnR1YWxSZWdpc3RlcigpOwotICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCks
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVnZXIpOwotICAgICAgICAgICAgbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRJbnRlZ2VyKG1fY29tcGlsZUluZGV4LCBu
b2RlLnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSks
IHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIC8vIExpa2UganNWYWx1ZVJlc3VsdCwgYnV0
IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxkcmVuIGFyZSBwaGkgbm9kZXMsCi0gICAgICAg
ICAgICAvLyBhbmQgZG9uJ3QgcmVwcmVzZW50IHZhbHVlcyB3aXRoaW4gdGhpcyBkYXRhZmxvdyB3
aXRoIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBtX2dwcnMu
cmV0YWluKHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGlm
IChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICBmb3JtYXQg
PSBEYXRhRm9ybWF0SlNDZWxsOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGlj
dGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNC
b29sZWFuOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFG
b3JtYXRKUzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCks
IHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMg
YSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKLSAgICAgICAgLy8g
YXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3JlIHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUg
dGhhdCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJlIHRoZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVl
ZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAgICAgLy8gcmVnaXN0ZXIgZmlsZS4KLSAgICAg
ICAgY29tcGlsZU1vdkhpbnQobm9kZSk7Ci0gICAgICAgIAotICAgICAgICAvLyBBcyBmYXIgYXMg
T1NSIGlzIGNvbmNlcm5lZCwgd2UncmUgb24gdGhlIGJ5dGVjb2RlIGluZGV4IGNvcnJlc3BvbmRp
bmcKLSAgICAgICAgLy8gdG8gdGhlICpuZXh0KiBpbnN0cnVjdGlvbiwgc2luY2Ugd2UndmUgYWxy
ZWFkeSAiZXhlY3V0ZWQiIHRoZQotICAgICAgICAvLyBTZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3Ro
ZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUKLSAgICAgICAgLy8gYnl0
ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgotICAgICAgICBBU1NFUlQobV9ieXRlY29kZUlu
ZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBO
b2RlJiBuZXh0Tm9kZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXgrMV07Ci0gICAgICAg
IAotICAgICAgICAvLyBUaGlzIGFzc2VydGlvbiB3aWxsIGZhaWwgaWYgd2UgZXZlciBlbWl0IG11
bHRpcGxlIFNldExvY2FsJ3MgZm9yCi0gICAgICAgIC8vIGEgc2luZ2xlIGJ5dGVjb2RlIGluc3Ry
dWN0aW9uLiBUaGF0J3MgdW5saWtlbHkgdG8gaGFwcGVuLiBCdXQgaWYKLSAgICAgICAgLy8gaXQg
ZG9lcywgdGhlIHNvbHV0aW9uIGlzIHRvIHRvIGhhdmUgdGhpcyBwZXJmb3JtIGEgc2VhcmNoIHVu
dGlsCi0gICAgICAgIC8vIGl0IGZpbmRzIGEgTm9kZSB3aXRoIGEgZGlmZmVyZW50IGJ5dGVjb2Rl
IGluZGV4IGZyb20gdGhlIG9uZSB3ZSd2ZQotICAgICAgICAvLyBnb3QsIGFuZCB0byBhYnN0cmFj
dGx5IGV4ZWN1dGUgdGhlIFNldExvY2FsJ3MgYWxvbmcgdGhlIHdheS4gT3IsCi0gICAgICAgIC8v
IGJldHRlciB5ZXQsIGhhbmRsZSBhbGwgb2YgdGhlIFNldExvY2FsJ3MgYXQgb25jZTogYWJzdHJh
Y3QgaW50ZXJwcmV0Ci0gICAgICAgIC8vIGFsbCBvZiB0aGVtLCB0aGVuIGVtaXQgY29kZSBmb3Ig
YWxsIG9mIHRoZW0sIHdpdGggT1NSIGV4aXRpbmcgdG8KLSAgICAgICAgLy8gdGhlIG5leHQgbm9u
LVNldExvY2FsIGluc3RydWN0aW9uLiBOb3RlIHRoZSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4KLSAg
ICAgICAgLy8gYm90aCB0aGlzIFNldExvY2FsIGFuZCB0aGUgbmV4dCBvcCBoYXZlIGEgYnl0ZWNv
ZGUgaW5kZXggb2YgMDsgdGhpcwotICAgICAgICAvLyBvY2N1cnMgZm9yIFNldExvY2FsJ3MgZ2Vu
ZXJhdGVkIGF0IHRoZSB0b3Agb2YgdGhlIGNvZGUgYmxvY2sgdG8KLSAgICAgICAgLy8gaW5pdGlh
bGl6ZSBsb2NhbHMgdG8gdW5kZWZpbmVkLiBJZGVhbGx5LCB3ZSdkIGhhdmUgYSB3YXkgb2YgbWFy
a2luZwotICAgICAgICAvLyBpbiB0aGUgQ29kZU9yaWdpbiB0aGF0IGEgU2V0TG9jYWwgaXMgc3lu
dGhldGljLiBUaGlzIHdpbGwgbWFrZSB0aGUKLSAgICAgICAgLy8gYXNzZXJ0aW9uIG1vcmUgc2Vu
c2libGUtbG9va2luZy4gV2Ugc2hvdWxkIHRoZW4gYWxzbyBhc3NlcnQgdGhhdAotICAgICAgICAv
LyBzeW50aGV0aWMgU2V0TG9jYWwncyBkb24ndCBoYXZlIHNwZWN1bGF0aW9uIGNoZWNrcywgc2lu
Y2UgdGhleQotICAgICAgICAvLyBzaG91bGQgb25seSBiZSBkcm9wcGluZyB2YWx1ZXMgdGhhdCB3
ZSBzdGF0aWNhbGx5IGtub3cgd2UgYXJlCi0gICAgICAgIC8vIGFsbG93ZWQgdG8gZHJvcCBpbnRv
IHRoZSB2YXJpYWJsZXMuIERGR1Byb3BhZ2F0b3Igd2lsbCBndWFyYW50ZWUKLSAgICAgICAgLy8g
dGhpcywgc2luY2UgaXQgc2hvdWxkIGhhdmUgYXQgbGVhc3QgYW4gYXBwcm94aW1hdGlvbiAoaWYg
bm90Ci0gICAgICAgIC8vIGV4YWN0IGtub3dsZWRnZSkgb2YgdGhlIHR5cGUgb2YgdGhlIFNldExv
Y2FsJ3MgY2hpbGQgbm9kZSwgYW5kCi0gICAgICAgIC8vIHNob3VsZCBtZXJnZSB0aGF0IGluZm9y
bWF0aW9uIGludG8gdGhlIGxvY2FsIHRoYXQgaXMgYmVpbmcgc2V0LgotICAgICAgICBBU1NFUlQo
bV9ieXRlY29kZUluZGV4Rm9yT1NSICE9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpCi0gICAgICAgICAgICAgICB8fCAoIW1fYnl0ZWNvZGVJbmRleEZvck9TUiAmJiAhbmV4dE5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4
Rm9yT1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIAot
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdw
cigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKLSAgICAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5UHJl
ZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BS
ID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2Vs
bEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKLSAgICAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9u
KHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBi
b29sZWFuKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Ym9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7Ci0g
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcihub2RlLmxvY2FsKCkpKTsKLSAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5v
IGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCi0gICAgICAgIC8vIHRo
aXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRpb25zIGlu
IHRoZSByZWdpc3RlciBmaWxlLgotICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJh
bmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2V0QXJndW1l
bnQ6Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcDsgaXQganVzdCBtYXJrcyB0aGUgZmFjdCB0
aGF0IHRoZSBhcmd1bWVudCBpcyBiZWluZyB1c2VkLgotICAgICAgICAvLyBCdXQgaXQgbWF5IGJl
IHByb2ZpdGFibGUgdG8gdXNlIHRoaXMgYXMgYSBob29rIHRvIHJ1biBzcGVjdWxhdGlvbiBjaGVj
a3MKLSAgICAgICAgLy8gb24gYXJndW1lbnRzLCB0aGVyZWJ5IGFsbG93aW5nIHVzIHRvIHRyaXZp
YWxseSBlbGltaW5hdGUgc3VjaCBjaGVja3MgaWYKLSAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlz
IG5vdCB1c2VkLgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQml0QW5kOgotICAgIGNhc2Ug
Qml0T3I6Ci0gICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AyKTsKLQotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgICAgIGJpdE9wKG9w
LCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSwgb3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwotCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBy
ZWcxID0gb3AxLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0g
ICAgICAgICAgICBiaXRPcChvcCwgcmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKTsKLQotICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQml0UlNoaWZ0OgotICAgIGNhc2UgQml0
TFNoaWZ0OgotICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwotCi0gICAgICAgICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKLQot
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyBzaGlmdCBhbW91
bnQgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlciBkb2VzIG5vdCBwZXJt
aXQgdGhpcy4KLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKLQotICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKLSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIHJl
ZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7Ci0gICAgICAgIGlmICghbm9kZUNhblNwZWN1bGF0
ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgLy8gV2Uga25v
dyB0aGF0IHRoaXMgc29tZXRpbWVzIHByb2R1Y2VzIGRvdWJsZXMuIFNvIHByb2R1Y2UgYSBkb3Vi
bGUgZXZlcnkKLSAgICAgICAgICAgIC8vIHRpbWUuIFRoaXMgYXQgbGVhc3QgYWxsb3dzIHN1YnNl
cXVlbnQgY29kZSB0byBub3QgaGF2ZSB3ZWlyZCBjb25kaXRpb25hbHMuCi0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIEZQUlJlZyBv
dXRwdXRGUFIgPSByZXN1bHQuZnByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBvdXRwdXRGUFIpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
MzIoMCkpOwotICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0
ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBvdXRwdXRGUFIpOwotICAgICAgICAgICAgcG9zaXRpdmUu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGVSZXN1bHQob3V0
cHV0RlBSLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIElu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhlIG9wZXJhbmQgaXMg
cG9zaXRpdmUuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAg
ICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAg
ICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAg
ICAgICAgICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4KLSAgICAgICAgICAgIG5vblNwZWN1bGF0
aXZlVmFsdWVUb0ludDMyKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQx
KCkpKSB7Ci0gICAgICAgICAgICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCi0gICAgICAgICAgICBu
b25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7Ci0g
ICAgICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
LCBvcDEuZm9ybWF0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFZhbHVl
VG9Eb3VibGU6IHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAg
ICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRoQWRkOiB7Ci0g
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hp
bGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
IHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAg
ICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSks
IHJlc3VsdC5ncHIoKSkpOwotCi0gICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCBpbW0y
ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0yKSwgcmVzdWx0Lmdw
cigpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9w
MS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwotCi0gICAgICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwotCi0gICAg
ICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBncHIy
ID0gb3AyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGdwclJlc3VsdCA9IHJlc3VsdC5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAgIGlmIChncHIxID09IGdw
clJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoZ3ByMiwgZ3ByUmVzdWx0
KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShncHIyLCBncHJSZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihncHIx
LCBncHJSZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2sgPSBtX2ppdC5icmFuY2hB
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGdwcjEsIGdwcjIsIGdwclJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQot
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrLCBTcGVjdWxhdGlvblJl
Y292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjIpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3By
UmVzdWx0LCBncHIxKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAgICAgICAgICAgRlBSUmVnIHJl
ZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgICAgICBtX2ppdC5hZGREb3VibGUocmVnMSwgcmVnMiwg
cmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0gICAgICAgIAot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgCi0gICAg
ICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBvcDJHUFIgPSBv
cDIuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAK
LSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgaWYgKGlzS25vd25Ob3RO
dW1iZXIobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk5vdE51bWJlcihub2RlLmNoaWxkMigpKSkK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJl
c3VsdC5ncHIoKSwgb3AxR1BSLCBvcDJHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3Ay
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXJpdGhTdWI6
IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9k
ZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFn
cygpKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkg
ewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3By
KCkpKTsKLQotICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotCi0gICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFy
aXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIob3AyLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9w
MS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKLQotICAgICAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBS
UmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIG1faml0LnN1YkRvdWJsZShyZWcxLCByZWcy
LCByZXN1bHQuZnByKCkpOwotCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1f
Y29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBcml0aE11
bDogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBu
b2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotCi0gICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyByZWcyID0gb3AyLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBX
aGF0IGlzIHVuZm9ydHVuYXRlIGlzIHRoYXQgd2UgY2Fubm90IHRha2UgYWR2YW50YWdlIG9mIG5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIoKQotICAgICAgICAgICAgLy8gaGVyZS4gQSBtdWx0aXBseSBv
biBpbnRlZ2VycyBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZSBkb21haW4gYW5kIHRoZW4gdHJ1bmNh
dGVkIHRvCi0gICAgICAgICAgICAvLyBhbiBpbnRlZ2VyIHdpbGwgZ2l2ZSBhIGRpZmZlcmVudCBy
ZXN1bHQgdGhhbiBhIG11bHRpcGx5IHBlcmZvcm1lZCBpbiB0aGUgaW50ZWdlcgotICAgICAgICAg
ICAgLy8gZG9tYWluIGFuZCB0aGVuIHRydW5jYXRlZCwgaWYgdGhlIGludGVnZXIgZG9tYWluIHJl
c3VsdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGluCi0gICAgICAgICAgICAvLyBzb21ldGhpbmcgYmln
Z2VyIHRoYW4gd2hhdCBhIDMyLWJpdCBpbnRlZ2VyIGNhbiBob2xkLiBKYXZhU2NyaXB0IG1hbmRh
dGVzIHRoYXQKLSAgICAgICAgICAgIC8vIHRoZSBzZW1hbnRpY3MgYXJlIGFsd2F5cyBhcyBpZiB0
aGUgbXVsdGlwbHkgaGFkIGJlZW4gcGVyZm9ybWVkIGluIHRoZSBkb3VibGUKLSAgICAgICAgICAg
IC8vIGRvbWFpbi4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZzEsIHJlZzIsIHJl
c3VsdC5ncHIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDaGVjayBmb3IgbmVn
YXRpdmUgemVybywgaWYgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZSBjYXJlIGFib3V0IHN1Y2ggdGhp
bmdzLgotICAgICAgICAgICAgaWYgKCFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJp
dGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBy
ZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkp
KTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5m
cHIoKTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIAotICAgICAg
ICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgCi0g
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOwot
ICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBvcDJHUFIgPSBvcDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVn
YXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKLSAgICAgICAg
ICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4KLSAgICAgICAgICAgIGlmICghbm9kZUNh
bklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSKTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICBudW1lcmF0b3JO
b25aZXJvLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgR1BSUmVnIHRlbXAyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIGlmIChvcDJH
UFIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwgb3AyR1BSID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7
Ci0gICAgICAgICAgICAgICAgdGVtcDIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUob3AyR1BSLCB0ZW1wMik7Ci0gICAgICAgICAgICAgICAgb3AyR1BSID0gdGVtcDI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3Ax
R1BSLCBlYXguZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7Ci0g
ICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2bF9yKG9wMkdQUik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYg
dGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBiZSBvYmxpZ2F0ZWQgdG8KLSAgICAgICAgICAgIC8v
IHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGluc3RlYWQuCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgZWR4Lmdwcigp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZWF4LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBS
UmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwot
ICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgaWYgKHNob3Vs
ZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgc2hvdWxkTm90U3BlY3VsYXRl
SW50ZWdlcihub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgfHwgIW5vZGVDYW5TcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgICAgICAgICBGUFJS
ZWcgb3AyRlBSID0gb3AyLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRo
aXMpOwotCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGZtb2QsIHJlc3VsdC5mcHIoKSwgb3Ax
RlBSLCBvcDJGUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0
ZXJzOjplYXgpOwotICAgICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6
ZWR4KTsKLSAgICAgICAgR1BSUmVnIG9wMUdwciA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IG9wMkdwciA9IG9wMi5ncHIoKTsKLQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7Ci0KLSAgICAgICAgR1BSUmVn
IHRlbXAyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKG9wMkdwciA9PSBYODZSZWdpc3Rl
cnM6OmVheCB8fCBvcDJHcHIgPT0gWDg2UmVnaXN0ZXJzOjplZHgpIHsKLSAgICAgICAgICAgIHRl
bXAyID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR3ByLCB0ZW1wMik7
Ci0gICAgICAgICAgICBvcDJHcHIgPSB0ZW1wMjsKLSAgICAgICAgfQotCi0gICAgICAgIG1faml0
Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEo
KTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihvcDJHcHIpOwotCi0gICAgICAg
IGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgdW5sb2NrKHRlbXAyKTsK
LQotICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIG1faml0
LnJzaGlmdDMyKHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzMSks
IHNjcmF0Y2guZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuYWRkMzIoc2NyYXRjaC5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LnhvcjMyKHNjcmF0Y2guZ3ByKCksIHJl
c3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEgPDwgMzEpKSk7Ci0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9Db25zdGFudCA9IC0wLjA7Ci0g
ICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkRG91YmxlKCZuZWdhdGl2ZVplcm9Db25zdGFudCwg
cmVzdWx0LmZwcigpKTsKLSAgICAgICAgbV9qaXQuYW5kbm90RG91YmxlKG9wMS5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxl
SW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJpdGhN
aW46Ci0gICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50
ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJyYW5jaDMyKG9w
ID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6
OkdyZWF0ZXJUaGFuLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGlmIChvcDEuZ3ByKCkg
IT0gcmVzdWx0LmdwcigpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
cDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBv
cDEuZnByKCksIG9wMi5mcHIoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBvcDIgaXMgZWF0aGVy
IHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8g
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBV
bm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1h
bnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCi0gICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGlu
ZyBpdCBpbnRvIHJlc3VsdC4KLSAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3Ay
LmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwotICAgICAgICAKLSAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0
Lm1vdmVEb3VibGUob3AyLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKG9wMS5mcHIoKSAhPSByZXN1bHQuZnByKCkpIHsKLSAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG9wMUxlc3MubGluaygm
bV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5m
cHIoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3Fy
dERvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIAotICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGNhc2UgTG9naWNhbE5vdDogewotICAgICAgICBpZiAoaXNLbm93bkJvb2xl
YW4obm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
dmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1
c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRK
U0Jvb2xlYW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1faml0LmdldFByZWRpY3Rpb24obm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8
ICFwcmVkaWN0aW9uKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7IC8v
IEZJWE1FOiBXZSBjb3VsZCByZXVzZSwgYnV0IG9uIHNwZWN1bGF0aW9uIGZhaWwgd291bGQgbmVl
ZCByZWNvdmVyeSB0byByZXN0b3JlIHRhZyAoYWtpbiB0byBhZGQpLgotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAg
ICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1
ZUZhbHNlKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICAgICAgICAgIG1faml0
LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJl
c3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHdlIGFkZCBhIERh
dGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG5vblNw
ZWN1bGF0aXZlTG9naWNhbE5vdChub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGlmIChjb21wYXJlKG5vZGUsIEpJ
VENvbXBpbGVyOjpMZXNzVGhhbiwgSklUQ29tcGlsZXI6OkRvdWJsZUxlc3NUaGFuLCBvcGVyYXRp
b25Db21wYXJlTGVzcykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21w
aWxlcjo6TGVzc1RoYW5PckVxdWFsLCBKSVRDb21waWxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFs
LCBvcGVyYXRpb25Db21wYXJlTGVzc0VxKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBpZiAoY29tcGFyZShu
b2RlLCBKSVRDb21waWxlcjo6R3JlYXRlclRoYW4sIEpJVENvbXBpbGVyOjpEb3VibGVHcmVhdGVy
VGhhbiwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgaWYgKGNv
bXBhcmUobm9kZSwgSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgSklUQ29tcGlsZXI6
OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDb21wYXJlRXE6
Ci0gICAgICAgIGlmIChpc051bGxDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewotICAgICAgICAg
ICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS5jaGlsZDIoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBp
ZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2RlLCBub2RlLmNoaWxkMSgpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpEb3Vi
bGVFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUVxKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKLSAgICAgICAgaWYgKG5vblNw
ZWN1bGF0aXZlU3RyaWN0RXEobm9kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMo
KSA9PSBOb05vZGUpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRo
aXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3Jh
Z2UuIFdlIGhhdmVuJ3QgeWV0IGNoZWNrZWQgdGhpcyBpcyBhIEpTQXJyYXksIHNvIHRoaXMgaXMg
b25seSBzYWZlIGlmCi0gICAgICAgIC8vIGFuIGFjY2VzcyB3aXRoIG9mZnNldCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkgaXMgdmFsaWQgZm9yIGFsbCBKU0NlbGxzIQotICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VP
ZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBh
biBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAo
PCBtX3ZlY3Rvckxlbmd0aCkuCi0gICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBi
YXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYg
KCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKLQotICAgICAgICAvLyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJl
IHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVs
cCB0byBjYWNoZQotICAgICAgICAvLyB0aGUgc3RvcmFnZSBwb2ludGVyIC0gZXNwZWNpYWxseSBp
ZiB0aGVyZSBoYXBwZW5zIHRvIGJlIGFub3RoZXIgcmVnaXN0ZXIgZnJlZSByaWdodCBub3cuIElm
IHdlIGRvIHNvLAotICAgICAgICAvLyB0aGVuIHdlJ2xsIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcg
dGVtcG9yYXJ5IGZvciByZXN1bHQuCi0gICAgICAgIEdQUlRlbXBvcmFyeSYgcmVzdWx0ID0gc3Rv
cmFnZTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0LmdwcigpKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBQ
dXRCeVZhbDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQot
ICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxs
b2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
ICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVn
LCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJh
eSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3Zl
Y3Rvckxlbmd0aCkuCi0gICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRv
IGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tu
b3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwotCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAg
IHByb3BlcnR5LnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKLSAgICAgICAgCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdpdGhpbkFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICAv
LyBDb2RlIHRvIGhhbmRsZSBwdXQgYmV5b25kIGFycmF5IGJvdW5kcy4KLSAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIHNldHVwU3R1YkFyZ3VtZW50
cyhiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2hSZWcpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCB3YXNCZXlvbmRBcnJheUJvdW5kcyA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICB3aXRoaW5B
cnJheUJvdW5kcy5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9y
YWdlLgotICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hSZWc7Ci0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3Rv
cmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUg
d3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0K
LSAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2lu
ZyB0aGUgYXJyYXk7IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90
TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Ci0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcHJvcGVydHlSZWcpOwotCi0gICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxp
bmsoJm1faml0KTsKLSAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKLQotICAgICAg
ICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICBtX2ppdC5zdG9yZVB0
cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKLQotICAgICAgICB3YXNCZXlvbmRBcnJheUJvdW5kcy5saW5r
KCZtX2ppdCk7Ci0KLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUHV0
QnlWYWxBbGlhczogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgIHdyaXRlQmFycmll
cihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIC8vIEdldCB0aGUgYXJyYXkg
c3RvcmFnZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6
OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIERGRzo6SnVt
cDogewotICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgICAgICBp
ZiAodGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIHRha2VuKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgaWYgKGlzU3RyaWN0
SW50MzIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBvcCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAgICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChu
b2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm87Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9i
bG9jayArIDEpKSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6
Olplcm87Ci0gICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAg
ICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1w
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgb3AuZ3ByKCkpLCB0YWtlbik7Ci0gICAgICAgICAg
ICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
LQotICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAg
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biA9IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDsKLQotICAgICAgICAgICAgaWYgKHRha2VuID09
IChtX2Jsb2NrICsgMSkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWw7Ci0gICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAg
ICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICAgICAgICAgIG5vdFRha2Vu
ID0gdG1wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciksIHRha2VuKTsKLQotICAgICAgICAgICAgaWYgKG5vdFRha2VuICE9ICht
X2Jsb2NrICsgMSkpCi0gICAgICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90
VGFrZW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbWl0QnJhbmNoKG5v
ZGUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUmV0dXJuOiB7Ci0gICAgICAgIEFTU0VS
VChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciAhPSBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAg
IEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIEFTU0VSVChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiAhPSBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7Ci0KLSNpZiBFTkFCTEUoREZHX1NVQ0NFU1NfU1RBVFMpCi0gICAgICAgIHN0YXRp
YyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigiU3BlY3VsYXRpdmVKSVQiKTsKLSAgICAgICAgbV9q
aXQuZW1pdENvdW50KGNvdW50ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gUmV0dXJuIHRoZSBy
ZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIuCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLQotICAgICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4K
LSAgICAgICAgbV9qaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxl
OjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAvLyBSZXN0b3JlIG91ciBjYWxs
ZXIncyAiciIuCi0gICAgICAgIG1faml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICAgICAgLy8gUmV0dXJuLgotICAgICAgICBtX2ppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIG1faml0LnJldCgpOwotICAgICAgICAK
LSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgICAgIAotICAgIGNhc2UgVGhyb3c6Ci0gICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9y
OiB7Ci0gICAgICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRocm93IHN0YXRlbWVudHMgYXJlIHJhcmUg
YW5kIGFyZSBpbnRlbmRlZCB0byBleGl0IHRoZSBjb2RlIGJsb2NrCi0gICAgICAgIC8vIGFueXdh
eSwgc28gd2UganVzdCBPU1IgYmFjayB0byB0aGUgb2xkIEpJVCBmb3Igbm93LgotICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgICAgIAotICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIC8vIEl0J3MgcmVhbGx5
IHByb2ZpdGFibGUgdG8gc3BlY3VsYXRlIGludGVnZXIsIHNpbmNlIGl0J3MgcmVhbGx5IGNoZWFw
LAotICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkgcmVhbCB3
b3JrLCBhbmQgd2UgZW1pdCBhIGxvdCBsZXNzIGNvZGUuCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
ICAgICBpZiAob3AxLmZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAg
ICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0Lmdw
cigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgotICAg
ICAgICAKLSAgICAgICAgYm9vbCB3YXNQcmltaXRpdmUgPSBpc0tub3duTnVtZXJpYyhub2RlLmNo
aWxkMSgpKSB8fCBpc0tub3duQm9vbGVhbihub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIG9w
MUdQUiA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICAgICAgCi0gICAgICAgIG9wMS51c2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh3
YXNQcmltaXRpdmUpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgYWxy
ZWFkeVByaW1pdGl2ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2
ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3Ax
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGFscmVhZHlQcmlt
aXRpdmUuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAgICAg
bV9qaXQubW92ZShvcDFHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25U
b1ByaW1pdGl2ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhbHJlYWR5UHJp
bWl0aXZlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1
bHRHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU3RyQ2F0OgotICAgIGNhc2UgTmV3QXJyYXk6IHsK
LSAgICAgICAgLy8gV2UgcmVhbGx5IGRvbid0IHdhbnQgdG8gZ3JvdyB0aGUgcmVnaXN0ZXIgZmls
ZSBqdXN0IHRvIGRvIGEgU3RyQ2F0IG9yIE5ld0FycmF5LgotICAgICAgICAvLyBTYXkgd2UgaGF2
ZSA1MCBmdW5jdGlvbnMgb24gdGhlIHN0YWNrIHRoYXQgYWxsIGhhdmUgYSBTdHJDYXQgaW4gdGhl
bSB0aGF0IGhhcwotICAgICAgICAvLyB1cHdhcmRzIG9mIDEwIG9wZXJhbmRzLiBJbiB0aGUgREZH
IHRoaXMgd291bGQgbWVhbiB0aGF0IGVhY2ggb25lIGdldHMKLSAgICAgICAgLy8gc29tZSByYW5k
b20gdmlydHVhbCByZWdpc3RlciwgYW5kIHRoZW4gdG8gZG8gdGhlIFN0ckNhdCB3ZSdkIG5lZWQg
YSBzZWNvbmQKLSAgICAgICAgLy8gc3BhbiBvZiAxMCBvcGVyYW5kcyBqdXN0IHRvIGhhdmUgc29t
ZXdoZXJlIHRvIGNvcHkgdGhlIDEwIG9wZXJhbmRzIHRvLCB3aGVyZQotICAgICAgICAvLyB0aGV5
J2QgYmUgY29udGlndW91cyBhbmQgd2UgY291bGQgZWFzaWx5IHRlbGwgdGhlIEMgY29kZSBob3cg
dG8gZmluZCB0aGVtLgotICAgICAgICAvLyBVZ2x5ISBTbyBpbnN0ZWFkIHdlIHVzZSB0aGUgc2Ny
YXRjaEJ1ZmZlciBpbmZyYXN0cnVjdHVyZSBpbiBKU0dsb2JhbERhdGEuIFRoYXQKLSAgICAgICAg
Ly8gd2F5LCB0aG9zZSA1MCBmdW5jdGlvbnMgd2lsbCBzaGFyZSB0aGUgc2FtZSBzY3JhdGNoQnVm
ZmVyIGZvciBvZmZsb2FkaW5nIHRoZWlyCi0gICAgICAgIC8vIFN0ckNhdCBvcGVyYW5kcy4gSXQn
cyBhYm91dCBhcyBnb29kIGFzIHdlIGNhbiBkbywgdW5sZXNzIHdlIHN0YXJ0IGRvaW5nCi0gICAg
ICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgY29hbGVzY2luZyB0byBlbnN1cmUgdGhhdCBvcGVyYW5k
cyB0byBTdHJDYXQgZ2V0IHNwaWxsZWQKLSAgICAgICAgLy8gaW4gZXhhY3RseSB0aGUgcGxhY2Ug
d2hlcmUgU3RyQ2F0IHdhbnRzIHRoZW0sIG9yIGVsc2UgaGF2ZSB0aGUgU3RyQ2F0Ci0gICAgICAg
IC8vIHJlZmVyIHRvIHRob3NlIG9wZXJhbmRzJyBTZXRMb2NhbCBpbnN0cnVjdGlvbnMgdG8gZm9y
Y2UgdGhlbSB0byBzcGlsbCBpbgotICAgICAgICAvLyB0aGUgcmlnaHQgcGxhY2UuIEJhc2ljYWxs
eSwgYW55IHdheSB5b3UgY3V0IGl0LCB0aGUgY3VycmVudCBhcHByb2FjaAotICAgICAgICAvLyBw
cm9iYWJseSBoYXMgdGhlIGJlc3QgYmFsYW5jZSBvZiBwZXJmb3JtYW5jZSBhbmQgc2Vuc2liaWxp
dHkgaW4gdGhlIHNlbnNlCi0gICAgICAgIC8vIHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhl
IGNvbXBsZXhpdHkgb2YgdGhlIERGRyBKSVQganVzdCB0byBtYWtlIFN0ckNhdAotICAgICAgICAv
LyBmYXN0IGFuZCBwcmV0dHkuCi0gICAgICAgIAotICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2ppdC5nbG9iYWxEYXRhKCktPnNj
cmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLm51bUNoaWxk
cmVuKCkpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7
IG9wZXJhbmRJZHggPCBub2RlLm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgewotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XSk7Ci0gICAgICAgICAgICBH
UFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIob3BHUFIsIGJ1ZmZlciAr
IG9wZXJhbmRJZHgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3AgPT0gU3RyQ2F0ID8gb3BlcmF0aW9uU3RyQ2F0IDog
b3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgYnVmZmVyLCBub2RlLm51bUNoaWxkcmVu
KCkpOwotICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgICAgIAotICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIo
KSwgbm9kZS5zdGFydENvbnN0YW50KCksIG5vZGUubnVtQ29uc3RhbnRzKCkpOwotICAgICAgICAK
LSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIE5ld1JlZ2V4cDogewotICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAg
ICAgICAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIHJlc3VsdC5n
cHIoKSwgbV9qaXQuY29kZUJsb2NrKCktPnJlZ2V4cChub2RlLnJlZ2V4cEluZGV4KCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBDb252ZXJ0VGhpczog
ewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGls
ZDEoKSk7Ci0KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikp
KTsKLQotICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBzbyBtdWNoIHByb2ZpdCB0byBzcGVjdWxhdGUg
aGVyZS4gVGhlIG9ubHkgdGhpbmdzIHdlCi0gICAgICAgIC8vIHNwZWN1bGF0ZSBvbiBhcmUgKDEp
IHRoYXQgaXQncyBhIGNlbGwsIHNpbmNlIHRoYXQgZWxpbWluYXRlcyBjZWxsIGNoZWNrcwotICAg
ICAgICAvLyBsYXRlciBpZiB0aGUgcHJvdG8gaXMgcmV1c2VkLCBhbmQgKDIpIGlmIHdlIGhhdmUg
YSBGaW5hbE9iamVjdCBwcmVkaWN0aW9uCi0gICAgICAgIC8vIHRoZW4gd2Ugc3BlY3VsYXRlIGJl
Y2F1c2Ugd2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAoc2luY2UKLSAgICAg
ICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBhIGxvdCkuCi0gICAg
ICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm90byh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgcHJvdG9HUFIg
PSBwcm90by5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAg
ICAgICAgcHJvdG8udXNlKCk7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd1BhdGg7Ci0gICAgICAgIAotICAgICAgICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0
IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZl
Ci0gICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9u
IHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQotICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3Ry
dWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KG5vZGUuY2hpbGQxKCkpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyBMb2FkIHRoZSBpbmhlcml0b3JJRCAodGhlIFN0cnVjdHVyZSB0aGF0
IG9iamVjdHMgd2hvIGhhdmUgcHJvdG9HUFIgYXMgdGhlIHByb3RvdHlwZQotICAgICAgICAvLyB1
c2UgdG8gcmVmZXIgdG8gdGhhdCBwcm90b3R5cGUpLiBJZiB0aGUgaW5oZXJpdG9ySUQgaXMgbm90
IHNldCwgZ28gdG8gc2xvdyBwYXRoLgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgIAotICAgICAgICBl
bWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQ
Uiwgc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0
KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
Ci0gICAgICAgIG1faml0Lm1vdmUocHJvdG9HUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0g
ICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uQ3JlYXRlVGhpcyk7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIE5ld09iamVj
dDogewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
LSAgICAgICAgCi0gICAgICAgIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLT5lbXB0
eU9iamVjdFN0cnVjdHVyZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Ci0g
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwotICAgICAgICAKLSAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICAKLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQu
bW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
LSAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3Qp
OwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAot
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGNhc2UgR2V0Q2FsbGVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OkNhbGxlZSkpLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAg
ICBicmVhazsKLSAgICB9CiAKLSAgICBjYXNlIEdldFNjb3BlQ2hhaW46IHsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IG1faml0LmNvZGVCbG9j
aygpLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2ppdC5jb2RlQmxvY2soKS0+bmVl
ZHNGdWxsU2NvcGVDaGFpbigpOwotICAgICAgICBpbnQgc2tpcCA9IG5vZGUuc2NvcGVDaGFpbkRl
cHRoKCk7Ci0gICAgICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICAgICAg
aWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsKLSAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVs
KQotICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihKSVRDb21waWxlcjo6WmVybywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihtX2ppdC5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVy
KCkpKSk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgd2hpbGUgKHNraXAtLSkKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFp
bk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG9iamVjdCkpLCByZXN1bHRHUFIpOworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFNjb3BlZFZhcjogewotICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZUNoYWluKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHNjb3BlQ2hhaW4uZ3ByKCksIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0
ZXJzKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpLCBy
ZXN1bHRHUFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOworI2lmbmRlZiBOREVCVUcKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBj
b25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiTm90U2V0Iik7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFB1dFNjb3BlZFZhcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29w
ZUNoYWluKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aFJlZ2lzdGVyKHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2hSZWdp
c3Rlci5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhz
Y29wZUNoYWluLmdwcigpLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3Rlcikp
KTsKLSAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlQ2hhaW4uZ3ByKCksIHZhbHVlLmdwcigpLCBu
b2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7
Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICBjYXNlIFZhbHVlSW5SZWdp
c3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7CiAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0R1BSID09
IGJhc2VHUFIpCi0gICAgICAgICAgICBzY3JhdGNoR1BSID0gdHJ5QWxsb2NhdGUoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlc3VsdEdQUjsKLSAgICAgICAgCi0g
ICAgICAgIGJhc2UudXNlKCk7Ci0KLSAgICAgICAgY2FjaGVkR2V0QnlJZChiYXNlR1BSLCByZXN1
bHRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpKTsKLQotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJp
bnRmKG91dCwgIkludDMyIik7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR2V0
QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93
bkFycmF5KG5vZGUuY2hpbGQxKCkpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0cikpKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwg
cmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgZnBy
aW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorfQogCi0gICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIGJhc2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAg
ICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmUo
KSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRH
UFIpOwotICAgICAgICAKLSAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKK3ZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgeworICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxl
OgorICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
ICAgICAKLSAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgc3RvcmFnZSk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgIAotICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBt
X2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4KCldOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZp
bGVBc1VuYm94ZWRJbnQzMjoKKyAgICAgICAgZnByaW50ZihvdXQsICIoaW50MzIpIik7CiAgICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBHZXRNZXRob2Q6IHsKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKLQotICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOwotICAgICAgICAKLSAgICAgICAgaWYgKHJl
c3VsdEdQUiA9PSBiYXNlR1BSKQotICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHRyeUFsbG9jYXRl
KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZXN1bHRHUFI7Ci0g
ICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotCi0gICAgICAgIGNhY2hlZEdldE1ldGhvZChi
YXNlR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpKTsK
LQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgZnByaW50
ZihvdXQsICIlJSVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7CiAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBDaGVja01ldGhvZDogewotICAgICAgICBNZXRo
b2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSA9IG1faml0LmdyYXBoKCkubV9tZXRob2RDaGVj
a0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXTsKLSAgICAgICAgCi0gICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOyAvLyB0aGlzIG5lZWRzIHRvIGJlIGEgc2VwYXJhdGUg
cmVnaXN0ZXIsIHVuZm9ydHVuYXRlbHkuCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAg
ICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0
cnVjdHVyZSkpKTsKLSAgICAgICAgaWYgKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgIT0gbV9q
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLT5tZXRob2RDYWxsRHVtbXkoKSkgewotICAg
ICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVj
a0RhdGEucHJvdG90eXBlLT5zdHJ1Y3R1cmVBZGRyZXNzKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiksIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1cmUpKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwotICAgICAgICBpbml0Q29u
c3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKKyAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgor
ICAgICAgICBmcHJpbnRmKG91dCwgImludDMyKCUlJXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdw
cigpKSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUHV0QnlJZDogewotICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKLQotICAgICAgICBjYWNo
ZWRQdXRCeUlkKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBzY3JhdGNoR1BSLCBu
b2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKLSAgICAgICAgCi0gICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAg
IGNhc2UgSW5GUFI6CisgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUkluZm86OmRlYnVn
TmFtZShmcHIoKSkpOwogICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFB1dEJ5SWRE
aXJlY3Q6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIo
KSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwotICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7Ci0K
LSAgICAgICAgY2FjaGVkUHV0QnlJZChiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwg
c2NyYXRjaEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7Ci0KLSAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBjYXNlIEluUGFpcjoKKyAgICAgICAgZnByaW50Zihv
dXQsICJwYWlyKCUlJXMsICUlJXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKHRhZ0dQUigpKSwgR1BS
SW5mbzo6ZGVidWdOYW1lKHBheWxvYWRHUFIoKSkpOwogICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotCi0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmNv
ZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihnbG9iYWxP
YmplY3QtPmFkZHJlc3NPZlJlZ2lzdGVycygpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yR2xvYmFsVmFyKHJlc3VsdC5ncHIoKSwg
bm9kZS52YXJOdW1iZXIoKSksIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyNlbmRpZgorICAgIGNhc2UgRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiKiVkIiwgdmlydHVhbFJl
Z2lzdGVyKCkpOwogICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFB1dEdsb2JhbFZh
cjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0aGlzKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0UmVnID0gZ2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9
IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmpl
Y3RSZWcpOwotCi0gICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0KCksIHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJp
YWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RSZWcsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNl
dE9mUmVnaXN0ZXJzKCkpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yR2xvYmFsVmFyKHNjcmF0Y2hSZWcsIG5v
ZGUudmFyTnVtYmVyKCkpKTsKLQotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Cisg
ICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgZnByaW50ZihvdXQsICJbJXNdIiwgY29uc3RhbnQo
KS5kZXNjcmlwdGlvbigpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDaGVj
a0hhc0luc3RhbmNlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0K
LSAgICAgICAgLy8gU3BlY3VsYXRlIHRoYXQgYmFzZSAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScuCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZS5ncHIoKSk7Ci0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJl
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7Ci0KLSAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgIGNhc2UgRG9udEtub3c6CisgICAgICAgIGZwcmludGYob3V0LCAiISIp
OwogICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEluc3RhbmNlT2Y6IHsKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgIC8vIEJhc2UgdW51c2VkIHNpbmNlIHdlIHNwZWN1bGF0ZSBkZWZhdWx0IEluc3RhbmNlT2Yg
YmVoYXZpb3VyIGluIENoZWNrSGFzSW5zdGFuY2UuCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHByb3RvdHlwZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKLQotICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIHByb3RvdHlwZVJlZyA9IHByb3RvdHlwZS5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgIC8vIENoZWNr
IHRoYXQgcHJvdG90eXBlIGlzIGFuIG9iamVjdC4KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b3R5cGVSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hJ
Zk5vdE9iamVjdChzY3JhdGNoUmVnKSk7Ci0KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBzY3JhdGNo
UmVnIHdpdGggdGhlIHZhbHVlIGJlaW5nIGNoZWNrZWQuCi0gICAgICAgIG1faml0Lm1vdmUodmFs
dWVSZWcsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIC8vIFdhbGsgdXAgdGhlIHByb3RvdHlwZSBj
aGFpbiBvZiB0aGUgdmFsdWUgKGluIHNjcmF0Y2hSZWcpLCBjb21wYXJpbmcgdG8gcHJvdG90eXBl
UmVnLgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgmbV9qaXQpOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlw
ZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlz
SW5zdGFuY2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNo
UmVnLCBwcm90b3R5cGVSZWcpOwotICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLmxpbmtU
byhsb29wLCAmbV9qaXQpOwotCi0gICAgICAgIC8vIE5vIG1hdGNoIC0gcmVzdWx0IGlzIGZhbHNl
LgotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBwdXRSZXN1bHQgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgaXNJ
bnN0YW5jZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBzY3JhdGNo
UmVnKTsKLQotICAgICAgICBwdXRSZXN1bHQubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVl
UmVzdWx0KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKG91dCwgIj8lZCIsIHRlY2huaXF1ZSgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorfQorI2VuZGlmCiAKLSAgICBjYXNlIFBoaToKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CitPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4
KQorICAgIDogbV9jaGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxl
SW5kZXgpCisgICAgLCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1Ip
CisgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRz
KGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3Zhcmlh
Ymxlcy5zaXplKCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFu
ZCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50
c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVu
dHNbYXJndW1lbnRdKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUg
PCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3Zh
cmlhYmxlXSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2
YXJpYWJsZV0pOworfQogCi0gICAgY2FzZSBCcmVha3BvaW50OgotI2lmIEVOQUJMRShERUJVR19X
SVRIX0JSRUFLUE9JTlQpCi0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSNlbHNlCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2lmbmRlZiBOREVCVUcKK3ZvaWQgT1NSRXhpdDo6
ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2Fy
Z3VtZW50c1thcmd1bWVudF0uZHVtcChvdXQpOworICAgIGZwcmludGYob3V0LCAiIDogIik7Cisg
ICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6
ZSgpOyArK3ZhcmlhYmxlKQorICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0uZHVtcChvdXQp
OworfQogI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIENhbGw6Ci0g
ICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgIGVtaXRDYWxsKG5vZGUpOwotICAgICAgICBicmVh
azsKIAotICAgIGNhc2UgUmVzb2x2ZTogewotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJlc29sdmUsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSkpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRl
eCwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgTm9kZSYg
YnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsKKyAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJh
bmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5v
dFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgCisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgCisgICAgYWRkQnJhbmNoKG1faml0LmJyYW5j
aERvdWJsZShjb25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpKSwgdGFrZW4pOworICAgIAor
ICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9q
aXQuanVtcCgpLCBub3RUYWtlbik7Cit9CiAKLSAgICBjYXNlIFJlc29sdmVCYXNlOiB7Ci0gICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2UsIHJlc3VsdC5ncHIoKSwg
aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOwotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2Rl
JiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKQoreworICAgIE5v
ZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJbmRleF07CisgICAgQmxv
Y2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9k
ZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwogCi0gICAgY2FzZSBSZXNvbHZlQmFzZVN0cmlj
dFB1dDogewotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlU3Ry
aWN0UHV0LCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkp
KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgYnJlYWs7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOworICAgIAorICAgIGlmICh0YWtlbiA9
PSAobV9ibG9jayArIDEpKSB7CisgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbDsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgdGFrZW4g
PSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgY2FzZSBS
ZXNvbHZlR2xvYmFsOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXNvbHZlSW5mbyh0aGlzKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
Z2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzb2x2ZUluZm9HUFIgPSByZXNv
bHZlSW5mby5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LQotICAgICAgICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNv
bHZlR2xvYmFsRGF0YVtub2RlLnJlc29sdmVHbG9iYWxEYXRhSW5kZXgoKV07Ci0gICAgICAgIEds
b2JhbFJlc29sdmVJbmZvKiByZXNvbHZlSW5mb0FkZHJlc3MgPSAmKG1faml0LmNvZGVCbG9jaygp
LT5nbG9iYWxSZXNvbHZlSW5mbyhkYXRhLnJlc29sdmVJbmZvSW5kZXgpKTsKLQotICAgICAgICAv
LyBDaGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVjdAotICAgICAgICBtX2ppdC5tb3ZlKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW1QdHIocmVzb2x2ZUluZm9BZGRyZXNzKSwgcmVzb2x2ZUluZm9HUFIpOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIHN0cnVjdHVyZSkpLCByZXN1bHRHUFIpOwot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVzTWF0Y2ggPSBtX2ppdC5icmFuY2hQ
dHIoSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGds
b2JhbE9iamVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwotCi0gICAgICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lm1vdmUocmVz
b2x2ZUluZm9HUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIG1faml0Lm1vdmUo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KGRhdGEuaWRlbnRpZmllck51bWJlcikpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgICAg
ICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJlc29sdmVHbG9iYWwpOwotICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgd2FzU2xvdyA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICAvLyBGYXN0IGNhc2UKLSAg
ICAgICAgc3RydWN0dXJlc01hdGNoLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoR2xvYmFs
UmVzb2x2ZUluZm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7Ci0gICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBK
SVRDb21waWxlcjo6U2NhbGVQdHIpLCByZXN1bHRHUFIpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgCisgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5n
cHIoKTsKKyAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOworICAgIAorICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
dnB0cikpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgCisgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaFB0cihjb25kaXRpb24sIG9wMUdQUiwgb3AyR1BSKSwgdGFrZW4pOworICAgIGlmIChu
b3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgp
LCBub3RUYWtlbik7Cit9CiAKLSAgICAgICAgd2FzU2xvdy5saW5rKCZtX2ppdCk7Cit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmIG5vZGUsIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKK3sKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKVticmFu
Y2hOb2RlSW5kZXhdOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKIAotICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBi
cmVhazsKKyAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0
YWtlbiBibG9jay4KKyAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBu
b3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJv
dWdoLgorICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAgIGNvbmRpdGlv
biA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZGl0aW9uKTsKKyAgICAgICAgQmxvY2tJbmRleCB0
bXAgPSB0YWtlbjsKKyAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4g
PSB0bXA7CiAgICAgfQogCi0gICAgY2FzZSBGb3JjZU9TUkV4aXQ6IHsKLSAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKLSAgICAgICAgYnJlYWs7CisgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5icmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVyOjpJbW0zMihpbW0pLCBvcDIuZ3ByKCkp
LCB0YWtlbik7CisgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkp
IHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKCkpOworICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBvcDEu
Z3ByKCksIEpJVENvbXBpbGVyOjpJbW0zMihpbW0pKSwgdGFrZW4pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OworICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCks
IG9wMi5ncHIoKSksIHRha2VuKTsKICAgICB9CiAKLSAgICBjYXNlIFBoYW50b206Ci0gICAgICAg
IC8vIFRoaXMgaXMgYSBuby1vcC4KLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYg
bm9kZS5tdXN0R2VuZXJhdGUoKSkKLSAgICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKKyAgICAv
LyBDaGVjayBmb3IgZmFsbCB0aHJvdWdoLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBqdW1wLgorICAg
IGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBub3RUYWtlbik7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZI
aW50KE5vZGUmIG5vZGUpCkBAIC0yMjEyLDE1ICsyMDYsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogewogICAgIEFTU0VSVChtX2NvbXBpbGVPa2F5KTsKICAg
ICBBU1NFUlQobV9jb21waWxlSW5kZXggPT0gYmxvY2suYmVnaW4pOwotICAgIAorCiAgICAgaWYg
KGJsb2NrLmlzT1NSVGFyZ2V0KQogICAgICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jayk7
Ci0gICAgCisKICAgICBtX2Jsb2NrSGVhZHNbbV9ibG9ja10gPSBtX2ppdC5sYWJlbCgpOwogI2lm
IEVOQUJMRShERkdfSklUX0JSRUFLX09OX0VWRVJZX0JMT0NLKQogICAgIG1faml0LmJyZWFrcG9p
bnQoKTsKICNlbmRpZgotICAgIAorCiAgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBi
bG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOwpAQCAtMjI3NSw2ICsyNjksMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICAgICAg
ICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91
YmxlKQogICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgRlBS
SW5mbzo6ZGVidWdOYW1lKGluZm8uZnByKCkpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgJiBEYXRhRm9y
bWF0SlMpCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiwgJXMgJXMi
LCBHUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby50YWdHUFIoKSksIEdQUkluZm86OmRlYnVnTmFtZShp
bmZvLnBheWxvYWRHUFIoKSkpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLCAlcyIsIEdQUkluZm86OmRl
YnVnTmFtZShpbmZvLmdwcigpKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjI5Myw3ICsyOTEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgIGZv
ciAoaW50IG9wZXJhbmQgPSAwOyBvcGVyYW5kIDwgKGludCltX3ZhcmlhYmxlcy5zaXplKCk7ICsr
b3BlcmFuZCkKICAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1
bXAoc3RkZXJyKTsKICNlbmRpZgotICAgICAgCisKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJP
U0UpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICNlbmRpZgpAQCAtMjMxOCw2ICsz
MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzOyArK2kp
IHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IChWaXJ0dWFsUmVn
aXN0ZXIpKG1faml0LmNvZGVCbG9jaygpLT50aGlzUmVnaXN0ZXIoKSArIGkpOwogICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpW21faml0LmdyYXBoKCku
bV9hcmd1bWVudHNbaV1dLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgZWxzZSBpZiAoaXNB
cnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIzMzEsNiArMzMwLDE3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgICAgIG1faml0
LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0
ZW1wLmdwcigpKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaWYg
KGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSkpOworICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdw
cigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZykpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgIH0gLy8gRklYTUU6
IG5lZWQgYm9vbGVhbiBwcmVkaWN0aW9ucywgYnV0IHdlIGN1cnJlbnRseSBkb24ndCBoYXZlIHRo
YXQgc3VwcG9ydC4KKyNlbmRpZgogICAgIH0KIH0KIApAQCAtMjM1Myw3ICszNjMsNyBAQCBWYWx1
ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsCiAgICAgICAgIAogICAgIGNhc2Ug
SW50MzJJblJlZ2lzdGVyRmlsZToKICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVh
ZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7Ci0gICAgICAgIAorCiAgICAgY2FzZSBI
YXZlTm9kZTogewogICAgICAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2Rl
SW5kZXgoKSkpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9q
aXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKQEAgLTI0NTUs
NiArNDY1LDEwIEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAg
ICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsK
ICAgICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRE
b3VibGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9Q
dHItPmZwcigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgaWYgKGluZm9Q
dHItPnJlZ2lzdGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3Zlcnk6OmluUGFpcihpbmZvUHRyLT50YWdHUFIoKSwgaW5mb1B0ci0+cGF5
bG9hZEdQUigpKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6Omlu
R1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkK
QEAgLTI0NzMsNCArNDg3LDMgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0
ZVZhbAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKLSNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gOTYzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw4ICs1NzgsMzUgQEAgcHJpdmF0ZToKICAgICAvLyBJ
dCBpcyBhY2NlcHRhYmxlIHRvIGhhdmUgc3RydWN0dXJlIGJlIGVxdWFsIHRvIHNjcmF0Y2gsIHNv
IGxvbmcgYXMgeW91J3JlIGZpbmUKICAgICAvLyB3aXRoIHRoZSBzdHJ1Y3R1cmUgR1BSIGJlaW5n
IGNsb2JiZXJlZC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgZW1pdEFsbG9j
YXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgpOwotICAgCisgICAg
dm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBHUFJSZWcgcmVzdWx0
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0
aCkKKyAgICB7CisgICAgICAgIE1hcmtlZFNwYWNlOjpTaXplQ2xhc3MqIHNpemVDbGFzcyA9ICZt
X2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuc2l6ZUNsYXNzRm9yT2JqZWN0KHNpemVvZihKU0ZpbmFs
T2JqZWN0KSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKCZzaXplQ2xhc3MtPmZp
cnN0RnJlZUNlbGwsIHJlc3VsdEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3
ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKKyAgICAgICAgLy8gaXQncyBzdGlsbCBvbiB0
aGUgR0MncyBmcmVlIGxpc3QuCisgICAgICAgIAorICAgICAgICAvLyBEaXRjaCB0aGUgc3RydWN0
dXJlIGJ5IHBsYWNpbmcgaXQgaW50byB0aGUgc3RydWN0dXJlIHNsb3QsIHNvIHRoYXQgd2UgY2Fu
IHJldXNlCisgICAgICAgIC8vIHNjcmF0Y2hHUFIuCisgICAgICAgIG1faml0LnN0b3JlUHRyKHN0
cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUg
c2NyYXRjaEdQUiBiYWNrLCByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3QKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJnNpemVDbGFz
cy0+Zmlyc3RGcmVlQ2VsbCk7CisgICAgICAgIAorICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBv
YmplY3QncyB2dGFibGUKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUikpOworICAgICAgICAKKyAgICAgICAgLy8gSW5p
dGlhbGl6ZSB0aGUgb2JqZWN0J3MgaW5oZXJpdG9ySUQuCisgICAgICAgIG1faml0LnN0b3JlUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZkluaGVyaXRvcklEKCkpKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UgcG9p
bnRlci4KKyAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
c2l6ZW9mKEpTT2JqZWN0KSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
SlNGaW5hbE9iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSkpOworICAgIH0KKwogI2lm
IFVTRShKU1ZBTFVFNjQpIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGNvbnZlcnRUb0RvdWJsZShH
UFJSZWcgdmFsdWUsIEZQUlJlZyByZXN1bHQsIEdQUlJlZyB0bXApOwogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkK
</data>
<flag name="review"
          id="106414"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>