<?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>74747</bug_id>
          
          <creation_ts>2011-12-16 14:22:26 -0800</creation_ts>
          <short_desc>PutByVal[Alias] unnecessarily reloads the storage buffer</short_desc>
          <delta_ts>2011-12-19 12:16:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>
          <dependson>74877</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>barraclough</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>523024</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-16 14:22:26 -0800</bug_when>
    <thetext>PutByVal[Alias] unnecessarily reloads the storage buffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523028</commentid>
    <comment_count>1</comment_count>
      <attachid>119669</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-16 14:27:25 -0800</bug_when>
    <thetext>Created attachment 119669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523055</commentid>
    <comment_count>2</comment_count>
      <attachid>119679</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-16 14:52:55 -0800</bug_when>
    <thetext>Created attachment 119679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523117</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-16 15:36:41 -0800</bug_when>
    <thetext>Committed r103120: &lt;http://trac.webkit.org/changeset/103120&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523202</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-16 18:41:11 -0800</bug_when>
    <thetext>Sorry had to roll this out in r103138, this breaks the V8 benchmark on ARMv7.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524070</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-19 11:39:22 -0800</bug_when>
    <thetext>Relanded in r103250</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119669</attachid>
            <date>2011-12-16 14:27:25 -0800</date>
            <delta_ts>2011-12-16 14:52:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74747-20111216142724.patch</filename>
            <type>text/plain</type>
            <size>66782</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MTM1MzJjNGQyMDE3ODI1ZGIwMTc4MGFlMDMxY2JiZGUwOWNmYTQ3Li5iZDY3YTc2NTA4MzBiZDU3
ZjVlOWUyODlhOWFhMDgwNmUzZWVhY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxMS0xMi0xNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFB1dEJ5VmFsW0FsaWFzXSB1bm5lY2Vzc2FyaWx5IHJlbG9hZHMgdGhlIHN0b3Jh
Z2UgYnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDc0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgUHV0QnlWYWwgdXNlIEdldEluZGV4ZWRTdG9yYWdlIHRvIGxvYWQgdGhlIHN0b3JhZ2Ug
YnVmZmVyLgorICAgICAgICBUaGlzIHJlcXVpcmVkIHN3aXRjaGluZyBQdXRCeVZhbCB0byBhIHZh
cmFyZyBub2RlICh3aGljaCBpcworICAgICAgICByZXNwb25zaWJsZSBmb3IgbW9zdCBvZiB0aGUg
bm9pc2UgaW4gdGhpcyBwYXRjaCkuICBUaGlzIGlzIGEgc2xpZ2h0CisgICAgICAgIGNvZGUgc2l6
ZSB3aW4gYW5kIGEgMS01JSB3aW4gb24gdGhlIHR5cGVkIGFycmF5IGJlbmNobWFyayBhdDoKKyAg
ICAgICAgaHR0cDovL3N0ZXBoZW5lYi5naXRodWIuY29tL3dlYmdsLW1hdHJpeC1iZW5jaG1hcmtz
L21hdHJpeF9iZW5jaG1hcmsuaHRtbAorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
ICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
OnByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmJ5VmFsSW5kZXhJ
c1B1cmUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmNsb2JiZXJzV29ybGQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5h
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlPZmZzZXRMb2FkRWxp
bWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckJ5dGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0xMi0xNSAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEV2ZW50RGlzcGF0Y2hlciBz
aG91bGQgaGFuZGxlIHdoZWVsIGV2ZW50cyBvbiB0aGUgY29ubmVjdGlvbiBxdWV1ZQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggZTU5MDEx
MGIwOTA0ODJhYjg3MmY1ODVjOGFlZDViNjY2OThjYmQ1Ny4uNjI0NzJkNzc5ZDBhNTU3OGYwNmVh
OTg3YWJmZTJlZTQzNDNiYWYwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCkBAIC00OTMsNzAgKzQ5Myw3MyBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgIFByZWRpY3RlZFR5
cGUgaW5kZXhQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7
CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDEgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS5maXJzdENoaWxkKCldOworICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbV9ncmFwaC5tX3Zh
ckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAgICAgIE5vZGVJbmRleCBj
aGlsZDMgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAyXTsK
KyAgICAgICAgUHJlZGljdGVkVHlwZSBpbmRleFByZWRpY3Rpb24gPSBtX2dyYXBoW2NoaWxkMl0u
cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoIShpbmRleFByZWRpY3Rpb24gJiBQcmVkaWN0SW50
MzIpICYmIGluZGV4UHJlZGljdGlvbikgewogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMo
bm9kZUluZGV4KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKSkgewotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJ5dGVBcnJheSk7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMygpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQnl0ZUFycmF5KCkpIHsKKyAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoUHJlZGljdEJ5dGVBcnJheSk7CisgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMykuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50OEFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQzKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgaWYgKG1fZ3JhcGhb
Y2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDEpLmZpbHRlcihQcmVkaWN0SW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoUHJlZGljdE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFy
cmF5KCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQzKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVj
dWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
UHJlZGljdEludDE2QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihQ
cmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihQcmVkaWN0
TnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyQXJyYXkpOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDMoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIp
OworICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXko
KSkgeworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihQcmVkaWN0SW50MzJBcnJh
eSk7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0VWludDhBcnJheSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMygpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGlmICht
X2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7CisgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFByZWRpY3RVaW50OEFycmF5KTsKKyAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0VWludDE2QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDMoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFd
LnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoUHJlZGljdFVpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5m
aWx0ZXIoUHJlZGljdE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
VWludDMyQXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
UHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDMoKSkuZmlsdGVy
KFByZWRpY3ROdW1iZXIpOworICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1
bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
UHJlZGljdFVpbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
UHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoUHJlZGlj
dE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZsb2F0MzJBcnJh
eSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMygpKS5maWx0ZXIoUHJlZGljdE51
bWJlcik7CisgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQz
MkFycmF5KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoUHJlZGljdEZs
b2F0MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFByZWRpY3RJ
bnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFByZWRpY3ROdW1iZXIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGbG9hdDY0QXJyYXkpOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDMoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgp
KSB7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFByZWRpY3RGbG9hdDY0QXJy
YXkpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAxMWE4
ZTA2ZjM3MTExNDcyMTA4ZTRhY2YwMWUzYTQ4OTlmMWU0MzMzLi40MGE3ZjY5NjdkNjlhMzY2NjAz
ZGI4MjdkMjk4MzVmOWE4ODAyYjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTY2Miw4ICsxNjYyLDE0IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlSW5k
ZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2Ug
PSBhZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHByb3BlcnR5KTsK
IAotICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVl
KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQocHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwor
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIFB1dEJ5VmFsLCBPcEluZm8o
MCksIE9wSW5mbygwKSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWwp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDEwNDViZGM4
ODNmYTI2NmE5MDNhMjU4YWY2NWQzOGVjN2FjNWJkY2YuLjBlM2ExZDJmNDgxZGYwNGEzMTI2Mzg4
MjQ0ZWE4NzViMWFlMjg1OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0y
MjUsMTUgKzIyNSwxNSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGFyaXRoTm9kZUZsYWdz
QXNTdHJpbmcoQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCiAgICAgLyogU2luY2UgYSBwdXQgdG8gJ2xl
bmd0aCcgbWF5IGludmFsaWRhdGUgb3B0aW1pemF0aW9ucyBoZXJlLCAqL1wKICAgICAvKiB0aGlz
IG11c3QgYmUgdGhlIGRpcmVjdGx5IHN1YnNlcXVlbnQgcHJvcGVydHkgcHV0LiAqL1wKICAgICBt
YWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKLSAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVD
bG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlWYWwsIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8o
UHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhHZXRCeUlkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQdXRCeUlkLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQdXRCeUlkRGly
ZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhD
aGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFN0cnVjdHVy
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oR2V0
UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1hY3JvKEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0U3RvcmFnZSkg
XAorICAgIG1hY3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdl
KSBcCiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1
dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBt
YWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAppbmRleCBkYTI2N2RjYzFlMjY5MzIwOGY5ZWU5
N2U2OGMwN2MxNTZiMTg0NGNiLi5mNmVmODIzZDMwM2E3Y2MwMDVhZTc2NjJiNzcyM2RkNGFlMDNl
M2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKQEAg
LTE5Miw5ICsxOTIsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8
IE5vZGVOZWVkc05lZ1plcm8pOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVyKTsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUFyaXRo
Tm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8pOwor
ICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS5maXJzdENoaWxkKCldOworICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAgICAgICAgICBO
b2RlSW5kZXggdmFsdWUgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCkgKyAyXTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtiYXNlXS5tZXJnZUFyaXRo
Tm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8pOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW3Byb3BlcnR5XS5tZXJnZUFyaXRoTm9kZUZs
YWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbdmFsdWVdLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZU5lZWRzTmVnWmVybyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCkBAIC05MjcsNiArOTMwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdl
ID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgM107CisgICAg
ICAgICAgICBpZiAobV9ncmFwaFtzdG9yYWdlXS5vcCA9PSBQaGFudG9tKQorICAgICAgICAgICAg
ICAgIG5vZGUuY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW4gPSAzOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgog
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0
OiB7CkBAIC0xMDgyLDkgKzEwOTMsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gaXNCb29s
ZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCAhcHJlZGljdGlvbjsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQorICAgIGJvb2wgYnlWYWxJbmRleElzUHVy
ZShOb2RlJiBub2RlKQogICAgIHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbiA9IG5vZGUucHJlZGljdGlvbigpOwogICAgICAgICByZXR1cm4gKHByZWRp
Y3Rpb24gJiBQcmVkaWN0SW50MzIpIHx8ICFwcmVkaWN0aW9uOwogICAgIH0KICAgICAKQEAgLTEx
MDYsNyArMTExNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICAg
ICAgICAgIHJldHVybiAhbG9naWNhbE5vdElzUHVyZShub2RlKTsKICAgICAgICAgY2FzZSBHZXRC
eVZhbDoKLSAgICAgICAgICAgIHJldHVybiAhYnlWYWxJc1B1cmUobm9kZSk7CisgICAgICAgICAg
ICByZXR1cm4gIWJ5VmFsSW5kZXhJc1B1cmUobV9ncmFwaFtub2RlLmNoaWxkMigpXSk7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGlu
IHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgpA
QCAtMTE3NiwyMSArMTE4NywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAg
ICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9k
ZSkpCisgICAgICAgICAgICAgICAgaWYgKCFieVZhbEluZGV4SXNQdXJlKG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAg
ICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5j
aGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAg
aWYgKCFieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczog
eworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUu
Zmlyc3RDaGlsZCgpICsgMV07CisgICAgICAgICAgICAgICAgaWYgKCFieVZhbEluZGV4SXNQdXJl
KG1fZ3JhcGhbcHJvcGVydHldKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZSA9
PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKHByb3BlcnR5KSA9PSBjYW5vbmljYWxpemUoY2hpbGQy
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltu
b2RlLmZpcnN0Q2hpbGQoKSArIDJdOwogICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYXNzdW1l
IHRoYXQgdGhlIFB1dEJ5VmFsIHdpbGwgY2xvYmJlciB0aGUgbG9jYXRpb24gd2UncmUgZ2V0dGlu
ZyBmcm9tLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyOyBpZiB3
ZSBrbm93IHRoYXQgdGhlIFB1dEJ5VmFsIGlzIGFjY2Vzc2luZyBhbiBhcnJheSBvZiBhCiAgICAg
ICAgICAgICAgICAgLy8gZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgR2V0QnlWYWwsIHRoZW4gd2Ug
a25vdyB0aGF0IHRoZXkgd29uJ3QgY2xvYmJlciBlYWNoIG90aGVyLgogICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgLy8g
R2V0QnlWYWwgY3VycmVudGx5IGFsd2F5cyBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3Npbmcg
YW4KQEAgLTEyNDYsMTUgKzEyNjEsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJl
KG5vZGUpKSB7CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCkgKyAxXTsKKyAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmRleElzUHVyZSht
X2dyYXBoW3Byb3BlcnR5XSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwg
c3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAg
ICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0
IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRl
eCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODksMTUgKzEzMDYs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVy
dHkgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxXTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnlWYWxJbmRleElzUHVyZShtX2dyYXBoW3Byb3BlcnR5XSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3Mg
YWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdl
ciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJl
CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0g
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMTMyNSwxNSArMTM0NCwxNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAg
ICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlh
czogeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDFdOworICAgICAgICAgICAgICAgIGlmIChi
eVZhbEluZGV4SXNQdXJlKG1fZ3JhcGhbcHJvcGVydHldKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkg
d2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3Mg
aW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAg
ICAgLy8gY2hhbmdlLgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAo
Y2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CkBAIC0xMzQzLDcgKzEzNjQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwog
ICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIGJvb2wgaGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikK
KyAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihO
b2RlSW5kZXggY2hpbGQxKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJ
bmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CiAgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0g
bV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKQEAgLTEzNTIsNyArMTM3Myw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsK
ICAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgYm9vbCBub2RlSGFz
SW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQz
MikgJiYgYmFzZVByZWRpY3Rpb24pOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgp
ID09IGNoaWxkMSAmJiBoYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uID09IG5vZGVIYXNJbnRlZ2Vy
SW5kZXhQcmVkaWN0aW9uKQorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMSAmJiBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTM2NywxMCArMTM4OCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFB1dEJ5
VmFsQWxpYXMgY2FuJ3QgY2hhbmdlIHRoZSBpbmRleGVkIHN0b3JhZ2UgcG9pbnRlcgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbDoKLSAgICAgICAgICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJl
ZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYgYnlWYWxJc1B1
cmUobm9kZSkpCisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOiB7CisgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IGJhc2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCldOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDFdOworICAgICAgICAgICAgICAgIGlmIChp
c0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmplY3RQcmVkaWN0aW9uKG1fZ3JhcGhbYmFzZV0ucHJlZGlj
dGlvbigpKSAmJiBieVZhbEluZGV4SXNQdXJlKG1fZ3JhcGhbcHJvcGVydHldKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoY2xv
YmJlcnNXb3JsZChpbmRleCkpCkBAIC0xNTUxLDE0ICsxNTc1LDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAg
ICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgaWYgKGJ5VmFsSW5k
ZXhJc1B1cmUobV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCiAgICAgICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSAmJiBnZXRCeVZhbExv
YWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAhPSBOb05vZGUpCisg
ICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCBwcm9wZXJ0eSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKSArIDFdOworICAgICAgICAgICAgaWYgKGJ5VmFsSW5kZXhJc1B1cmUobV9ncmFwaFtwcm9w
ZXJ0eV0pICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGJhc2UsIHByb3BlcnR5KSAhPSBOb05v
ZGUpCiAgICAgICAgICAgICAgICAgbm9kZS5vcCA9IFB1dEJ5VmFsQWxpYXM7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6CiAgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9k
ZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKSkpCkBAIC0xNTczLDcgKzE2MDAsOCBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKICAgICAg
ICAgICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGJvb2wgbm9kZUhhc0ludGVnZXJJbmRleFBy
ZWRpY3Rpb24gPSAhKCEoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpICYmIGJhc2VQcmVk
aWN0aW9uKTsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZUhhc0ludGVnZXJJbmRleFBy
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlv
bikKKyAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKaW5kZXggOWJiZmQzM2FlMjVkMmFjNTgzNmVmNGJhOTRkZGIyODI1NmE1ZWY5ZC4u
NTRmMWE3N2M5MmJhOWU1NjYxZDQzNDc1ZmM2NTk2YmFiODM2MzkzZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE1NDUsMTMgKzE1
NDUsMTcgQEAgc3RhdGljIHZvaWQgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKEpJVENvbXBpbGVy
JiBqaXQsIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBzb3UKIAogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9w
ZXJ0eSwgTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckJ5dGVBcnJheShOb2RlJiBub2RlKQogewotICAgIE5vZGVJbmRleCBiYXNlSW5kZXggPSBub2Rl
LmNoaWxkMSgpOwotICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKKyAg
ICBOb2RlSW5kZXggYmFzZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25v
ZGUuZmlyc3RDaGlsZCgpXTsKKyAgICBOb2RlSW5kZXggcHJvcGVydHlJbmRleCA9IG1faml0Lmdy
YXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDFdOworICAgIE5vZGVJ
bmRleCB2YWx1ZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmly
c3RDaGlsZCgpICsgMl07CisgICAgTm9kZUluZGV4IHN0b3JhZ2VJbmRleCA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDNdOwogICAgIAotICAgIGlm
ICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShiYXNlSW5kZXgpLm1fdHlw
ZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwor
ICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShiYXNlSW5kZXgp
Lm1fdHlwZSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNl
SW5kZXgpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0
ZUFycmF5VlB0cikpKTsKKyAgICB9CiAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlOwogICAgIEdQUlJl
ZyB2YWx1ZUdQUjsKIApAQCAtMTU5OCwxNCArMTYwMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTgogICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwogICAgICAgICB2YWx1ZUdQUiA9IGdw
cjsKICAgICB9Ci0gICAgQVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVy
dHkpOwotICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBiYXNlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc3Rv
cmFnZSh0aGlzKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIHN0b3JhZ2VJbmRl
eCk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgcHJvcGVydHkodGhpcywgcHJvcGVydHlJ
bmRleCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgIEFTU0VS
VCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2UsIEpTQnl0ZUFycmF5OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHN0b3Jh
Z2VSZWcpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ5dGVBcnJheTo6b2Zmc2V0T2ZTaXplKCkpKTsKLSAg
ICBtX2ppdC5zdG9yZTgodmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgQnl0ZUFycmF5Ojpv
ZmZzZXRPZkRhdGEoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHkuZ3By
KCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ5dGVBcnJheTo6b2Zmc2V0
T2ZTaXplKCkpKTsKKyAgICBtX2ppdC5zdG9yZTgodmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHkuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc09uZSwgQnl0ZUFycmF5OjpvZmZzZXRPZkRhdGEoKSkpOwogICAgIG91dE9mQm91bmRzLmxp
bmsoJm1faml0KTsKICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiB9CkBAIC0xNzAyLDEz
ICsxNzAzLDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYKICAgICB9CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHks
IE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVx
dWlyZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBz
aWduZWRuZXNzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9k
ZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMg
c3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3Mp
CiB7Ci0gICAgTm9kZUluZGV4IGJhc2VJbmRleCA9IG5vZGUuY2hpbGQxKCk7Ci0gICAgTm9kZUlu
ZGV4IHZhbHVlSW5kZXggPSBub2RlLmNoaWxkMygpOworICAgIE5vZGVJbmRleCBiYXNlSW5kZXgg
PSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOworICAg
IE5vZGVJbmRleCBwcm9wZXJ0eUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAgTm9kZUluZGV4IHZhbHVlSW5kZXggPSBtX2pp
dC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAyXTsKKyAgICBO
b2RlSW5kZXggc3RvcmFnZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25v
ZGUuZmlyc3RDaGlsZCgpICsgM107CisKKyAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMg
IT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VJbmRleCk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIGJhc2VJbmRleCwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZS5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOworICAgIH0KICAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJl
bWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRv
ci5tX3ZwdHIpKSk7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBzdG9yYWdlSW5k
ZXgpOworICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUluZGV4KTsKKyAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kczsKKyAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBl
ZEFycmF5VHlwZVNwZWNDaGVjayB8fCBzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVk
QXJyYXlTcGVjQ2hlY2spIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBiYXNlSW5kZXgpOworICAgICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjaykKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIGJhc2VJbmRleCwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZS5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOworICAgICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0g
Tm9UeXBlZEFycmF5U3BlY0NoZWNrKQorICAgICAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkp
OworICAgIH0KICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVlR1BSOwog
ICAgIApAQCAtMTc1MCwyNSArMTc2OCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJgogICAg
ICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwogICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKICAgICB9
Ci0gICAgQVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVydHkpOwotICAg
IEFTU0VSVCh2YWx1ZUdQUiAhPSBiYXNlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlz
KTsKLSAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgQVNTRVJUKHZh
bHVlR1BSICE9IHN0b3JhZ2VSZWcpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAoc3BlY3VsYXRp
b25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKQotICAgICAgICBvdXRPZkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zm
c2V0KSk7CiAKICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CiAgICAgY2FzZSAxOgotICAgICAg
ICBtX2ppdC5zdG9yZTgodmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkpOworICAgICAgICBt
X2ppdC5zdG9yZTgodmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIG1faml0LnN0b3JlMTYodmFsdWUuZ3ByKCksIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc1R3bykpOworICAgICAgICBtX2ppdC5zdG9yZTE2KHZhbHVlLmdwcigpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNUd28pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA0OgotICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNGb3VyKSk7CisgICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0x
ODIzLDM2ICsxODMyLDQwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yCiAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5v
ZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRz
IHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxh
dGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cykKIHsKLSAgICBOb2RlSW5k
ZXggYmFzZUluZGV4ID0gbm9kZS5jaGlsZDEoKTsKLSAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9
IG5vZGUuY2hpbGQzKCk7CisgICAgTm9kZUluZGV4IGJhc2VJbmRleCA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV07CisgICAgTm9kZUluZGV4IHByb3Bl
cnR5SW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCkgKyAxXTsKKyAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDJdOworICAgIE5vZGVJbmRleCBzdG9yYWdl
SW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkg
KyAzXTsKICAgICAKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFs
dWVJbmRleCk7Ci0gICAgCi0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlw
ZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwot
ICAgIAotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIHByb3BlcnR5SW5kZXgpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgc3RvcmFnZUluZGV4KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CisgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgCi0gICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3Rv
cmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9m
Qm91bmRzOwotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlT
cGVjQ2hlY2spCi0gICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKKyAgICBpZiAoc3BlY3VsYXRpb25SZXF1
aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayB8fCBzcGVjdWxhdGlvblJlcXVp
cmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spIHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlSW5kZXgpOworICAgICAgICBpZiAoc3BlY3VsYXRpb25S
ZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5n
cHIoKSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBpZiAoc3BlY3VsYXRp
b25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKQorICAgICAgICAgICAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgZGVzY3JpcHRv
ci5tX2xlbmd0aE9mZnNldCkpOworICAgIH0KKyAgICAKKwogICAgIAogICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKICAgICBjYXNlIDQ6IHsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUodmFsdWVPcC5mcHIoKSwgc2NyYXRjaC5m
cHIoKSk7CiAgICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHZhbHVlT3AuZnByKCks
IHNjcmF0Y2guZnByKCkpOwotICAgICAgICBtX2ppdC5zdG9yZUZsb2F0KHNjcmF0Y2guZnByKCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0ZvdXIpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVGbG9hdChzY3JhdGNoLmZw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNGb3VyKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIDg6Ci0gICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlT3AuZnByKCksIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlT3AuZnByKCksIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDZhZDhlYjA0YThiYjlmYTcyMjM5MDQxYzg4NmY3YjY1
MjkyY2M0ZmQuLjYxMWQ3ZjRmNmVmMTg2MmI0YjQwZWEyZDNjZGRkNjE1ZGQ0YzRjY2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTE5NzAs
NyArMTk3MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUm
KTsKICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlJik7CiAgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxPbkJ5dGVBcnJheShOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxG
b3JCeXRlQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYpOworICAgIHZv
aWQgY29tcGlsZVB1dEJ5VmFsRm9yQnl0ZUFycmF5KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVB
cml0aE11bChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZv
aWQgY29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwpAQCAtMTk4Niw5ICsxOTg2LDkgQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNw
ZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgdm9pZCBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNw
ZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7CiAgICAgdm9pZCBj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVp
cmVtZW50cyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVu
dHMpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJh
eVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzKTsKICAgICAKICAgICAvLyBJdCBpcyBhY2NlcHRhYmxl
IHRvIGhhdmUgc3RydWN0dXJlIGJlIGVxdWFsIHRvIHNjcmF0Y2gsIHNvIGxvbmcgYXMgeW91J3Jl
IGZpbmUKICAgICAvLyB3aXRoIHRoZSBzdHJ1Y3R1cmUgR1BSIGJlaW5nIGNsb2JiZXJlZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCmluZGV4IDc1ZjFkNWQ3ZjNmNmY0NjhlMDkxZjIzNzE1YmUyMmU3MDJhMmZhNzYuLjYzY2Uz
N2Y2OTNkNjBhMmYxNjIzYWEzM2MwNmZkNWI1YzAxYWNmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMjY5Mywx
MSArMjY5MywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQ
cmVkaWN0aW9uID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOworICAgICAgICBOb2Rl
SW5kZXggY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RD
aGlsZCgpXTsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDFdOworICAgICAgICBOb2RlSW5kZXggY2hp
bGQzID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsg
Ml07CisKKyAgICAgICAgUHJlZGljdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IGF0KGNoaWxkMiku
cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoIShiYXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQz
MikgJiYgYmFzZVByZWRpY3Rpb24pIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRl
IGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsgLy8gU2F2ZSBhIHJlZ2lzdGVyLCBzcGVjdWxh
dGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQ
UigpOwogICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UGF5bG9hZEdQUiA9IHByb3BlcnR5LnBh
eWxvYWRHUFIoKTsKQEAgLTI3MTEsNzQgKzI3MTUsNzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7Ci0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVCeXRl
QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQnl0ZUFycmF5KGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVCeXRlQXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQnl0ZUFycmF5KGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlKTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxk
U3BlY3VsYXRlQnl0ZUFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckJ5
dGVBcnJheShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkp
IHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgaXNJbnQ4QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
ayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAg
aWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBpc0ludDhBcnJheVByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVT
cGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7CiAg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBpc0ludDE2QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
ayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAg
aWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7CisgICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBpc0ludDE2QXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgaXNJbnQzMkFycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgeworICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgaXNJbnQzMkFy
cmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFy
cmF5KTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBl
U3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewor
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNV
aW50OEFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
VWludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZBcnJh
eVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5
cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVk
VHlwZWRBcnJheSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQx
NkFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQxNl90KSwgaXNVaW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxk
MSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3Bl
Y0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJf
dCksIGlzVWludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVj
Q2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91
bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDog
QWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6
IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxk
U3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDog
QWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
IAogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUp
LCBpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWND
aGVja3MpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJy
YXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
ZG91YmxlKSwgaXNGbG9hdDY0QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEp
Lm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWND
aGVja3MpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9Ci0KLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAg
IAorICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkg
JiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAt
Mjc5MSwxMiArMjc5MSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZVRhZ1JlZywgbm9kZS5j
aGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOworICAg
ICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdSZWcsIGNoaWxkMywgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwogCiAgICAgICAgIC8vIENoZWNrIHRo
YXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhp
biBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJl
ZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4K
LSAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBjaGlsZDEsIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAg
IHByb3BlcnR5LnVzZSgpOwpAQCAtMjg0MCw4NiArMjg0MCw4NyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV07CisgICAgICAgIE5vZGVJbmRleCBj
aGlsZDIgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkg
KyAxXTsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDJdOworICAgICAgICBOb2RlSW5kZXggY2hpbGQ0
ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgM107
CiAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRT
cGVjdWxhdGVCeXRlQXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQnl0
ZUFycmF5KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJy
YXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhf
dCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGludDE2X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsK
KyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIE5v
VHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KGludDMyX3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJyYXkpOworICAg
ICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIE5vVHlwZWRB
cnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4
X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFycmF5
U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQx
Nl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAg
ICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7CisgICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIE5vVHlwZWRB
cnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1
aW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgeworICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBOb1R5
cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+Zmxv
YXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGZsb2F0KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKKyAgICAgICAgaWYgKGF0KGNo
aWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgTm9UeXBlZEFycmF5U3BlY0No
ZWNrKTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRB
cnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwgTm9UeXBlZEFycmF5U3BlY0No
ZWNrKTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5
KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRv
dWJsZSksIE5vVHlwZWRBcnJheVNwZWNDaGVjayk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCiAgICAgICAgIH0KLQotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgYmFzZSk7
CiAgICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZVJlZywgdmFsdWUudGFnR1BSKCksIG5vZGUuY2hpbGQzKCksIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKLQotICAgICAgICAvLyBHZXQgdGhlIGFycmF5
IHN0b3JhZ2UuCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5
OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLQorICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAgICAgICB7CisgICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS50YWdHUFIoKSwgY2hpbGQzLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNo
aWxkMik7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKICAg
ICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUu
dGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2UuZ3ByKCksIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZS5ncHIoKSwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpKTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKaW5kZXggOTdiNTEyYWU0NjBlM2IxMDkwNjcwYjMwMTE0NzEyYjQxZWFmMmM4
Ni4uODk5ZWE4OTUwZmJmZmJjOTExOGJjYjk5ZWYwOTQ3NTVlNzY3Nzg4YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yNTk3
LDcgKzI1OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIEFTU0VSVChu
b2RlLmNoaWxkMygpICE9IE5vTm9kZSk7CiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5w
cmVkaWN0aW9uKCkgPT0gUHJlZGljdFN0cmluZykgewogICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCkBAIC0y
Njk1LDExICsyNjk1LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUg
YmFzZVByZWRpY3Rpb24gPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAg
IE5vZGVJbmRleCBjaGlsZDEgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCldOworICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbV9qaXQuZ3JhcGgoKS5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAgICAgIE5vZGVJbmRl
eCBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCkgKyAyXTsKKworICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gYXQoY2hp
bGQyKS5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGlj
dEludDMyKSAmJiBiYXNlUHJlZGljdGlvbikgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcz
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0
aGlzLCBjaGlsZDEpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBjaGls
ZDIpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBjaGlsZDMpOwogICAg
ICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgICAgICAgICAgR1BSUmVn
IGFyZzJHUFIgPSBhcmcyLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmcz
LmdwcigpOwpAQCAtMjcxMSw5MiArMjcxNSw5NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRT
cGVjdWxhdGVCeXRlQXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQnl0
ZUFycmF5KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBpc0ludDhBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
IDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBp
ZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgeworICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKICAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
IDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBp
ZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQx
NkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5
cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7
CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihpbnQzMl90KSwgaXNJbnQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgeworICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgaXNJbnQzMkFycmF5UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKICAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
IDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OEFycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5
VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJy
YXkpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkp
IHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90
KSwgaXNVaW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBl
KSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywg
VW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIGlzVWlu
dDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
ID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxh
dGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRB
cnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVk
QXJyYXlTcGVjQ2hlY2tzKTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRl
RmxvYXQzMkFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRB
cnJheVNwZWNDaGVja3MpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlRmxvYXQ2NEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpLCBpc0Zsb2F0
NjRBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkg
PyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwor
ICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewor
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwg
aXNGbG9hdDY0QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkg
PyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwog
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9Ci0KLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgIAorICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAgICAgICBOb2RlSW5kZXggY2hp
bGQ0ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsg
M107CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIE1h
cCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0
Y2ggcmVnaXN0ZXIuCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2
YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAg
ICAgICAgCiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgbm9k
ZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwor
ICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwogCiAgICAgICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdp
dGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUg
cHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVj
ay4KLSAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOworICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShj
aGlsZDEpLm1fdHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGJhc2VSZWcpLCBjaGlsZDEsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwog
CiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICB2
YWx1ZS51c2UoKTsKLSAgICAgICAgCisgICAgICAgIHN0b3JhZ2UudXNlKCk7CisKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2l0aGluQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogCiAgICAgICAgIC8v
IENvZGUgdG8gaGFuZGxlIHB1dCBiZXlvbmQgYXJyYXkgYm91bmRzLgpAQCAtMjgwNywxMCArMjgx
NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAg
ICB3aXRoaW5BcnJheUJvdW5kcy5saW5rKCZtX2ppdCk7CiAKLSAgICAgICAgLy8gR2V0IHRoZSBh
cnJheSBzdG9yYWdlLgotICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hSZWc7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0KICAgICAgICAgLy8gQ2hlY2sg
aWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0lu
VmVjdG9yLgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSk7CkBAIC0yODM0LDgzICsyODM4LDg3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAg
ICAgUHJlZGljdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV07CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIg
PSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxXTsK
KyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJl
bltub2RlLmZpcnN0Q2hpbGQoKSArIDJdOworICAgICAgICBOb2RlSW5kZXggY2hpbGQ0ID0gbV9q
aXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgM107CisKKyAg
ICAgICAgUHJlZGljdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IGF0KGNoaWxkMikucHJlZGljdGlv
bigpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGJhc2VQcmVkaWN0aW9uLCAoYmFzZVByZWRpY3Rp
b24gJiBQcmVkaWN0SW50MzIpIHx8ICFiYXNlUHJlZGljdGlvbik7CiAKLSAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAg
ICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQnl0ZUFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0
ZUJ5dGVBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXko
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
ZihpbnQ4X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJyYXkpOworICAg
ICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgeworICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIE5vVHlwZWRBcnJh
eVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3Qp
LCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJyYXkpOworICAgIAorICAgICAg
ICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIE5vVHlwZWRBcnJh
eVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3Qp
LCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJyYXkpOworICAgIAorICAgICAg
ICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIE5vVHlwZWRBcnJh
eVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3Qp
LCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgCisgICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFy
cmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQxNl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAg
IAorICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7
CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCks
IE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZih1aW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFy
cmF5KTsKKyAgICAKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDMy
QXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDMyX3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKKyAg
ICAKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkp
IHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0
KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91Ymxl
KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKKyAgICAKKyAgICAgICAgaWYgKGF0KGNoaWxkMSku
c2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIE5vVHlwZWRBcnJheVNwZWNDaGVjayk7
CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KIAotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsK
LQotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hp
bGQzKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOworICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAorICAgICAgICB7CisgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdw
cigpLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywg
c2NyYXRjaFJlZyk7CisgICAgICAgIH0KKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBjaGlsZDQpOwogICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkp
LCBzdG9yYWdlUmVnKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwogCiAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119679</attachid>
            <date>2011-12-16 14:52:55 -0800</date>
            <delta_ts>2011-12-16 15:33:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74747-20111216145253.patch</filename>
            <type>text/plain</type>
            <size>66901</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MTM1MzJjNGQyMDE3ODI1ZGIwMTc4MGFlMDMxY2JiZGUwOWNmYTQ3Li5jODdkMDhiZmMwNTllYWFh
NDJkZmZjYWFiMDljODE0YjhmNzhjYzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxMS0xMi0xNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFB1dEJ5VmFsW0FsaWFzXSB1bm5lY2Vzc2FyaWx5IHJlbG9hZHMgdGhlIHN0b3Jh
Z2UgYnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDc0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgUHV0QnlWYWwgdXNlIEdldEluZGV4ZWRTdG9yYWdlIHRvIGxvYWQgdGhlIHN0b3JhZ2Ug
YnVmZmVyLgorICAgICAgICBUaGlzIHJlcXVpcmVkIHN3aXRjaGluZyBQdXRCeVZhbCB0byBhIHZh
cmFyZyBub2RlICh3aGljaCBpcworICAgICAgICByZXNwb25zaWJsZSBmb3IgbW9zdCBvZiB0aGUg
bm9pc2UgaW4gdGhpcyBwYXRjaCkuICBUaGlzIGZpeGVzIHRoZQorICAgICAgICByZW1haW5pbmcg
cG9ydGlvbiBvZiB0aGUga3Jha2VuIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHRoZSBHZXRCeVZhbAor
ICAgICAgICBzdG9yYWdlIGxvYWQgZWxpbWluYXRpb24sIGFuZCBhIDEtNSUgd2luIG9uIHNvbWUg
b2YgdGhlIHN1YiB0ZXN0cyBvZgorICAgICAgICB0aGUgdHlwZWQgYXJyYXkgYmVuY2htYXJrIGF0
OgorICAgICAgICBodHRwOi8vc3RlcGhlbmViLmdpdGh1Yi5jb20vd2ViZ2wtbWF0cml4LWJlbmNo
bWFya3MvbWF0cml4X2JlbmNobWFyay5odG1sCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFn
YXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6YnlWYWxJ
bmRleElzUHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2xvYmJlcnNXb3Js
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlWYWxMb2FkRWxpbWluYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmNoZWNrU3RydWN0dXJlTG9hZEVs
aW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRCeU9mZnNldExv
YWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0UHJvcGVy
dHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjpnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9yQnl0ZUFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDExLTEyLTE1ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRXZlbnREaXNwYXRj
aGVyIHNob3VsZCBoYW5kbGUgd2hlZWwgZXZlbnRzIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAppbmRleCBl
NTkwMTEwYjA5MDQ4MmFiODcyZjU4NWM4YWVkNWI2NjY5OGNiZDU3Li42MjQ3MmQ3NzlkMGE1NTc4
ZjA2ZWE5ODdhYmZlMmVlNDM0M2JhZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTQ5Myw3MCArNDkzLDczIEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgICAgICAgICAgCiAgICAg
Y2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgUHJlZGlj
dGVkVHlwZSBpbmRleFByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKTsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bltub2RlLmZpcnN0Q2hpbGQoKV07CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxXTsKKyAgICAgICAgTm9kZUlu
ZGV4IGNoaWxkMyA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSAr
IDJdOworICAgICAgICBQcmVkaWN0ZWRUeXBlIGluZGV4UHJlZGljdGlvbiA9IG1fZ3JhcGhbY2hp
bGQyXS5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmICghKGluZGV4UHJlZGljdGlvbiAmIFByZWRp
Y3RJbnQzMikgJiYgaW5kZXhQcmVkaWN0aW9uKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhub2RlSW5kZXgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3Ao
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpKSB7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qnl0ZUFycmF5KTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQzKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAg
ICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKSkgeworICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihQcmVkaWN0Qnl0ZUFycmF5KTsKKyAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDMoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7CisgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFByZWRpY3RJbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dDE2QXJyYXkoKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEludDE2QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDMoKSku
ZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3Vs
ZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZp
bHRlcihQcmVkaWN0SW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmls
dGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFBy
ZWRpY3ROdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzJBcnJh
eSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMygpKS5maWx0ZXIoUHJlZGljdE51
bWJlcik7CisgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50MzJB
cnJheSgpKSB7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFByZWRpY3RJbnQz
MkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoUHJlZGljdEludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RVaW50OEFycmF5KTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQzKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoUHJlZGljdFVpbnQ4QXJyYXkpOworICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDMpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RVaW50MTZBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMygpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDEpLmZpbHRlcihQcmVkaWN0VWludDE2QXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQz
MkFycmF5KCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RVaW50MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMygpKS5m
aWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxk
U3BlY3VsYXRlVWludDMyQXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZp
bHRlcihQcmVkaWN0VWludDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihQ
cmVkaWN0TnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmxvYXQz
MkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRp
Y3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQzKCkpLmZpbHRlcihQcmVk
aWN0TnVtYmVyKTsKKyAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVG
bG9hdDMyQXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihQcmVk
aWN0RmxvYXQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoUHJl
ZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoUHJlZGljdE51
bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZsb2F0NjRBcnJheSk7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMygpKS5maWx0ZXIoUHJlZGljdE51bWJl
cik7CisgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFy
cmF5KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoUHJlZGljdEZsb2F0
NjRBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFByZWRpY3RJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4
IDExYThlMDZmMzcxMTE0NzIxMDhlNGFjZjAxZTNhNDg5OWYxZTQzMzMuLjQwYTdmNjk2N2Q2OWEz
NjY2MDNkYjgyN2QyOTgzNWY5YTg4MDJiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNjYyLDggKzE2NjIsMTQgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3Rv
cmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgYmFzZSwgcHJvcGVy
dHkpOwogCi0gICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5VmFsLCBiYXNlLCBwcm9wZXJ0eSwg
dmFsdWUpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1
ZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0QnlWYWwsIE9w
SW5mbygwKSwgT3BJbmZvKDApKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5
X3ZhbCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggMTA0
NWJkYzg4M2ZhMjY2YTkwM2EyNThhZjY1ZDM4ZWM3YWM1YmRjZi4uMGUzYTFkMmY0ODFkZjA0YTMx
MjYzODgyNDRlYTg3NWIxYWUyODU5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
QEAgLTIyNSwxNSArMjI1LDE1IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3NBc1N0cmluZyhBcml0aE5vZGVGbGFncyBmbGFncykKICAgICAvKiBTaW5jZSBhIHB1dCB0
byAnbGVuZ3RoJyBtYXkgaW52YWxpZGF0ZSBvcHRpbWl6YXRpb25zIGhlcmUsICovXAogICAgIC8q
IHRoaXMgbXVzdCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVudCBwcm9wZXJ0eSBwdXQuICovXAog
ICAgIG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZU1pZ2h0Q2xvYmJlcikgXAotICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpIFwKLSAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBt
YWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQg
fCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKEdldEJ5SWQsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFB1dEJ5SWQs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFB1dEJ5
SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1h
Y3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0U3Ry
dWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNy
byhHZXRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0gICAgbWFjcm8oR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRTdG9y
YWdlKSBcCisgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0
b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFj
cm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAog
ICAgIG1hY3JvKEdldEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCmluZGV4IGRhMjY3ZGNjMWUyNjkzMjA4
ZjllZTk3ZTY4YzA3YzE1NmIxODQ0Y2IuLmY2ZWY4MjNkMzAzYTdjYzAwNWFlNzY2MmI3NzIzZGQ0
YWUwM2UzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNw
cApAQCAtMTkyLDkgKzE5MiwxMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZU5lZWRzTmVnWmVybyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyB8IE5vZGVVc2VkQXNOdW1i
ZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdl
QXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
byk7CisgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bltub2RlLmZpcnN0Q2hpbGQoKV07CisgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxXTsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCB2YWx1ZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0
Q2hpbGQoKSArIDJdOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW2Jhc2VdLm1lcmdl
QXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
byk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbcHJvcGVydHldLm1lcmdlQXJpdGhO
b2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVyKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFt2YWx1ZV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyB8IE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTkyNyw2ICs5MzAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgUHV0QnlWYWw6
CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0
b3JhZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAzXTsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoW3N0b3JhZ2VdLm9wID09IFBoYW50b20pCisgICAgICAg
ICAgICAgICAgbm9kZS5jaGlsZHJlbi52YXJpYWJsZS5udW1DaGlsZHJlbiA9IDM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlW
YWw6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6IHsKQEAgLTEwODIsOSArMTA5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBp
c0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8ICFwcmVkaWN0aW9uOwogICAgIH0KICAg
ICAKLSAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUpCisgICAgYm9vbCBieVZhbEluZGV4
SXNQdXJlKE5vZGUmIG5vZGUpCiAgICAgewotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS5wcmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiAo
cHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikgfHwgIXByZWRpY3Rpb247CiAgICAgfQogICAgIApA
QCAtMTEwNiw3ICsxMTE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBMb2dpY2FsTm90Ogog
ICAgICAgICAgICAgcmV0dXJuICFsb2dpY2FsTm90SXNQdXJlKG5vZGUpOwogICAgICAgICBjYXNl
IEdldEJ5VmFsOgotICAgICAgICAgICAgcmV0dXJuICFieVZhbElzUHVyZShub2RlKTsKKyAgICAg
ICAgICAgIHJldHVybiAhYnlWYWxJbmRleElzUHVyZShtX2dyYXBoW25vZGUuY2hpbGQyKCldKTsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIElmIGJ5IHNvbWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNh
c2UgaW4gcmVsZWFzZSBidWlsZCBpdCdzIHNhZmVyIHRvIGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29y
c3QuCkBAIC0xMTc2LDIxICsxMTg3LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAg
ICAgICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYgKCFieVZhbElzUHVy
ZShub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJ5VmFsSW5kZXhJc1B1cmUobV9ncmFwaFtu
b2RlLmNoaWxkMigpXSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShu
b2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAg
ICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFs
aWFzOiB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGJhc2Ug
PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOworICAgICAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS5maXJzdENoaWxkKCkgKyAxXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ5VmFsSW5kZXhJ
c1B1cmUobV9ncmFwaFtwcm9wZXJ0eV0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5v
bmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpOworICAgICAgICAgICAgICAgIGlmIChi
YXNlID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUocHJvcGVydHkpID09IGNhbm9uaWNhbGl6ZShj
aGlsZDIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMl07CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBh
c3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBn
ZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7
IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEK
ICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhl
biB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIuCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAg
ICAvLyBHZXRCeVZhbCBjdXJyZW50bHkgYWx3YXlzIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vz
c2luZyBhbgpAQCAtMTI0NiwxNSArMTI2MSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJ
c1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltu
b2RlLmZpcnN0Q2hpbGQoKSArIDFdOworICAgICAgICAgICAgICAgIGlmIChieVZhbEluZGV4SXNQ
dXJlKG1fZ3JhcGhbcHJvcGVydHldKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRC
eVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAg
ICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBm
b3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdl
LgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxk
KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI4OSwxNSAr
MTMwNiwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBw
cm9wZXJ0eSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDFd
OworICAgICAgICAgICAgICAgIGlmIChieVZhbEluZGV4SXNQdXJlKG1fZ3JhcGhbcHJvcGVydHld
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQg
aXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBp
bnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1
Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0xMzI1LDE1ICsxMzQ0LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAg
ICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOiB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAgICAgICAgICAgICAg
aWYgKGJ5VmFsSW5kZXhJc1B1cmUobV9ncmFwaFtwcm9wZXJ0eV0pKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBh
cnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4g
aXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQogICAgICAgICAgICAg
ICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKQEAgLTEzNDMsNyArMTM2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05v
ZGU7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2Fk
RWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgYm9vbCBoYXNJbnRlZ2VySW5kZXhQcmVkaWN0
aW9uKQorICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0
aW9uKE5vZGVJbmRleCBjaGlsZDEpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBz
dGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXggaW5k
ZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewpAQCAtMTM1Miw3ICsxMzcz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZTogewogICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICBib29sIG5v
ZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uID0gISghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGlj
dEludDMyKSAmJiBiYXNlUHJlZGljdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxICYmIGhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPT0gbm9kZUhhc0lu
dGVnZXJJbmRleFByZWRpY3Rpb24pCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxICYmIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC0xMzY3LDEwICsxMzg4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8g
UHV0QnlWYWxBbGlhcyBjYW4ndCBjaGFuZ2UgdGhlIGluZGV4ZWQgc3RvcmFnZSBwb2ludGVyCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmpl
Y3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBieVZh
bElzUHVyZShub2RlKSkKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKKyAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggYmFzZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0
Q2hpbGQoKV07CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAgICAgICAgICAgICAg
aWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFByZWRpY3Rpb24obV9ncmFwaFtiYXNlXS5w
cmVkaWN0aW9uKCkpICYmIGJ5VmFsSW5kZXhJc1B1cmUobV9ncmFwaFtwcm9wZXJ0eV0pKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlm
IChjbG9iYmVyc1dvcmxkKGluZGV4KSkKQEAgLTE1NTEsMTQgKzE1NzUsMTcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6
Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAgICBpZiAoYnlW
YWxJbmRleElzUHVyZShtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKICAgICAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2Rl
LmNoaWxkMigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpICYmIGdldEJ5
VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICE9IE5vTm9k
ZSkKKyAgICAgICAgY2FzZSBQdXRCeVZhbDogeworICAgICAgICAgICAgTm9kZUluZGV4IGJhc2Ug
PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOworICAgICAgICAg
ICAgTm9kZUluZGV4IHByb3BlcnR5ID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmly
c3RDaGlsZCgpICsgMV07CisgICAgICAgICAgICBpZiAoYnlWYWxJbmRleElzUHVyZShtX2dyYXBo
W3Byb3BlcnR5XSkgJiYgZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oYmFzZSwgcHJvcGVydHkpICE9
IE5vTm9kZSkKICAgICAgICAgICAgICAgICBub2RlLm9wID0gUHV0QnlWYWxBbGlhczsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKICAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlv
bihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpKSkKQEAgLTE1NzMsNyArMTYwMCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewog
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ucHJlZGljdGlvbigpOwogICAgICAgICAgICAgYm9vbCBub2RlSGFzSW50ZWdlcklu
ZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFz
ZVByZWRpY3Rpb24pOwotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2RlSGFzSW50ZWdlcklu
ZGV4UHJlZGljdGlvbikpOworICAgICAgICAgICAgaWYgKG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVk
aWN0aW9uKQorICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAppbmRleCA5YmJmZDMzYWUyNWQyYWM1ODM2ZWY0YmE5NGRkYjI4MjU2YTVl
ZjlkLi41NGYxYTc3YzkyYmE5ZTU2NjFkNDM0NzVmYzY1OTZiYWI4MzYzOTNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTU0NSwx
MyArMTU0NSwxNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUQ29t
cGlsZXImIGppdCwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIHNvdQogCiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9yQnl0ZUFycmF5KE5vZGUmIG5vZGUpCiB7Ci0gICAgTm9kZUluZGV4IGJhc2VJbmRleCA9
IG5vZGUuY2hpbGQxKCk7Ci0gICAgTm9kZUluZGV4IHZhbHVlSW5kZXggPSBub2RlLmNoaWxkMygp
OworICAgIE5vZGVJbmRleCBiYXNlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS5maXJzdENoaWxkKCldOworICAgIE5vZGVJbmRleCBwcm9wZXJ0eUluZGV4ID0gbV9q
aXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAg
Tm9kZUluZGV4IHZhbHVlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS5maXJzdENoaWxkKCkgKyAyXTsKKyAgICBOb2RlSW5kZXggc3RvcmFnZUluZGV4ID0gbV9qaXQu
Z3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgM107CiAgICAgCi0g
ICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGJhc2VJbmRleCku
bV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIp
KSk7CisgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGJhc2VJ
bmRleCkubV90eXBlKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IGJhc2VJbmRleCk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5n
cHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNCeXRlQXJyYXlWUHRyKSkpOworICAgIH0KICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAgICAg
R1BSUmVnIHZhbHVlR1BSOwogCkBAIC0xNTk4LDE0ICsxNjAyLDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHBy
b3BlcnR5LCBOCiAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CiAgICAgICAgIHZhbHVlR1BS
ID0gZ3ByOwogICAgIH0KLSAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBw
cm9wZXJ0eSk7Ci0gICAgQVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwotICAgIEdQUlRlbXBvcmFy
eSBzdG9yYWdlKHRoaXMpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgc3RvcmFn
ZUluZGV4KTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9w
ZXJ0eUluZGV4KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAg
QVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VSZWcpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwg
c3RvcmFnZVJlZyk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSkp
OwotICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBCeXRlQXJy
YXk6Om9mZnNldE9mRGF0YSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnl0ZUFycmF5Ojpv
ZmZzZXRPZlNpemUoKSkpOworICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eS5ncHIoKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzT25lLCBCeXRlQXJyYXk6Om9mZnNldE9mRGF0YSgpKSk7CiAgICAgb3V0T2ZCb3Vu
ZHMubGluaygmbV9qaXQpOwogICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKIH0KQEAgLTE3
MDIsMTMgKzE3MDMsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJgogICAgIH0KIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9w
ZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRp
b25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2Rl
JiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVt
ZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVk
bmVzcykKIHsKLSAgICBOb2RlSW5kZXggYmFzZUluZGV4ID0gbm9kZS5jaGlsZDEoKTsKLSAgICBO
b2RlSW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hpbGQzKCk7CisgICAgTm9kZUluZGV4IGJhc2VJ
bmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV07
CisgICAgTm9kZUluZGV4IHByb3BlcnR5SW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxXTsKKyAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9
IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDJdOwor
ICAgIE5vZGVJbmRleCBzdG9yYWdlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS5maXJzdENoaWxkKCkgKyAzXTsKKworICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVt
ZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7CisgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUluZGV4KTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwgYmFzZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
ZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgfQogICAgIAotICAgIGlmIChzcGVjdWxhdGlvblJl
cXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNl
SW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fdnB0cikpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIHN0b3Jh
Z2VJbmRleCk7CisgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5SW5kZXgpOworICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG91dE9mQm91bmRzOworICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBO
b1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIHx8IHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5v
VHlwZWRBcnJheVNwZWNDaGVjaykgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIGJhc2VJbmRleCk7CisgICAgICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAh
PSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwgYmFzZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
ZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50
cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgICAgICAgICBvdXRPZkJvdW5kcyA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zm
c2V0KSk7CisgICAgfQogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcgdmFsdWVH
UFI7CiAgICAgCkBAIC0xNzUwLDI1ICsxNzY4LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
CiAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CiAgICAgICAgIHZhbHVlR1BSID0gZ3ByOwog
ICAgIH0KLSAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBwcm9wZXJ0eSk7
Ci0gICAgQVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwotICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdl
KHRoaXMpOwotICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICBBU1NF
UlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7Ci0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VS
ZWcpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwotICAgIGlmIChzcGVj
dWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spCi0gICAgICAgIG91
dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5n
dGhPZmZzZXQpKTsKIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKICAgICBjYXNlIDE6Ci0g
ICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CisgICAg
ICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgbV9qaXQuc3RvcmUxNih2YWx1ZS5ncHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzVHdvKSk7CisgICAgICAgIG1faml0LnN0b3JlMTYodmFsdWUuZ3ByKCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc1R3bykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6Ci0gICAg
ICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91cikpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTE4MjMsMzYgKzE4MzIsNDAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IKICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9k
ZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJl
bWVudHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNw
ZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzKQogewotICAgIE5v
ZGVJbmRleCBiYXNlSW5kZXggPSBub2RlLmNoaWxkMSgpOwotICAgIE5vZGVJbmRleCB2YWx1ZUlu
ZGV4ID0gbm9kZS5jaGlsZDMoKTsKKyAgICBOb2RlSW5kZXggYmFzZUluZGV4ID0gbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICBOb2RlSW5kZXgg
cHJvcGVydHlJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0
Q2hpbGQoKSArIDFdOworICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMl07CisgICAgTm9kZUluZGV4IHN0
b3JhZ2VJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKSArIDNdOwogICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlz
LCB2YWx1ZUluZGV4KTsKLSAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIp
KSk7Ci0gICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAKLSAgICBHUFJU
ZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgcHJvcGVydHlJbmRleCk7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBzdG9yYWdlSW5kZXgpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAKLSAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3Iu
bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3V0T2ZCb3VuZHM7Ci0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRB
cnJheVNwZWNDaGVjaykKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChzcGVjdWxhdGlv
blJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIHx8IHNwZWN1bGF0aW9u
UmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjaykgeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VJbmRleCk7CisgICAgICAgIGlmIChzcGVjdWxh
dGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQorICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChi
YXNlLmdwcigpKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIGlmIChzcGVj
dWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgICAgICAg
ICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBkZXNj
cmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CisgICAgfQorICAgIAorCiAgICAgCiAgICAgc3dpdGNo
IChlbGVtZW50U2l6ZSkgewogICAgIGNhc2UgNDogewogICAgICAgICBGUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKICAgICAgICAgbV9qaXQubW92ZURvdWJsZSh2YWx1ZU9wLmZwcigpLCBzY3Jh
dGNoLmZwcigpKTsKICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvRmxvYXQodmFsdWVPcC5m
cHIoKSwgc2NyYXRjaC5mcHIoKSk7Ci0gICAgICAgIG1faml0LnN0b3JlRmxvYXQoc2NyYXRjaC5m
cHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRm91cikpOworICAgICAgICBtX2ppdC5zdG9yZUZsb2F0KHNjcmF0
Y2guZnByKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgODoKLSAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWVPcC5mcHIoKSwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWVPcC5mcHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggNmFkOGViMDRhOGJiOWZhNzIyMzkwNDFjODg2
ZjdiNjUyOTJjYzRmZC4uNjExZDdmNGY2ZWYxODYyYjRiNDBlYTJkM2NkZGQ2MTVkZDRjNGNjYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAt
MTk3MCw3ICsxOTcwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVWYWx1ZVRvSW50MzIo
Tm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVVJbnQzMlRvTnVtYmVyKE5vZGUmKTsKICAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbE9uQnl0ZUFycmF5KE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVQdXRC
eVZhbEZvckJ5dGVBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJik7Cisg
ICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoTm9kZSYpOwogICAgIHZvaWQgY29t
cGlsZUFyaXRoTXVsKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aE1vZChOb2RlJik7CiAg
ICAgdm9pZCBjb21waWxlU29mdE1vZHVsbyhOb2RlJik7CkBAIC0xOTg2LDkgKzE5ODYsOSBAQCBw
cml2YXRlOgogICAgIH07CiAgICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFy
cmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKLSAgICB2
b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1l
bnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFy
cmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKICAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9u
UmVxdWlyZW1lbnRzKTsKLSAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVp
cmVtZW50cyk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBl
ZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMpOwogICAgIAogICAgIC8vIEl0IGlzIGFjY2Vw
dGFibGUgdG8gaGF2ZSBzdHJ1Y3R1cmUgYmUgZXF1YWwgdG8gc2NyYXRjaCwgc28gbG9uZyBhcyB5
b3UncmUgZmluZQogICAgIC8vIHdpdGggdGhlIHN0cnVjdHVyZSBHUFIgYmVpbmcgY2xvYmJlcmVk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKaW5kZXggNzVmMWQ1ZDdmM2Y2ZjQ2OGUwOTFmMjM3MTViZTIyZTcwMmEyZmE3Ni4u
NjNjZTM3ZjY5M2Q2MGEyZjE2MjNhYTMzYzA2ZmQ1YjVjMDFhY2Y5OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0y
NjkzLDExICsyNjkzLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUg
YmFzZVByZWRpY3Rpb24gPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAg
IE5vZGVJbmRleCBjaGlsZDEgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCldOworICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbV9qaXQuZ3JhcGgoKS5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMV07CisgICAgICAgIE5vZGVJbmRl
eCBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCkgKyAyXTsKKworICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gYXQoY2hp
bGQyKS5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGlj
dEludDMyKSAmJiBiYXNlUHJlZGljdGlvbikgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsgLy8gU2F2ZSBhIHJlZ2lzdGVyLCBzcGVj
dWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCi0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNw
ZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5VGFnR1BSID0gcHJvcGVydHku
dGFnR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlQYXlsb2FkR1BSID0gcHJvcGVy
dHkucGF5bG9hZEdQUigpOwpAQCAtMjcxMSw3NCArMjcxNSw3MCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUJ5dGVBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXko
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUJ5
dGVBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5z
aG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9yQnl0ZUFycmF5KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBpc0ludDhBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOworICAg
ICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgeworICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5
VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5
KTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXko
KSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOworICAg
ICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZB
cnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRB
cnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRB
cnJheSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFy
cmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9q
aXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Cisg
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBpc0lu
dDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5
cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5
cGVkQXJyYXkpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWlu
dDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OEFycmF5UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJh
eVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFy
cmF5KTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgp
KSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3Qp
LCBpc1VpbnQ4QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkg
PyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVu
c2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVj
dWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBpc1VpbnQx
NkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5z
aWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRl
VWludDE2QXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YodWludDE2X3QpLCBpc1VpbnQxNkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
Y2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJy
YXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQzMl90KSwgaXNVaW50MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJh
eVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgaXNVaW50MzJBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hl
Y2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0No
ZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5z
aG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hl
Y2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRv
dWJsZSksIGlzRmxvYXQ2NEFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5
U3BlY0NoZWNrcyk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0
NjRBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNp
emVvZihkb3VibGUpLCBpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGNo
aWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5
U3BlY0NoZWNrcyk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0K
LQotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsK
KyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxk
Mik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIC8vIE1hcCBiYXNlLCBwcm9w
ZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIu
CkBAIC0yNzkxLDEyICsyNzkxLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBu
b2RlLmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7
CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZVRhZ1JlZywgY2hpbGQzLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7CiAKICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQg
d2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2
ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNo
ZWNrLgotICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIGNoaWxk
MSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAg
ICAgICAgcHJvcGVydHkudXNlKCk7CkBAIC0yODQwLDg2ICsyODQwLDg3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICAgICAgTm9kZUlu
ZGV4IGNoaWxkMiA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKSArIDFdOworICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbV9qaXQuZ3JhcGgoKS5tX3Zh
ckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMl07CisgICAgICAgIE5vZGVJbmRleCBj
aGlsZDQgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkg
KyAzXTsKIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQnl0
ZUFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNo
b3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JCeXRlQXJyYXkobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2ln
bmVkVHlwZWRBcnJheSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUlu
dDhBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
aW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoaW50MTZfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRB
cnJheSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXko
KSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90
KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewor
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgTm9U
eXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7CisgICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBOb1R5cGVk
QXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
dWludDE2X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKKyAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgTm9U
eXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQz
MkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQzMl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7
CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCks
IE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoZmxvYXQpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOworICAgICAgICBpZiAo
YXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+Zmxv
YXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBOb1R5cGVkQXJyYXlT
cGVjQ2hlY2spOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxv
YXQ2NEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpLCBOb1R5cGVkQXJyYXlT
cGVjQ2hlY2spOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0
QXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YoZG91YmxlKSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKICAgICAgICAgfQotCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBi
YXNlKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgIHdyaXRl
QmFycmllcihiYXNlUmVnLCB2YWx1ZS50YWdHUFIoKSwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIC8vIEdldCB0aGUg
YXJyYXkgc3RvcmFnZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMsIGJhc2UpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLnRhZ0dQUigpLCBjaGls
ZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
fQorICAgIAorICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgY2hpbGQyKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQp
OwogICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2
YWx1ZS50YWdHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZS5ncHIoKSwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHZh
bHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlLmdwcigp
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSkpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAppbmRleCA5N2I1MTJhZTQ2MGUzYjEwOTA2NzBiMzAxMTQ3MTJiNDFl
YWYyYzg2Li44OTllYTg5NTBmYmZmYmM5MTE4YmNiOTllZjA5NDc1NWU3Njc3ODhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAg
LTI1OTcsNyArMjU5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG5vZGUuY2hpbGQzKCkgIT0gTm9Ob2RlKTsKICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQx
KCkpLnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0U3RyaW5nKSB7CiAgICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPblN0cmluZyhub2RlKTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
QEAgLTI2OTUsMTEgKzI2OTUsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAgICAgUHJlZGljdGVk
VHlwZSBiYXNlUHJlZGljdGlvbiA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltu
b2RlLmZpcnN0Q2hpbGQoKV07CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBtX2ppdC5ncmFw
aCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxXTsKKyAgICAgICAgTm9k
ZUluZGV4IGNoaWxkMyA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0
Q2hpbGQoKSArIDJdOworCisgICAgICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBh
dChjaGlsZDIpLnByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKCEoYmFzZVByZWRpY3Rpb24gJiBQ
cmVkaWN0SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzModGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcxKHRoaXMsIGNoaWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMs
IGNoaWxkMik7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIGNoaWxkMyk7
CiAgICAgICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgYXJnM0dQUiA9
IGFyZzMuZ3ByKCk7CkBAIC0yNzExLDkyICsyNzE1LDk2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQnl0
ZUFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNo
b3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JCeXRlQXJyYXkobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7CisgICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgaXNJbnQ4QXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgaXNJbnQxNkFycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgaXNJbnQxNkFy
cmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFy
cmF5KTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
ayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAg
aWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OEFycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7CisgICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBpc1VpbnQ4
QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVk
QXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlw
ZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50
MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBpc1VpbnQxNkFycmF5UHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRB
cnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBl
ZEFycmF5KTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJy
YXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWlu
dDE2X3QpLCBpc1VpbnQxNkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5t
X3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hl
Y2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
IAogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwg
aXNVaW50MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVj
a3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNw
ZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgaXNVaW50MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxU
eXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5m
bG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxs
VHlwZWRBcnJheVNwZWNDaGVja3MpOworICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVj
dWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxU
eXBlZEFycmF5U3BlY0NoZWNrcyk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIGlz
RmxvYXQ2NEFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNr
cyk7CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgp
KSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3Vi
bGUpLCBpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90
eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNr
cyk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KLQotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgCisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKKyAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgIE5vZGVJbmRl
eCBjaGlsZDQgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCkgKyAzXTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOwog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQorICAgICAgICAKICAgICAgICAg
Ly8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEg
c2NyYXRjaCByZWdpc3Rlci4KICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwog
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OwogICAgICAgICAKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigp
LCBub2RlLmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJl
Zyk7CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7CiAKICAgICAgICAgLy8g
Q2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWlu
ZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhl
IGNoZWNrLgotICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKGNoaWxkMSkubV90eXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIGNoaWxkMSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIp
KSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAg
ICAgIHZhbHVlLnVzZSgpOwotICAgICAgICAKKyAgICAgICAgc3RvcmFnZS51c2UoKTsKKwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3aXRoaW5BcnJheUJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAKICAgICAg
ICAgLy8gQ29kZSB0byBoYW5kbGUgcHV0IGJleW9uZCBhcnJheSBib3VuZHMuCkBAIC0yODA3LDEw
ICsyODE1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAg
ICAgICAgIHdpdGhpbkFycmF5Qm91bmRzLmxpbmsoJm1faml0KTsKIAotICAgICAgICAvLyBHZXQg
dGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJl
ZzsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLQogICAgICAgICAvLyBD
aGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFs
dWVzSW5WZWN0b3IuCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAg
ICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJ
blZlY3RvcikpKTsKQEAgLTI4MzQsODMgKzI4MzgsODcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewot
ICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gYXQobm9kZS5jaGlsZDIoKSku
cHJlZGljdGlvbigpOworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICAgICAgTm9kZUluZGV4IGNo
aWxkMiA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSAr
IDFdOworICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0No
aWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMl07CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDQg
PSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAzXTsK
KworICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gYXQoY2hpbGQyKS5wcmVk
aWN0aW9uKCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYmFzZVByZWRpY3Rpb24sIChiYXNlUHJl
ZGljdGlvbiAmIFByZWRpY3RJbnQzMikgfHwgIWJhc2VQcmVkaWN0aW9uKTsKIAotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXko
KSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQnl0ZUFycmF5KGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlKTsKKyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3Bl
Y3VsYXRlQnl0ZUFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckJ5dGVB
cnJheShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Cisg
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgTm9UeXBl
ZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50
MTZfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgCisg
ICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgTm9UeXBl
ZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50
MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgCisg
ICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgeworICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgTm9UeXBl
ZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAK
KyAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Cisg
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBOb1R5
cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgCiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YodWludDE2X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgCisgICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5
KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQx
Nl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgewotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOworICAgIAorICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVV
aW50MzJBcnJheSgpKSB7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNp
emVvZih1aW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5
KTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9q
aXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2sp
OworICAgIAorICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJy
YXkoKSkgeworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
ZmxvYXQpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgIAogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihk
b3VibGUpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOworICAgIAorICAgICAgICBpZiAoYXQoY2hp
bGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgeworICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwgTm9UeXBlZEFycmF5U3BlY0No
ZWNrKTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogCi0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdw
cigpOwotCi0gICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9k
ZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOworICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJh
c2UuZ3ByKCksIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNj
ZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgfQorICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIGNoaWxkNCk7CiAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KLSAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZz
ZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CiAKICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Cg==
</data>
<flag name="review"
          id="119769"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>