<?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>149833</bug_id>
          
          <creation_ts>2015-10-05 22:48:19 -0700</creation_ts>
          <short_desc>REGRESSION(r190589): Caused lots of leaks, and possibly crashes (Requested by ap on #webkit).</short_desc>
          <delta_ts>2015-10-05 22:52:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149727</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1130873</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 22:48:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/190589 broke the build:
Caused lots of leaks, and possibly crashes (Requested by ap on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130875</commentid>
    <comment_count>1</comment_count>
      <attachid>262500</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 22:49:00 -0700</bug_when>
    <thetext>Created attachment 262500
ROLLOUT of r190589

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130878</commentid>
    <comment_count>2</comment_count>
      <attachid>262500</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 22:52:05 -0700</bug_when>
    <thetext>Comment on attachment 262500
ROLLOUT of r190589

Clearing flags on attachment: 262500

Committed r190606: &lt;http://trac.webkit.org/changeset/190606&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130879</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 22:52:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262500</attachid>
            <date>2015-10-05 22:49:00 -0700</date>
            <delta_ts>2015-10-05 22:52:05 -0700</delta_ts>
            <desc>ROLLOUT of r190589</desc>
            <filename>bug-149833-20151005224830.patch</filename>
            <type>text/plain</type>
            <size>175685</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MzdmY2IwMTkyMzg1MzA3MmZjNGQ2NTA0YmFhN2I1MTU0ZGM1NmYzLi4yNmU3OWJiMjVmOGRkN2M3
MzhjZWJhODE5OGUzZGEyNjY5NjU0NWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNS0xMC0wNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE5MDU4OS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTgzMworCisgICAg
ICAgIENhdXNlZCBsb3RzIG9mIGxlYWtzLCBhbmQgcG9zc2libHkgY3Jhc2hlcyAoUmVxdWVzdGVk
IGJ5IGFwIG9uCisgICAgICAgICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNl
dDoKKworICAgICAgICAiVW5yZXZpZXdlZCwgcm9sbGluZyBiYWNrIGluIHIxOTA0NTAiCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk3MjcKKyAgICAg
ICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTkwNTg5CisKIDIwMTUtMTAtMDUg
IEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgYSBm
ZXcgaW5jbHVkZXMgZnJvbSBKU0dsb2JhbE9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGNmODcwOTc3YWFiYWI1ZTg0YjViNzAzZWNl
OWRiOWU3NGVlODFkZWUuLmUwNjAxMDU3ZTU4MjAzMzFjYjU4M2U4ZTRjYzQ5ZmVlMWU0MDk1ZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04
Miw3MCArODIsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIENvZGVC
bG9jazo6c19pbmZvID0gewotICAgICJDb2RlQmxvY2siLCAwLCAwLAotICAgIENSRUFURV9NRVRI
T0RfVEFCTEUoQ29kZUJsb2NrKQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9uQ29kZUJs
b2NrOjpzX2luZm8gPSB7Ci0gICAgIkZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywg
MCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uQ29kZUJsb2NrKQotfTsKLQotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLWNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUNvZGVCbG9j
azo6c19pbmZvID0gewotICAgICJXZWJBc3NlbWJseUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUNvZGVCbG9jaykKLX07Ci0j
ZW5kaWYKLQotY29uc3QgQ2xhc3NJbmZvIEdsb2JhbENvZGVCbG9jazo6c19pbmZvID0gewotICAg
ICJHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFURV9NRVRIT0Rf
VEFCTEUoR2xvYmFsQ29kZUJsb2NrKQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1Db2Rl
QmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9ncmFtQ29kZUJsb2NrKQotfTsKLQotY29u
c3QgQ2xhc3NJbmZvIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhP
RF9UQUJMRShNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEV2
YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiRXZhbENvZGVCbG9jayIsICZCYXNlOjpzX2lu
Zm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsQ29kZUJsb2NrKQotfTsKLQotdm9p
ZCBGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0
PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5GdW5jdGlvbkNvZGVCbG9jaygpOwotfQotCi0j
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotdm9pZCBXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFdlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2Vs
bCktPn5XZWJBc3NlbWJseUNvZGVCbG9jaygpOwotfQotI2VuZGlmCi0KLXZvaWQgUHJvZ3JhbUNv
ZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFByb2dyYW1Db2Rl
QmxvY2sqPihjZWxsKS0+flByb2dyYW1Db2RlQmxvY2soKTsKLX0KLQotdm9pZCBNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8TW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaygpOwotfQot
Ci12b2lkIEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2Fz
dDxFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5FdmFsQ29kZUJsb2NrKCk7Ci19Ci0KIENTdHJpbmcg
Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewogICAgIHN3aXRjaCAoY29kZVR5cGUo
KSkgewpAQCAtMjE3LDcgKzE1Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRU
eXBlKFByaW50U3RyZWFtJiBvdXQsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKICAgICBvdXQu
cHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpKTsKICAg
ICBvdXQucHJpbnQoIjpbIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+Iik7CiAgICAgaWYgKCEhbV9h
bHRlcm5hdGl2ZSkKLSAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoYWx0ZXJuYXRpdmUoKSks
ICItPiIpOworICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihtX2FsdGVybmF0aXZlLmdldCgp
KSwgIi0+Iik7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIob3duZXJFeGVjdXRhYmxlKCkpLCAi
LCAiLCBqaXRUeXBlLCBjb2RlVHlwZSgpKTsKIAogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSkKQEAgLTE2NDUsOSArMTU4MSw4IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCi0gICAgOiBKU0Nl
bGwoKnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2JhbE9iamVjdChvdGhlci5tX2dsb2JhbE9i
amVjdCkKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2Nr
JiBvdGhlcikKKyAgICA6IG1fZ2xvYmFsT2JqZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQogICAg
ICwgbV9oZWFwKG90aGVyLm1faGVhcCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKG90aGVy
Lm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykK
QEAgLTE2NTUsMTEgKzE1OTAsMTEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2sKICAgICAsIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlv
bihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAsIG1f
dW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlzLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQo
KSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0
YWJsZS5nZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCiAgICAgLCBtX2hhc0RlYnVn
Z2VyU3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlz
YWJsZWQpCiAgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJs
ZSgqb3RoZXIubV92bSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCisgICAg
LCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUu
Z2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5t
X3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMpCiAgICAgLCBt
X3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikKQEAgLTE2ODQsMTggKzE2MTksMTMg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29w
eVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2sKICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUo
REZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYKIHsKLSAgICBtX3Zpc2l0V2Vha2x5
SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cisg
ICAgbV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7CisgICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUo
ZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogCiAgICAgQVNTRVJUKG1faGVhcC0+
aXNEZWZlcnJlZCgpKTsKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAK
ICAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7Ci19Ci0KLXZvaWQg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgQ29k
ZUJsb2NrJiBvdGhlcikKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0KICAgICBv
cHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKIApAQCAtMTcwOSwx
MiArMTYzOSwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDb3B5
UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAgICAgfQogICAgIAogICAgIG1faGVh
cC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spKTsKIH0KIAotQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAgSlNTY29w
ZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNp
Z25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICA6
IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KHNjb3BlLT5nbG9i
YWxPYmplY3QoKS0+dm0oKSwgdGhpcywgc2NvcGUtPmdsb2JhbE9iamVjdCgpKQorQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNp
Z25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgOiBtX2dsb2JhbE9iamVjdChzY29wZS0+
Z2xvYmFsT2JqZWN0KCktPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgc2NvcGUtPmdsb2JhbE9iamVj
dCgpKQogICAgICwgbV9oZWFwKCZtX2dsb2JhbE9iamVjdC0+dm0oKS5oZWFwKQogICAgICwgbV9u
dW1DYWxsZWVSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMpCkBAIC0xNzIy
LDExICsxNjUxLDExIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0CiAgICAgLCBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCh0cnVlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2Up
CiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX3VubGlua2Vk
Q29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdW5saW5rZWRDb2RlQmxvY2spCisgICAg
LCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAg
ICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJl
YWtwb2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgp
LCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBt
X3ZtKHVubGlua2VkQ29kZUJsb2NrLT52bSgpKQogICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5r
ZWRDb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKQogICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlu
a2VkQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpCkBAIC0xNzQ1LDMxICsxNjc0LDI2IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0CiAgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6
Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCiB7Ci0gICAgbV92aXNpdFdlYWtseUhhc0Jl
ZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG1f
dmlzaXRTdHJvbmdseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOworICAgIG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNl
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVm
ZXJyZWQoKSk7CiAgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwogCiAgICAg
QVNTRVJUKG1fc291cmNlKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICBKU1Njb3BlKiBzY29wZSkKLXsKLSAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKLSAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0u
Y29udHJvbEZsb3dQcm9maWxlcigpKQotICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwg
b3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRh
YmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgIGlmICh2bSgpLT50eXBlUHJvZmls
ZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCisgICAgICAgIHZtKCktPmZ1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRh
YmxlLT5zb3VyY2VJRCgpLCBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNl
dCgpLCBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKICAgICBz
ZXRDb25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMo
KSwgdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigp
KTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNHbG9iYWxPYmplY3QoKSkKLSAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVn
aXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVj
dC5nZXQoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgb3du
ZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgTGlua1RpbWVDb25zdGFudENvdW50OyBpKyspIHsKICAgICAgICAgTGlua1Rp
bWVDb25zdGFudCB0eXBlID0gc3RhdGljX2Nhc3Q8TGlua1RpbWVDb25zdGFudD4oaSk7CiAgICAg
ICAgIGlmICh1bnNpZ25lZCByZWdpc3RlckluZGV4ID0gdW5saW5rZWRDb2RlQmxvY2stPnJlZ2lz
dGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKQotICAgICAgICAgICAgbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0
LT5qc0NlbGxGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKTsKKyAgICAgICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnNbcmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIG1f
Z2xvYmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKTsKICAgICB9CiAK
ICAgICBIYXNoU2V0PGludCwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8aW50Pj4gY2xvbmVkQ29uc3RhbnRTeW1ib2xUYWJsZXM7CkBAIC0xNzg0
LDcgKzE3MDgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAg
ICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tl
cik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaV0uc2V0KCptX3ZtLCB0aGlzLCBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0p
KTsKKyAgICAgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgb3du
ZXJFeGVjdXRhYmxlLCBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKICAgICAg
ICAgICAgICAgICBjbG9uZWRDb25zdGFudFN5bWJvbFRhYmxlcy5hZGQoaSArIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTgwNCwxNyAr
MTcyOCwxNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgIG1fZnVuY3Rpb25EZWNscy5y
ZXNpemVUb0ZpdCh1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwog
ICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rp
b25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5m
dW5jdGlvbkRlY2woaSk7Ci0gICAgICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250
cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwg
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRF
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9u
RGVjbHNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0s
IG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKKyAgICAgICAgaWYgKHZtKCktPnR5cGVQcm9m
aWxlcigpIHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgICAgIHZtKCkt
PmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJF
eGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdT
dGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQo
KSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJs
ZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJj
ZSgpKSk7CiAgICAgfQogCiAgICAgbV9mdW5jdGlvbkV4cHJzLnJlc2l6ZVRvRml0KHVubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7CiAgICAgZm9yIChzaXplX3QgY291
bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKLSAg
ICAgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkK
LSAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1
dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0s
IHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5z
b3VyY2UoKSkpOworICAgICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29u
dHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICAgICAgdm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlE
KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlu
a2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKKyAgICAgICAgbV9mdW5j
dGlvbkV4cHJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZEV4ZWN1dGFi
bGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKICAg
ICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKQEAgLTE4OTMsNyArMTgx
Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAKICAgICAgICAgdW5zaWduZWQgb3BMZW5n
dGggPSBvcGNvZGVMZW5ndGgocGNbMF0udS5vcGNvZGUpOwogCi0gICAgICAgIGluc3RydWN0aW9u
c1tpXSA9IHZtLmludGVycHJldGVyLT5nZXRPcGNvZGUocGNbMF0udS5vcGNvZGUpOworICAgICAg
ICBpbnN0cnVjdGlvbnNbaV0gPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKHBjWzBdLnUu
b3Bjb2RlKTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDE7IGogPCBvcExlbmd0aDsgKytqKSB7
CiAgICAgICAgICAgICBpZiAoc2l6ZW9mKGludDMyX3QpICE9IHNpemVvZihpbnRwdHJfdCkpCiAg
ICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51LnBvaW50ZXIgPSAwOwpAQCAtMTk1
Miw3ICsxODc2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGludCBp
bmZlcnJlZElubGluZUNhcGFjaXR5ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CiAKICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOwotICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRpYWxp
emUodm0sCisgICAgICAgICAgICBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+aW5pdGlhbGl6ZSgq
dm0oKSwKICAgICAgICAgICAgICAgICBvd25lckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMjAwMSwxMSArMTkyNSwxMSBAQCB2b2lkIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGluawogICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBsaW5rZWQgbW9kdWxlIGVu
dmlyb25tZW50IHN0cm9uZ2x5IHJlZmVyZW5jZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChz
dHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVudHMuYWRkKGpzQ2FzdDxKU01vZHVsZUVu
dmlyb25tZW50Kj4ob3AubGV4aWNhbEVudmlyb25tZW50KSkuaXNOZXdFbnRyeSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZENvbnN0YW50KG9wLmxleGljYWxFbnZpcm9ubWVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KHZtLCB0aGlz
LCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDZdLnUuanNDZWxsLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhpY2Fs
RW52aXJvbm1lbnQpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBvcC5sZXhp
Y2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDZdLnUuc3ltYm9sVGFibGUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUs
IG9wLmxleGljYWxFbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKSk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKG9wLnR5cGUsIHRoaXMpKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNl0udS5qc0NlbGwuc2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCgqdm0oKSwgb3duZXJFeGVjdXRh
YmxlLCBjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTIwMzgsNyArMTk2Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAg
ICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBvcC50
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2lu
dFNldDsKICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKLSAgICAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Auc3RydWN0
dXJlKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNl
dCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5v
cGVyYW5kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDc1LDE0ICsxOTk5
LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgaWYgKG9wLndh
dGNocG9pbnRTZXQpCiAgICAgICAgICAgICAgICAgICAgIG9wLndhdGNocG9pbnRTZXQtPmludmFs
aWRhdGUoUHV0VG9TY29wZUZpcmVEZXRhaWwodGhpcywgaWRlbnQpKTsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1
dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUu
cG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwogCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS50eXBlUHJvZmlsZXIoKSk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT50eXBlUHJvZmlsZXIoKSk7CiAgICAgICAgICAgICAv
LyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IG9wX3Byb2ZpbGVfdHlwZSByZWdU
b1Byb2ZpbGUsIFR5cGVMb2NhdGlvbiosIGZsYWcsIGlkZW50aWZpZXI/LCByZXNvbHZlVHlwZT8K
ICAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7
CiAgICAgICAgICAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKQEAgLTIxMTIsOCAr
MjAzNiw4IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2Zp
bGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGlu
ZyB5ZXQuCiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVBy
b2ZpbGluZyhsb2NrZXIpOwotICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0g
c3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNl
dEZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgdm0pOworICAgICAgICAgICAgICAgICAgICBnbG9i
YWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBp
bXBsLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xU
YWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgKnZtKCkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlE
ID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0czsKIApAQCAtMjEyNiw4ICsyMDUwLDggQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAg
ICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGlu
ZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5
ZXQuCi0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlx
dWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2bSk7Ci0gICAgICAgICAgICAg
ICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUo
bG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJs
ZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBs
KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUt
Pmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwog
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMTUzLDggKzIwNzcs
OCBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25Q
YWlyID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2Nh
dGlvbihnbG9iYWxWYXJpYWJsZUlELAotICAgICAgICAgICAgICAgIG93bmVyRXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQsICZ2bSk7Cisg
ICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0g
dm0oKS0+dHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlv
bihnbG9iYWxWYXJpYWJsZUlELAorICAgICAgICAgICAgICAgIG93bmVyRXhlY3V0YWJsZS0+c291
cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQsIHZtKCkpOwogICAg
ICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGxvY2F0aW9uUGFpci5maXJzdDsKICAg
ICAgICAgICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGxvY2F0aW9uUGFpci5zZWNvbmQ7CiAKQEAg
LTIxNjIsNyArMjA4Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAg
ICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50ID0g
b3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKIAogICAgICAgICAg
ICAgaWYgKHNob3VsZEFuYWx5emUgJiYgaXNOZXdMb2NhdGlvbikKLSAgICAgICAgICAgICAgICB2
bS50eXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRpb24pOworICAgICAgICAg
ICAgICAgIHZtKCktPnR5cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7
CiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMl0udS5sb2NhdGlvbiA9IGxvY2F0aW9u
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTgwLDcgKzIxMDQsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGluawogICAgICAgICBpICs9IG9wTGVuZ3RoOwogICAgIH0KIAotICAgIGlmICh2bS5j
b250cm9sRmxvd1Byb2ZpbGVyKCkpCisgICAgaWYgKHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIo
KSkKICAgICAgICAgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2Zp
bGVyKGluc3RydWN0aW9ucyk7CiAKICAgICBtX2luc3RydWN0aW9ucyA9IFdURjo6UmVmQ291bnRl
ZEFycmF5PEluc3RydWN0aW9uPihpbnN0cnVjdGlvbnMpOwpAQCAtMjIwMCwxMyArMjEyNCwxMiBA
QCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBkdW1wQnl0ZWNvZGUoKTsKICAgICAK
ICAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7Ci0gICAgbV9oZWFwLT5yZXBvcnRF
eHRyYU1lbW9yeUFsbG9jYXRlZChtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1
Y3Rpb24pKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihD
b2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7
CiB9CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDogSlND
ZWxsKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZt
KCksIHRoaXMsIGdsb2JhbE9iamVjdCkKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFdlYkFzc2VtYmx5
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCisgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIG93bmVy
RXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFwKCZtX2dsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKQogICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKICAgICAsIG1fbnVtVmFy
cygwKQpAQCAtMjIxNyw3ICsyMTQwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckUKICAgICAs
IG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVw
cGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKLSAgICAsIG1fb3du
ZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4ZWN1dGFibGUp
CisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVj
dXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBtX3ZtKCZ2bSkKICAgICAsIG1faXNTdHJp
Y3RNb2RlKGZhbHNlKQogICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFsc2UpCkBAIC0yMjMxLDEz
ICsyMTU0LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckUKICNlbmRpZgogewogICAgIEFTU0VS
VChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KikKLXsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKICAgICBtX2hlYXAtPm1fY29kZUJsb2Nr
cy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXpl
b2YoQ29kZUJsb2NrKSk7CiB9CiAjZW5kaWYKIApAQCAtMjI0OSwzMCArMjE2OCwyOSBAQCBDb2Rl
QmxvY2s6On5Db2RlQmxvY2soKQogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAg
ICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgotCisgICAgd2hpbGUgKG1faW5jb21pbmdM
TEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCisgICAgICAg
IG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCktPnJlbW92ZSgpOworI2lmIEVOQUJMRShKSVQp
CiAgICAgLy8gV2UgbWF5IGJlIGRlc3Ryb3llZCBiZWZvcmUgYW55IENvZGVCbG9ja3MgdGhhdCBy
ZWZlciB0byB1cyBhcmUgZGVzdHJveWVkLgogICAgIC8vIENvbnNpZGVyIHRoYXQgdHdvIENvZGVC
bG9ja3MgYmVjb21lIHVucmVhY2hhYmxlIGF0IHRoZSBzYW1lIHRpbWUuIFRoZXJlCiAgICAgLy8g
aXMgbm8gZ3VhcmFudGVlIGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgQ29kZUJsb2NrcyBh
cmUgZGVzdHJveWVkLgogICAgIC8vIFNvLCBpZiB3ZSBkb24ndCByZW1vdmUgaW5jb21pbmcgY2Fs
bHMsIGFuZCBnZXQgZGVzdHJveWVkIGJlZm9yZSB0aGUKICAgICAvLyBDb2RlQmxvY2socykgdGhh
dCBoYXZlIGNhbGxzIGludG8gdXMsIHRoZW4gdGhlIENhbGxMaW5rSW5mbyB2ZWN0b3IncwogICAg
IC8vIGRlc3RydWN0b3Igd2lsbCB0cnkgdG8gcmVtb3ZlIG5vZGVzIGZyb20gb3VyIChubyBsb25n
ZXIgdmFsaWQpIGxpbmtlZCBsaXN0LgotICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICB3
aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQor
ICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CisgICAgd2hpbGUgKG1f
aW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkt
PnJlbW92ZSgpOwogICAgIAogICAgIC8vIE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2ls
bCBiZSByZW1vdmVkIGZyb20gb3RoZXIgQ29kZUJsb2NrcycKICAgICAvLyBtX2luY29taW5nQ2Fs
bHMgbGlua2VkIGxpc3RzIHRocm91Z2ggdGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5m
bwogICAgIC8vIGRlc3RydWN0b3JzLgogCi0jaWYgRU5BQkxFKEpJVCkKICAgICBmb3IgKEJhZzxT
dHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikKICAgICAgICAgKCppdGVyKS0+ZGVyZWYoKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6c2V0QWx0ZXJuYXRpdmUoVk0mIHZtLCBDb2Rl
QmxvY2sqIGFsdGVybmF0aXZlKQotewotICAgIG1fYWx0ZXJuYXRpdmUuc2V0KHZtLCB0aGlzLCBh
bHRlcm5hdGl2ZSk7Ci19Ci0KIHZvaWQgQ29kZUJsb2NrOjpzZXROdW1QYXJhbWV0ZXJzKGludCBu
ZXdWYWx1ZSkKIHsKICAgICBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsKQEAgLTIyOTMsNDMg
KzIyMTEsNzMgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JO
dWxsKCkKICAgICBpZiAoaml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmcoKTsKLSAg
ICByZXR1cm4gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpOworICAgIHJldHVybiBqaXRDb2RlLT5v
c3JFbnRyeUJsb2NrLmdldCgpOwogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgcmV0dXJu
IDA7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNp
dFdlYWtseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdFN0cm9u
Z2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgc2V0QnlNZSA9IG1fdmlzaXRX
ZWFrbHlIYXNCZWVuQ2FsbGVkLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7Cisg
ICAgYm9vbCBzZXRCeU1lID0gbV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5jb21wYXJlRXhj
aGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUpOwogICAgIGlmICghc2V0QnlNZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQotICAgICAgICByZXR1cm47Cisg
ICAgdmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAKLSAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmds
eSgpKSB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIo
dGhpcyk7CisgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CisgICAg
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOworICAgIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKHZpc2l0b3IpOworfQorCit2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNl
bGYgbW9yZSB0aGFuIG9uY2UsIGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5Lgor
ICAgIC8vIFRvIHRoaXMgZW5kLCB1c2UgYW4gYXRvbWljIG9wZXJhdGlvbiB0byBjaGVjayAoYW5k
IHNldCkgaWYgSSd2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LgorICAgIC8vIE9ubHkgb25lIHRocmVh
ZCBtYXkgcHJvY2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIGF0
b21pYyBzZXQgcmFjZS4KKyAgICBib29sIHNldEJ5TWUgPSBtX3Zpc2l0QWdncmVnYXRlSGFzQmVl
bkNhbGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUpOworICAgIGlmICghc2V0
QnlNZSkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisg
ICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIAorICAg
IGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgp
KQorICAgICAgICBvdGhlckJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKworICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVvZihDb2RlQmxvY2spKTsKKyAgICBp
ZiAobV9qaXRDb2RlKQorICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCht
X2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSkgeworICAg
ICAgICAvLyBEaXZpZGUgYnkgcmVmQ291bnQoKSBiZWNhdXNlIG1faW5zdHJ1Y3Rpb25zIHBvaW50
cyB0byBzb21ldGhpbmcgdGhhdCBpcyBzaGFyZWQKKyAgICAgICAgLy8gYnkgbXVsdGlwbGUgQ29k
ZUJsb2NrcywgYW5kIHdlIG9ubHkgd2FudCB0byBjb3VudCBpdCB0b3dhcmRzIHRoZSBoZWFwIHNp
emUgb25jZS4KKyAgICAgICAgLy8gSGF2aW5nIGVhY2ggQ29kZUJsb2NrIHJlcG9ydCBvbmx5IGl0
cyBwcm9wb3J0aW9uYWwgc2hhcmUgb2YgdGhlIHNpemUgaXMgb25lIHdheQorICAgICAgICAvLyBv
ZiBhY2NvbXBsaXNoaW5nIHRoaXMuCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2lu
c3RydWN0aW9ucy5yZWZDb3VudCgpKTsKICAgICB9CiAKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV91
bmxpbmtlZENvZGUpOworCiAgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNl
IHVuY29uZGl0aW9uYWwgZmluYWxpemVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCiAgICAgLy8g
YW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBs
ZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzCiAgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2Ug
dG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAog
ICAgIC8vIGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgotICAgIHZp
c2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVy
KTsKLQorICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKKyAgICAK
KyAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgPSBmYWxzZTsKKyAgICAKKyAgICBp
ZiAoc2hvdWxkVmlzaXRTdHJvbmdseSgpKSB7CisgICAgICAgIHZpc2l0U3Ryb25nbHkodmlzaXRv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2Ug
amV0dGlzb24gb3Vyc2VsdmVzIHdlJ2xsIGluc3RhbGwgb3VyIGFsdGVybmF0aXZlLCBzbyBtYWtl
IHN1cmUgdGhhdCBpdAotICAgIC8vIHN1cnZpdmVzIEdDIGV2ZW4gaWYgd2UgZG9uJ3QuCi0gICAg
dmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOwotICAgIAogICAgIC8vIFRoZXJlIGFyZSB0
d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlcnMgZm9yOiBERkcg
Zml4cG9pbnQgZm9yCiAgICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcgdG8gZmluZCBzdHJ1
Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCiAgICAgLy8gaW5saW5lIGNh
Y2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2FyZGxlc3MuCi0gICAg
dmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIpOworICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcih0aGlzKTsKIAogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIC8vIFdlIGdldCBoZXJlIGlmIHdlJ3JlIGxpdmUgaW4gdGhl
IHNlbnNlIHRoYXQgb3VyIG93bmVyIGV4ZWN1dGFibGUgaXMgbGl2ZSwKQEAgLTIzNDAsNDggKzIy
ODgsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkgb3Ro
ZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCiAgICAgLy8gb3RoZXIgcmVhc29ucywgdGhhdCB0
aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0aGlz
CiAgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4KLQot
ICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwotICAgIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwotCisgICAgCiAgICAgbV9qaXRDb2RlLT5kZmdDb21tb24o
KS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gZmFsc2U7CisgICAgCisgICAgcHJvcGFnYXRlVHJh
bnNpdGlvbnModmlzaXRvcik7CiAgICAgZGV0ZXJtaW5lTGl2ZW5lc3ModmlzaXRvcik7CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQ29kZUJsb2NrKiB0
aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2
aXNpdG9yKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVu
Y29uZGl0aW9uYWwgZmluYWxpemVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCi0gICAgLy8gYW5k
IGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFz
dCBvbmUgb2YgdGhvc2UgdGhpbmdzCi0gICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8g
MS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAotICAg
IC8vIGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgotICAgIHZpc2l0
b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsK
LQotICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09y
TnVsbCgpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVy
KG90aGVyQmxvY2spOwotCi0gICAgaWYgKG1faml0Q29kZSkKLSAgICAgICAgdmlzaXRvci5yZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9qaXRDb2RlLT5zaXplKCkpOwotICAgIGlmIChtX2luc3Ry
dWN0aW9ucy5zaXplKCkpCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0
aW9ucy5yZWZDb3VudCgpKTsKLQotICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7
Ci0KLSAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKLSAgICBzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7Ci0KLSAgICBtX2FsbFRyYW5zaXRpb25z
SGF2ZUJlZW5NYXJrZWQgPSBmYWxzZTsKLSAgICBwcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9y
KTsKLX0KLQogYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoKQogewogICAgIGlm
IChPcHRpb25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNzKCkpCkBAIC0yNDA5LDcgKzIzMjMsMTcg
QEAgYm9vbCBDb2RlQmxvY2s6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKICAgICAvLyAgIGJl
Y2F1c2UgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkIHdvdWxkIGhhdmUgc3Vydml2ZWQgYXMgdHJ1ZS4K
ICAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVhZCB3ZWFrIHJlZmVy
ZW5jZXMuCiAKLSAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CisgICAgaWYgKG1fdmlz
aXRTdHJvbmdseUhhc0JlZW5DYWxsZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICAgICAgaWYgKG1faml0Q29k
ZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIENv
ZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKQpAQCAtMjQxOSwzNCAr
MjM0MywxMiBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVu
Y2UoKQogICAgIHJldHVybiAhaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKIH0KIAotc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTGl2ZShKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUpCi17Ci0gICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rOgotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCi0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vj
b25kcyg1KSk7Ci0gICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgLy8gRWZm
ZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKLSAg
ICAgICAgLy8gSW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KLSAgICAgICAgcmV0
dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+
KAotICAgICAgICAgICAgc3RkOjpjaHJvbm86OnNlY29uZHMoMTUpKTsKLSAgICBjYXNlIEpJVENv
ZGU6OkRGR0pJVDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAotICAgICAgICAgICAgc3RkOjpjaHJvbm86OnNlY29u
ZHMoMjApKTsKLSAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAotICAgICAg
ICAgICAgc3RkOjpjaHJvbm86OnNlY29uZHMoNjApKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCk7Ci0gICAgfQotfQotCiBib29s
IENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpCiB7Ci0gICAgaWYgKEhlYXA6
OmlzTWFya2VkKHRoaXMpKQorICAgIGlmIChtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmICh0aW1lU2luY2VDcmVhdGlvbigpIDwgdGltZVRvTGl2ZShqaXRUeXBlKCkpKQorICAg
IGlmICh0aW1lU2luY2VDcmVhdGlvbigpIDwgSklUQ29kZTo6dGltZVRvTGl2ZShqaXRUeXBlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1OTksMTgg
KzI1MDEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogICAgIC8vIEFsbCB3ZWFrIHJlZmVyZW5jZXMgYXJlIGxpdmUuIFJlY29yZCB0
aGlzIGluZm9ybWF0aW9uIHNvIHdlIGRvbid0CiAgICAgLy8gY29tZSBiYWNrIGhlcmUgYWdhaW4s
IGFuZCBzY2FuIHRoZSBzdHJvbmcgcmVmZXJlbmNlcy4KICAgICBkZmdDb21tb24tPmxpdmVuZXNz
SGFzQmVlblByb3ZlZCA9IHRydWU7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcih0aGlzKTsKKyAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNp
dG9yKTsKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6Oldl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9Ci0gICAgICAgIGJpdHdpc2Vf
Y2FzdDxDb2RlQmxvY2sqPigKLSAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykg
LSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpKTsK
LQotICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgY29k
ZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKKyAgICBwcm9wYWdhdGVUcmFuc2l0
aW9ucyh2aXNpdG9yKTsKKyAgICBkZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQpAQCAtMjczMCwyOSArMjYy
OCwyNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygp
CiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3ZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgpCiB7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiaXR3aXNlX2Nhc3Q8Q29k
ZUJsb2NrKj4oCi0gICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpKTsKLQogI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGlmIChjb2RlQmxvY2stPnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVm
ZXJlbmNlKCkpIHsKLSAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb1dlYWtSZWZlcmVuY2UpOworICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1Jl
ZmVyZW5jZSgpKSB7CisgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vh
a1JlZmVyZW5jZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkp
IHsKLSAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09s
ZEFnZSk7CisgICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkgeworICAgICAgICBq
ZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVCbG9jay0+
aml0VHlwZSgpKSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAg
ICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAKICNpZiBFTkFCTEUoSklUKQotICAg
IGlmICghIWNvZGVCbG9jay0+aml0Q29kZSgpKQotICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXpl
QmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICBpZiAoISFqaXRDb2RlKCkpCisgICAgICAg
IGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogfQogCkBAIC0yODQ3
LDE0ICsyNzQyLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0IGl0IG1hdGNoZXMgdGhl
IGRldGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAogICAgIC8vIHRoZSBPU1IgZXhp
dCBhZ2FpbnN0LgogCi0gICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOworICAgIGFs
dGVybmF0aXZlKCktPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9u
KCk7CiAgICAgaWYgKGRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3Ig
KGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsK
LSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsK
LSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrKCkpOworICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
aygpLT52aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBA
IC0zMDYzLDYgKzI5NTgsOCBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygp
CiAgICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xM
SW50Q2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCktPnVu
bGluaygpOwogI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKG1faW5jb21pbmdDYWxscy5pc0VtcHR5
KCkgJiYgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxs
cy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7
CiAgICAgd2hpbGUgKG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCkBAIC0zMDc2LDY2ICsyOTczLDY2IEBAIHZvaWQg
Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50
Q2FsbExpbmtJbmZvKiBpbmNvCiAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWlu
Zyk7CiB9CiAKLUNvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCitQYXNzUmVm
UHRyPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJu
IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQoKSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQotQ29kZUJsb2NrKiBDb2Rl
QmxvY2s6OnJlcGxhY2VtZW50KCkKK0NvZGVCbG9jayogUHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFj
ZW1lbnQoKQogewotICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJ
bmZvKCk7Ci0KLSAgICBpZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkp
Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRh
YmxlKCkpLT5jb2RlQmxvY2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gRXZhbENvZGVCbG9jazo6aW5m
bygpKQotICAgICAgICByZXR1cm4ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRh
YmxlKCkpLT5jb2RlQmxvY2soKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVC
bG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0g
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4ganNDYXN0PE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsK
KyAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5jb2RlQmxvY2soKTsKK30KIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBpZiAoY2xh
c3NJbmZvID09IFdlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyCi0jZW5kaWYKK0NvZGVCbG9jayogTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFj
ZW1lbnQoKQoreworICAgIHJldHVybiBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOworfQogCi0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKK0NvZGVCbG9jayogRXZhbENvZGVC
bG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwogfQogCi1ERkc6OkNhcGFiaWxpdHlM
ZXZlbCBDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKQorQ29kZUJsb2NrKiBGdW5j
dGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQogewotICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29uc3RydWN0
b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQogCi0gICAgaWYgKGNsYXNz
SW5mbyA9PSBGdW5jdGlvbkNvZGVCbG9jazo6aW5mbygpKSB7Ci0gICAgICAgIGlmIChtX2lzQ29u
c3RydWN0b3IpCi0gICAgICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNvbnN0cnVjdENh
cGFiaWxpdHlMZXZlbCh0aGlzKTsKLSAgICAgICAgcmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDYWxs
Q2FwYWJpbGl0eUxldmVsKHRoaXMpOwotICAgIH0KK0RGRzo6Q2FwYWJpbGl0eUxldmVsIFByb2dy
YW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkKK3sKKyAgICByZXR1cm4gREZH
Ojpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworfQogCi0gICAgaWYgKGNsYXNzSW5mbyA9
PSBFdmFsQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBERkc6OmV2YWxDYXBhYmls
aXR5TGV2ZWwodGhpcyk7CitERkc6OkNhcGFiaWxpdHlMZXZlbCBNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6cHJvZ3Jh
bUNhcGFiaWxpdHlMZXZlbCh0aGlzKTsKK30KIAotICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3Jh
bUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0
eUxldmVsKHRoaXMpOworREZHOjpDYXBhYmlsaXR5TGV2ZWwgRXZhbENvZGVCbG9jazo6Y2FwYWJp
bGl0eUxldmVsSW50ZXJuYWwoKQoreworICAgIHJldHVybiBERkc6OmV2YWxDYXBhYmlsaXR5TGV2
ZWwodGhpcyk7Cit9CiAKLSAgICBpZiAoY2xhc3NJbmZvID09IE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0
aGlzKTsKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpCit7CisgICAgaWYgKG1faXNDb25zdHJ1Y3RvcikKKyAgICAgICAgcmV0
dXJuIERGRzo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CisgICAg
cmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworfQogCiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKLSNl
bmRpZgorQ29kZUJsb2NrKiBXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQorewor
ICAgIHJldHVybiBudWxscHRyOworfQogCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpCit7CiAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKIH0KLQot
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisjZW5kaWYKKyNlbmRpZgogCiB2b2lkIENvZGVCbG9jazo6
amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRpb25N
b2RlIG1vZGUsIGNvbnN0IEZpcmVEZXRhaWwqIGRldGFpbCkKIHsKQEAgLTMyMzksNyArMzEzNiw3
IEBAIEpTR2xvYmFsT2JqZWN0KiBDb2RlQmxvY2s6Omdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiB7CiAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAg
ICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIHJldHVy
biBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCkpLT5laXRoZXJDb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCk7CiB9
CiAKIGNsYXNzIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciB7CkBAIC00MDc5LDcgKzM5NzYsNyBAQCB1
bnNpZ25lZCBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQo
aW50IGJ5dGVjb2RlT2Zmc2V0KQogI2lmIEVOQUJMRShKSVQpCiBERkc6OkNhcGFiaWxpdHlMZXZl
bCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbCgpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgcmVzdWx0ID0gY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIHJlc3VsdCA9IGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAgICAgbV9jYXBhYmls
aXR5TGV2ZWxTdGF0ZSA9IHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDFlNGUzZWNmNzEzZDkwYzll
MjU0MjVjOGU3NzMzOTExYTk4MmM4MDguLjVjMmIxMGM0YjAzODBkMjhkZjQzODY2OGVlNTdiZjRl
ZWQ5YTMzODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
QEAgLTM4LDEwICszOCwxMCBAQAogI2luY2x1ZGUgIkNhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
T2Zmc2V0LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
a1NldC5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiQ29kZU9y
aWdpbi5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVN
YXAuaCIKLSNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAjaW5jbHVkZSAiRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiCkBAIC00OSwxOSArNDksMTggQEAKICNpbmNsdWRlICJFeGVjdXRp
b25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUg
IkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKKyNp
bmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCiAjaW5jbHVk
ZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSklUV3Jp
dGVCYXJyaWVyLmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKICNpbmNsdWRlICJMTEludENhbGxMaW5rSW5m
by5oIgogI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgiCi0jaW5jbHVkZSAiT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAi
UHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlByb2ZpbGVySmV0dGlzb25SZWFzb24u
aCIKLSNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3Qu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIuaCIKQEAgLTg2LDQ1ICs4NSwyNiBAQCBjbGFzcyBKU01vZHVsZUVudmlyb25t
ZW50OwogCiBlbnVtIFJlb3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJlb3B0aW1pemF0aW9u
LCBDb3VudFJlb3B0aW1pemF0aW9uIH07CiAKLWNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0Nl
bGwgewotICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CitjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGljIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwog
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKLQotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpV
bmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwotICAgIH07Ci0KLSAgICBjbGFzcyBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyIDogcHVibGljIEpTQzo6V2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7Ci0gICAgfTsKLQogcHVibGljOgogICAgIGVudW0gQ29weVBhcnNlZEJsb2NrVGFnIHsgQ29w
eVBhcnNlZEJsb2NrIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci0KIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUq
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwotICAgIENvZGVCbG9jayhW
TSosIFN0cnVjdHVyZSosIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2ln
bmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiwgSlNHbG9iYWxPYmplY3QqKTsK
LSNlbmRpZgotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJzZWRCbG9ja1Rh
ZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3Bl
Kik7CisgICAgQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7
CisgICAgICAgIAorICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3Qq
KTsKKyAgICBDb2RlQmxvY2soV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKICNlbmRpZgogCiAgICAgV3JpdGVCYXJyaWVyPEpTR2xv
YmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICBIZWFwKiBtX2hlYXA7CiAKIHB1YmxpYzoK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29kZUJsb2NrKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB+Q29kZUJsb2NrKCk7CiAKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5nZXQoKTsgfQogCkBA
IC0xNDQsOCArMTI0LDggQEAgcHVibGljOgogICAgIGludCogYWRkcmVzc09mTnVtUGFyYW1ldGVy
cygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fbnVtUGFyYW1ldGVycyk7IH0KIAotICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsg
fQotICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKKyAgICBDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQorICAgIHZv
aWQgc2V0QWx0ZXJuYXRpdmUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKSB7IG1f
YWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soRnVuY3RvciYmIGZ1bmN0b3IpCiAg
ICAgewpAQCAtMTY4LDE4ICsxNDgsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IHNwZWNpYWxpemF0aW9uRnJvbUlzQ29uc3RydWN0KG1faXNDb25zdHJ1Y3Rvcik7CiAgICAgfQot
Ci0gICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAorICAgIAogICAg
IENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBH
ZXQgcmlkIG9mIHRoaXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMzY3NwogICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFdlYWtseShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgY2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQoKTsKKyAg
ICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCB2aXNpdFN0cm9uZ2x5KFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIGR1
bXBTb3VyY2UoKTsKICAgICB2b2lkIGR1bXBTb3VyY2UoUHJpbnRTdHJlYW0mKTsKQEAgLTI4Nyw3
ICsyNjUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogCiAgICAgLy8gRXhhY3RseSBlcXVp
dmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29k
ZUJsb2NrRm9yKGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCi0gICAgQ29kZUJsb2Nr
KiBuZXdSZXBsYWNlbWVudCgpOworICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNl
bWVudCgpOwogICAgIAogICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNv
ZGUpCiAgICAgewpAQCAtMzEzLDkgKzI5MSw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAjaWYg
RU5BQkxFKEpJVCkKLSAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisgICAgdmlydHVhbCBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwogCi0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwg
Y29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOworICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSA9IDA7CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKCk7CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0
eUxldmVsU3RhdGUoKSB7IHJldHVybiBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlOyB9CiAKQEAgLTU2
NSw3ICs1NDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5h
cHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHYpOworICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpLCB2KTsKICAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTkxNyw2ICs4OTUsOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KTsKICAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKIApAQCAtOTQz
LDE0ICs5MjMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgc2l6ZV90IGNvdW50ID0gY29uc3RhbnRz
LnNpemUoKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5yZXNpemVUb0ZpdChjb3VudCk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX3ZtLCB0aGlzLCBjb25zdGFudHNbaV0uZ2V0
KCkpOworICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIG93bmVy
RXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOwogICAgICAgICBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjsKICAgICB9CiAKICAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUg
dmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5k
ZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFs
T2JqZWN0LT52bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0LT52
bSgpLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgdmFsdWUpOwogICAgIH0KIAogICAgIHZvaWQg
ZHVtcEJ5dGVjb2RlKApAQCAtMTAyMiw3ICsxMDAyLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRpb247CiAKLSAgICBBdG9taWM8
Ym9vbD4gbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQ7CisgICAgQXRvbWljPGJvb2w+IG1fdmlz
aXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOworICAgIEF0b21pYzxib29sPiBtX3Zpc2l0U3Ryb25n
bHlIYXNCZWVuQ2FsbGVkOwogCiAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsK
ICAgICB1bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsKQEAgLTEwNjQsNyArMTA0NSw3IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0
aW9uRGVjbHM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBt
X2Z1bmN0aW9uRXhwcnM7CiAKLSAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0
aXZlOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgCiAgICAgQmFz
ZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKIApAQCAtMTA4NCwy
NDIgKzEwNjUsMTI0IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBERkc6OkNhcGFi
aWxpdHlMZXZlbCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlOwogI2VuZGlmCi0KLSAgICBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKLSAgICBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKIH07CiAKIC8vIFByb2dyYW0g
Y29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFs
IG9iamVjdAogLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCiAKIGNsYXNzIEdsb2JhbENv
ZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewotICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7
Ci0gICAgREVDTEFSRV9JTkZPOwotCiBwcm90ZWN0ZWQ6Ci0gICAgR2xvYmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29k
ZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBh
cnNlZEJsb2NrLCBvdGhlcikKKyAgICBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFn
LCBHbG9iYWxDb2RlQmxvY2smIG90aGVyKQorICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9j
aywgb3RoZXIpCiAgICAgewogICAgIH0KLQotICAgIEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBDb2RlQmxvY2so
dm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUs
IHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAg
ICAgICAgCisgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNv
dXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IENv
ZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNl
UHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQogICAgIHsKICAg
ICB9CiB9OwogCiBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9j
ayB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNM
QVJFX0lORk87Ci0KLSAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwg
Q29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgUHJvZ3JhbUNvZGVC
bG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRC
bG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5
UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQot
ICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBQcm9ncmFtRXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAg
ICBQcm9ncmFtQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCisgICAgOiBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKICAg
ICB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93
bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwg
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwotICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBK
U1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIs
IHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBHbG9iYWxDb2RlQmxv
Y2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3Zp
ZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBQ
cm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0K
LQotICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
Z3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworI2lmIEVOQUJMRShKSVQpCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRlOworI2VuZGlmCiB9
OwogCiBjbGFzcyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9j
ayB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNM
QVJFX0lORk87Ci0KLSAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikK
LSAgICB7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQot
ICAgICAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsK
LSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7
Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1Db2RlQmxv
Y2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBzb3VyY2VQcm92aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVC
bG9jaywgc2NvcGUpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDog
R2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisg
ICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dy
YW1Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9CiAKLSAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3Zp
ZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAg
ICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVu
bGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVt
bk9mZnNldCkKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBz
Y29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKICAgICB7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyNpZiBFTkFCTEUoSklU
KQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50
ZXJuYWwoKSBvdmVycmlkZTsKKyNlbmRpZgogfTsKIAogY2xhc3MgRXZhbENvZGVCbG9jayA6IHB1
YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgotICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJs
b2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEV2YWxDb2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIp
Ci0gICAgewotICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIEV2YWxD
b2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2Vk
QmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRXZhbEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyKQorICAgIEV2YWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFs
Q29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKICAgICB7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRl
cik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJs
ZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICAK
KyAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKKyAgICAgICAgOiBHbG9iYWxD
b2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJj
ZVByb3ZpZGVyLCAwLCAxKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKICAgICB9Ci0KKyAgICAKICAgICBjb25zdCBJZGVudGlmaWVyJiB2
YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkt
PnZhcmlhYmxlKGluZGV4KTsgfQogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJu
IHVubGlua2VkRXZhbENvZGVCbG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQogICAgIAotcHJpdmF0
ZToKLSAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAg
IH0KLSAgICAgICAgCi0gICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBzb3VyY2VQcm92aWRlciwgMCwgMSkKLSAgICB7Ci0gICAgfQorI2lmIEVOQUJMRShKSVQp
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRl
cm5hbCgpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKLQogcHJpdmF0ZToKICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2Vk
RXZhbENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqPih1bmxpbmtlZENvZGVCbG9jaygpKTsgfQogfTsKIAogY2xhc3MgRnVuY3Rpb25Db2RlQmxv
Y2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIENvZGVCbG9jayBC
YXNlOwotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICByZXR1cm4g
aW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUo
Vk0qIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLAotICAgICAg
ICBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgRnVuY3Rpb25D
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCisg
ICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCiAgICAgewotICAgICAg
ICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVuY3Rpb25Db2Rl
QmxvY2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VP
ZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hD
cmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRnVuY3Rpb25Db2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5j
dGlvbkNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUs
IENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQotICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jaywgSlNTY29wZSogc2NvcGUsCi0gICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGlu
ZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3Vy
Y2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICBGdW5jdGlvbkNvZGVCbG9jayhG
dW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25l
ZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0
YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zm
c2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworI2lmIEVOQUJMRShKSVQpCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRl
OworI2VuZGlmCiB9OwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogY2xhc3MgV2ViQXNzZW1i
bHlDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICBERUNMQVJFX0lO
Rk87Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENv
cHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAg
ICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIFdl
YkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0
YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisg
ICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNv
ZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3Ro
ZXIpCiAgICAgewotICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0tPmhlYXApKQot
ICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIHZtLT53ZWJBc3NlbWJseUNvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOwotICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IFdlYkFzc2VtYmx5Q29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdm0sIGdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi1wcml2
YXRlOgotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQotICAg
ICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVj
dHVyZSwgb3duZXJFeGVjdXRhYmxlLCB2bSwgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworI2lmIEVOQUJMRShKSVQpCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
IG92ZXJyaWRlOworI2VuZGlmCiB9OwogI2VuZGlmCiAKQEAgLTEzNDcsOSArMTIxMCwxMCBAQCBp
bmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CiB9CiAKLWlubGluZSB2b2lk
IENvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQoKQoraW5saW5lIHZvaWQg
Q29kZUJsb2NrOjpjbGVhck1hcmtzKCkKIHsKLSAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxl
ZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgbV92aXNpdFN0
cm9uZ2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7CisgICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogfQogCiBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1h
cmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQpAQCAtMTM3NCwxMSArMTIzOCwxMiBAQCBpbmxp
bmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
aWYgKCFjb2RlQmxvY2spCiAgICAgICAgIHJldHVybjsKLQotICAgIC8vIFRyeSB0byByZWNvdmVy
IGdyYWNlZnVsbHkgaWYgd2UgZm9yZ2V0IHRvIGV4ZWN1dGUgYSBiYXJyaWVyIGZvciBhCi0gICAg
Ly8gQ29kZUJsb2NrIHRoYXQgZG9lcyB2YWx1ZSBwcm9maWxpbmcuIFRoaXMgaXMgcHJvYmFibHkg
b3ZlcmtpbGwsIGJ1dCB3ZQotICAgIC8vIGhhdmUgYWx3YXlzIGRvbmUgaXQuCi0gICAgSGVhcDo6
aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICAKKyAgICAvLyBG
b3JjZSBHQyB0byB2aXNpdCBhbGwgQ29kZUJsb2NrcyBvbiB0aGUgc3RhY2ssIGluY2x1ZGluZyBv
bGQgQ29kZUJsb2NrcworICAgIC8vIHRoYXQgaGF2ZSBub3QgZXhlY3V0ZWQgYSBiYXJyaWVyLiBU
aGlzIGlzIG92ZXJraWxsLCBidXQgd2UgaGF2ZSBhbHdheXMKKyAgICAvLyBkb25lIHRoaXMsIGFu
ZCBpdCBtaWdodCBoZWxwIHVzIHJlY292ZXIgZ3JhY2VmdWxseSBpZiB3ZSBmb3JnZXQgdG8gZXhl
Y3V0ZQorICAgIC8vIGEgYmFycmllciB3aGVuIGEgQ29kZUJsb2NrIG5lZWRzIGl0LgorICAgIGNv
ZGVCbG9jay0+Y2xlYXJNYXJrcygpOwogCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuYWRkKGNv
ZGVCbG9jayk7CiB9CkBAIC0xMzg3LDEzICsxMjUyLDEzIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKEZ1
bmN0CiB7CiAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICBjYXNlIFByb2dyYW1FeGVjdXRhYmxl
VHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxD
b2RlQmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9wcm9ncmFtQ29k
ZUJsb2NrLmdldCgpKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0
PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkKICAg
ICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJk
PEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBF
dmFsRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0g
c3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1f
ZXZhbENvZGVCbG9jay5nZXQoKSkpCisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT5tX2V2YWxDb2RlQmxvY2suZ2V0KCkpCiAg
ICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0MDEsMTUg
KzEyNjYsMTUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIFNjcmlw
dEV4ZWN1dGFibGU6OmZvckVhY2hDb2RlQmxvY2soRnVuY3QKICAgICBjYXNlIEZ1bmN0aW9uRXhl
Y3V0YWJsZVR5cGU6IHsKICAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihm
dW5jdG9yKSk7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29k
ZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tG
b3JDYWxsLmdldCgpKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0
YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5m
b3JFYWNoUmVsYXRlZENvZGVCbG9jayhmKTsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJs
b2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuZ2V0KCkpKQorICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
dXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkKICAgICAgICAgICAgIGNvZGVC
bG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0
KCkpKQorICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0Nhc3Q8TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmdldCgpKQog
ICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndh
cmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKaW5kZXggZDUxNjk1MDEyZTI1
MDZmMmM4Mzc2MTc1MDMxZjgxNjg5ZGZmYjNiNS4uNTY0NmE1MzU1OTI3M2MyNDI4MmY4MGY5MDUy
NTg3YWJhOGI0Zjg1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmNwcApAQCAtNzUsNyArNzUsNyBAQCBib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0CiAgICAgICAgIGlmICgh
YS5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChhLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgIT0g
Yi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQorICAgICAgICBpZiAo
YS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkgIT0gYi5pbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAog
ICAgICAgICBhID0gYS5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKQEAgLTk4LDcgKzk4
LDcgQEAgdW5zaWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKCkgY29uc3QKICAgICAg
ICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIAotICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTQ2VsbCo+
OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQo
KSk7CisgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgICAgICAKICAgICAg
ICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7
CiAgICAgfQpAQCAtMTE1LDExICsxMTUsMTEgQEAgVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmln
aW46OmlubGluZVN0YWNrKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2RlQmxv
Y2sqIENvZGVPcmlnaW46OmNvZGVPcmlnaW5Pd25lcigpIGNvbnN0CitTY3JpcHRFeGVjdXRhYmxl
KiBDb2RlT3JpZ2luOjpjb2RlT3JpZ2luT3duZXIoKSBjb25zdAogewogICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpOwogfQogCiBpbnQgQ29kZU9yaWdpbjo6c3RhY2tPZmZzZXQoKSBjb25z
dApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ29kZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KCIgLS0+ICIpOwogICAgICAgICAKICAg
ICAgICAgaWYgKElubGluZUNhbGxGcmFtZSogZnJhbWUgPSBzdGFja1tpXS5pbmxpbmVDYWxsRnJh
bWUpIHsKLSAgICAgICAgICAgIG91dC5wcmludChmcmFtZS0+YnJpZWZGdW5jdGlvbkluZm9ybWF0
aW9uKCksICI6PCIsIFJhd1BvaW50ZXIoZnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwg
Ij4gIik7CisgICAgICAgICAgICBvdXQucHJpbnQoZnJhbWUtPmJyaWVmRnVuY3Rpb25JbmZvcm1h
dGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGZyYW1lLT5leGVjdXRhYmxlLmdldCgpKSwgIj4gIik7
CiAgICAgICAgICAgICBpZiAoZnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIoY2xvc3VyZSkgIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4IGM5NDRlODFlYjVhZGEzMTFiMzBiZmVmZGZi
YzI3YzcwZDIzNDJlOGMuLmE1MjJiYTllNGUxNGM5ZTdjNzBhMTVkYzNhZDMzMDE1NmQ1NGVjZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtODcs
NyArODcsNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgCiAgICAgLy8gSWYgdGhlIGNvZGUg
b3JpZ2luIGNvcnJlc3BvbmRzIHRvIGlubGluZWQgY29kZSwgZ2l2ZXMgeW91IHRoZSBoZWFwIG9i
amVjdCB0aGF0CiAgICAgLy8gd291bGQgaGF2ZSBvd25lZCB0aGUgY29kZSBpZiBpdCBoYWQgbm90
IGJlZW4gaW5saW5lZC4gT3RoZXJ3aXNlIHJldHVybnMgMC4KLSAgICBDb2RlQmxvY2sqIGNvZGVP
cmlnaW5Pd25lcigpIGNvbnN0OworICAgIFNjcmlwdEV4ZWN1dGFibGUqIGNvZGVPcmlnaW5Pd25l
cigpIGNvbnN0OwogICAgIAogICAgIGludCBzdGFja09mZnNldCgpIGNvbnN0OwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAppbmRleCBlYjlkNDE5MDVjNmIyYTdkZjcwOWUyNTAzMGQz
Y2FkNWU4YmJhYmU5Li43NjFlOTViM2Y2NzA0ZmE1ZGIwMjBiMTQ2YjQ4MWE3Zjg5ZWJiYzVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrKCkgeyB9CiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2soKSB7IH0KIAotdm9pZCBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6
OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayos
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3ZvaWQgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgZHVtcENvbXBpbGVkU291cmNlc0lmTmVlZGVkKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAppbmRleCBhZGVjYjgyYmIyOTg5Yjk5YTdmYWFkYWRk
Nzc4YmZiYThiZGY1NjdiLi4zNzU2OGQyMjIxMjI1MGJiZGVkNTE4ZjE4MGRiYjQxNmUzYmZiZTlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCkBAIC00Miw4ICs0Miw4IEBAIHByb3RlY3RlZDoK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHko
Q29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvZGVCbG9jayog
cHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBD
b21waWxhdGlvblJlc3VsdCk7CiAKICAgICBWZWN0b3I8RGVmZXJyZWRTb3VyY2VEdW1wPiYgZW5z
dXJlRGVmZXJyZWRTb3VyY2VEdW1wKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXZhbENvZGVDYWNoZS5oCmluZGV4IDYyNTIxZmM2NTI4YzVhMmU3ZDRlYWY0Mzg1OGMw
NmNlZTdjN2FlZGQuLjdhODk4OTgxMmUwN2NhM2EyNzUwNTA3M2RiYTE2ZDQ0MmYwYWY1NGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaApAQCAt
NTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBFdmFsRXhlY3V0YWJsZSogZ2V0U2xvdyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBUaGlzVERaTW9k
ZSB0aGlzVERaTW9kZSwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBKU1Njb3BlKiBzY29wZSkK
KyAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGdldFNsb3coRXhlY1N0YXRlKiBleGVjLCBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lciwgYm9vbCBpblN0cmljdENvbnRleHQsIFRoaXNURFpNb2RlIHRoaXNU
RFpNb2RlLCBjb25zdCBTdHJpbmcmIGV2YWxTb3VyY2UsIEpTU2NvcGUqIHNjb3BlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwog
ICAgICAgICAgICAgSlNTY29wZTo6Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3BlLCB2YXJp
YWJsZXNVbmRlclREWik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVDYWxsRnJhbWUuY3BwCmluZGV4IDQ0N2JjN2U3MzllNDI2OWYwMWY3MmJjMzkwOGNlYWY5
ZTc3YmYyNjkuLjdhM2Q4YWZjMDQyYzA4ODI5ZTk0YjkxYTgyNjk5MThmMzY0NDQ0M2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3Bw
CkBAIC00NywxNyArNDcsMjQgQEAgSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVG
b3JDYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogCiBDb2RlQmxvY2tIYXNoIElubGlu
ZUNhbGxGcmFtZTo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2Nr
LT5oYXNoKCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRh
YmxlLmdldCgpKS0+Y29kZUJsb2NrRm9yKAorICAgICAgICBzcGVjaWFsaXphdGlvbktpbmQoKSkt
Pmhhc2goKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVDYWxsRnJhbWU6Omhhc2hBc1N0cmluZ0lmUG9z
c2libGUoKSBjb25zdAogewotICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jay0+aGFzaEFzU3Ry
aW5nSWZQb3NzaWJsZSgpOworICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZS5nZXQoKSktPmNvZGVCbG9ja0ZvcigKKyAgICAgICAgc3BlY2lhbGl6YXRpb25L
aW5kKCkpLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCk7CiB9CiAKIENTdHJpbmcgSW5saW5lQ2Fs
bEZyYW1lOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oYmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKS0+aW5m
ZXJyZWROYW1lKCkudXRmOCgpOworICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZS5nZXQoKSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKK30KKworQ29kZUJs
b2NrKiBJbmxpbmVDYWxsRnJhbWU6OmJhc2VsaW5lQ29kZUJsb2NrKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUuZ2V0KCkpLT5iYXNl
bGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKIHZvaWQgSW5saW5l
Q2FsbEZyYW1lOjpkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CkBAIC02Nyw4ICs3NCw4IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wQnJpZWZG
dW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAKIHZvaWQgSW5saW5l
Q2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAogewotICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24o
KSwgIjo8IiwgUmF3UG9pbnRlcihiYXNlbGluZUNvZGVCbG9jay5nZXQoKSkpOwotICAgIGlmIChp
c1N0cmljdE1vZGUoKSkKKyAgICBvdXQucHJpbnQoYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCks
ICI6PCIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZS5nZXQoKSkpOworICAgIGlmIChleGVjdXRhYmxl
LT5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUpIik7CiAg
ICAgb3V0LnByaW50KCIsIGJjIyIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4LCAiLCAiLCBz
dGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CiAgICAgaWYgKGlzQ2xvc3VyZUNhbGwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOWVi
N2ZiMzE4YTE5YWEzN2ViOTZiYzAxN2M4YTFlOTU2OWJhMzQwNS4uNjJmMjVmY2RmMDliMDVmZTZk
MGVjNDE5YjI1MWU5YTAxNDA4MWRjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlT3Jp
Z2luLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3Zlcnku
aCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+
CkBAIC00MSw2ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lOwogY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIGNsYXNzIEpT
RnVuY3Rpb247CiAKIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewpAQCAtMTcyLDcgKzE3NCw3IEBA
IHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIH0KICAgICAKICAgICBWZWN0b3I8VmFsdWVS
ZWNvdmVyeT4gYXJndW1lbnRzOyAvLyBJbmNsdWRlcyAndGhpcycuCi0gICAgV3JpdGVCYXJyaWVy
PENvZGVCbG9jaz4gYmFzZWxpbmVDb2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4
ZWN1dGFibGU+IGV4ZWN1dGFibGU7CiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWVSZWNvdmVyeTsK
ICAgICBDb2RlT3JpZ2luIGRpcmVjdENhbGxlcjsKIApAQCAtMjA3LDYgKzIwOSw4IEBAIHN0cnVj
dCBJbmxpbmVDYWxsRnJhbWUgewogICAgIENvZGVCbG9ja0hhc2ggaGFzaCgpIGNvbnN0OwogICAg
IENTdHJpbmcgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpIGNvbnN0OwogICAgIAorICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2soKSBjb25zdDsKKyAgICAKICAgICB2b2lkIHNldFN0YWNr
T2Zmc2V0KHNpZ25lZCBvZmZzZXQpCiAgICAgewogICAgICAgICBzdGFja09mZnNldCA9IG9mZnNl
dDsKQEAgLTIxNiw4ICsyMjAsNiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBwdHJk
aWZmX3QgY2FsbGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBw
dHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIAotICAgIGJv
b2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpOyB9Ci0KICAgICB2b2lkIGR1bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpA
QCAtMjI5LDcgKzIzMSw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogaW5saW5lIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lQ2FsbEZyYW1l
KTsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsK
KyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gaW5saW5lQ2FsbEZyYW1lLT5leGVj
dXRhYmxlLmdldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGluZUNv
ZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAog
aW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggOThmY2YyNmY2MWUzMDg3MjI1YTc3MWM1NjQyMzVjNmVh
MDQ1MzZjYy4uMTA5NTY4YzQ3OTkzOWU1MWI3OGUyYzMyNWMwOTAyN2RiODAwMjNiOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICB9CiAKICAgICAgICAgLy8gV2Ugd2lsbCBl
bWl0IGNvZGUgdGhhdCBoYXMgYSB3ZWFrIHJlZmVyZW5jZSB0aGF0IGlzbid0IG90aGVyd2lzZSBs
aXN0ZWQgYW55d2hlcmUuCi0gICAgICAgIHN0YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0
ZUJhcnJpZXI8SlNDZWxsPih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgc3Rh
dGUud2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpKTsKICAgICAgICAgCiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKApAQCAtMTE3
Nyw3ICsxMTc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpy
ZWdlbmVyYXRlKAogICAgIGZvciAoYXV0byYgZW50cnkgOiBjYXNlcykKICAgICAgICAgZG9lc0Nh
bGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKICAgICAKLSAgICBtX3N0dWJSb3V0aW5lID0gY3Jl
YXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jaywgZG9lc0NhbGxzKTsKKyAgICBt
X3N0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CiAgICAgbV93YXRjaHBvaW50cyA9IFdURjo6
bW92ZShzdGF0ZS53YXRjaHBvaW50cyk7CiAgICAgaWYgKCFzdGF0ZS53ZWFrUmVmZXJlbmNlcy5p
c0VtcHR5KCkpCiAgICAgICAgIG1fd2Vha1JlZmVyZW5jZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPFZl
Y3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4+KFdURjo6bW92ZShzdGF0ZS53ZWFrUmVmZXJlbmNl
cykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAKaW5kZXggODcyODUxODE1MDhkZWU5NWY5MzNkOGMwOTdkYmRjYmJmNGIzYjY0
OC4uNTU4NzcxMDZkZDYwMzdmNzEwYzBmZTNhZmNjMDJhNjUwYTQxZDVhZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCkBA
IC01NSw3ICs1NSw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBiYXNlT2JqCiAgICAgY2FjaGVUeXBlID0g
Q2FjaGVUeXBlOjpHZXRCeUlkU2VsZjsKICAgICAKICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuc2V0KAotICAgICAgICAqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpOworICAgICAgICAqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKICAgICB1LmJ5SWRTZWxmLm9m
ZnNldCA9IG9mZnNldDsKIH0KIApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0UHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSog
YmFzZQogICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U7CiAgICAgCiAg
ICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCgKLSAgICAgICAgKmNvZGVCbG9j
ay0+dm0oKSwgY29kZUJsb2NrLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgKmNvZGVC
bG9jay0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYmFzZU9iamVjdFN0cnVj
dHVyZSk7CiAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKQEAgLTEwNSw3ICsx
MDUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgU3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vz
c0Nhc2UoCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gYWNjZXNzQ2Fz
ZXM7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHByZXZpb3VzQ2FzZSA9
Ci0gICAgICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyh2bSwgY29kZUJsb2Nr
LCAqdGhpcyk7CisgICAgICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyh2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgKnRoaXMpOwogICAgIGlmIChwcmV2aW91c0Nh
c2UpCiAgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEY6Om1vdmUocHJldmlvdXNDYXNlKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
aW5kZXggNjM1NzUxZTM5YWQ2YzMzNGMxNmU1ZGNhYjMzNjc1MDI0ZTY0NTc5Yi4uZDRmYzFhOGZm
MDExYjczYTRmMmIwNWM5NjcwMDNjMzNkMmQ0YWRkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTQ2MzMsMTAgKzQ2MzMsMTAgQEAg
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAg
ICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCk7CiAgICAgICAgIAogICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fcGxhbi5pbmxpbmVDYWxsRnJh
bWVzLT5hZGQoKTsKLSAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGguZnJlZXplKGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFw
aC5mcmVlemUoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CiAgICAgICAgIC8vIFRoZSBv
d25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgYmFy
cmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCi0gICAgICAg
IG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNhbGxG
cmFtZS0+ZXhlY3V0YWJsZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0U3RhY2tP
ZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewogICAgICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoY2FsbGVl
KTsKQEAgLTQ4MjgsNyArNDgyOCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICBkYXRh
TG9nKCJQYXJzaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCi0gICAgbV9kZmdDb2Rl
QmxvY2sgPSBtX2dyYXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVCbG9jazsKKyAgICBtX2RmZ0Nv
ZGVCbG9jayA9IG1fZ3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2NrLmdldCgpOwogICAg
IGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSAmJiBtX2RmZ0NvZGVCbG9jawogICAgICAg
ICAmJiBPcHRpb25zOjplbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSkgewogICAg
ICAgICBpZiAoT3B0aW9uczo6ZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IDc0MWJjMTZlZWI1
MTZkZDRhMjhkOGFiZDc2YWNlNzhhMWQ5ZjhlOTguLjQ3ODgxZTI1M2M1OWZhNGFmZGIyMjAwZThh
MTE4ZmI0NzlmZGMxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmNwcApAQCAtODksOCArODksOCBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJl
bmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMpCiAgICAgICAg
ICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKHJlY292ZXJ5LmNvbnN0YW50KCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCkpCi0gICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soYmFzZWxpbmVD
b2RlQmxvY2spOworICAgICAgICAgICAgaWYgKFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpCisgICAgICAgICAgICAgICAgdHJh
Y2tlZFJlZmVyZW5jZXMuY2hlY2soZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKICAg
ICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwCmluZGV4IGUyNzNhZTg5MWRkOWI0OWRmNmVh
ZjU0ZjU4M2MxZWQ0ZDhiODhlY2IuLjkxMTM0Y2NiOGExMjExMTQyNDMxYWI5ZDhjYzk3NDBlNzhk
YzdlMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRy
YW5zaXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRU
cmFuc2l0aW9ucy5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi1EZXNpcmVkVHJhbnNpdGlvbjo6RGVzaXJlZFRyYW5zaXRpb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogY29kZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCitEZXNpcmVkVHJhbnNpdGlvbjo6
RGVzaXJlZFRyYW5zaXRpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFNjcmlwdEV4ZWN1dGFibGUq
IGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9jb2RlT3Jp
Z2luT3duZXIoY29kZU9yaWdpbk93bmVyKQogICAgICwgbV9vbGRTdHJ1Y3R1cmUob2xkU3RydWN0
dXJlKQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIERlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQo
Vk0mIHZtLCBDb21tb25EYXRhKiBjb21tb24pCiB7CiAgICAgY29tbW9uLT50cmFuc2l0aW9ucy5h
cHBlbmQoCiAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAotICAgICAgICAgICAgdm0s
IG1fY29kZUJsb2NrLAorICAgICAgICAgICAgdm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdpbk93bmVyLAogICAgICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUsIG1fbmV3U3RydWN0dXJlKSk7CiB9CkBAIC02Niw3ICs2Niw3IEBAIERlc2lyZWRU
cmFuc2l0aW9uczo6fkRlc2lyZWRUcmFuc2l0aW9ucygpCiB7CiB9CiAKLXZvaWQgRGVzaXJlZFRy
YW5zaXRpb25zOjphZGRMYXppbHkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogY29k
ZU9yaWdpbk93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUpCit2b2lkIERlc2lyZWRUcmFuc2l0aW9uczo6YWRkTGF6aWx5KENvZGVCbG9jayogY29k
ZUJsb2NrLCBTY3JpcHRFeGVjdXRhYmxlKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKIHsKICAgICBtX3RyYW5zaXRpb25z
LmFwcGVuZChEZXNpcmVkVHJhbnNpdGlvbihjb2RlQmxvY2ssIGNvZGVPcmlnaW5Pd25lciwgb2xk
U3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCmluZGV4IDllYTZhZGExZGNhYTRjMzlhMWM3
ZGNkOTAxZjRjNzZiMmZiMGEzODIuLmFkZGFmM2VjZGMwMDg3NTJmMTQ2NmY1N2FkOGRmMWZiYThh
MmY5M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRy
YW5zaXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJh
bnNpdGlvbnMuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBDb21tb25EYXRhOwogCiBjbGFzcyBE
ZXNpcmVkVHJhbnNpdGlvbiB7CiBwdWJsaWM6Ci0gICAgRGVzaXJlZFRyYW5zaXRpb24oQ29kZUJs
b2NrKiwgQ29kZUJsb2NrKiBjb2RlT3JpZ2luT3duZXIsIFN0cnVjdHVyZSosIFN0cnVjdHVyZSop
OworICAgIERlc2lyZWRUcmFuc2l0aW9uKENvZGVCbG9jayosIFNjcmlwdEV4ZWN1dGFibGUqLCBT
dHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9u
RGF0YSopOwogICAgIApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICBDb2RlQmxvY2sqIG1fY29kZU9yaWdpbk93bmVy
OworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG1fY29kZU9yaWdpbk93bmVyOwogICAgIFN0cnVjdHVy
ZSogbV9vbGRTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKIH07CkBA
IC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBEZXNpcmVkVHJhbnNpdGlvbnMoKTsKICAgICB+
RGVzaXJlZFRyYW5zaXRpb25zKCk7CiAKLSAgICB2b2lkIGFkZExhemlseShDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIGNvZGVPcmlnaW5Pd25lciwgU3RydWN0dXJlKiwgU3RydWN0dXJlKik7CisgICAg
dm9pZCBhZGRMYXppbHkoQ29kZUJsb2NrKiwgU2NyaXB0RXhlY3V0YWJsZSosIFN0cnVjdHVyZSos
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwogICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKaW5kZXggMWFm
MTNlZjRlZTlkZjQ5MGFjMzk1NGQ1Nzk2MzU2ODA0OTUzMzNlZC4uMGRmOTYwNjUxYjc3ZWMzZTNh
MWI2MDc2YTUyOTFlY2ZjNWQ5MDVhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcApAQCAtNzAsMTAgKzcwLDEwIEBA
IHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0mIHZtLCBDb21tb25EYXRh
KiBjb21tb24pCiAgICAgZm9yIChKU0NlbGwqIHRhcmdldCA6IG1fcmVmZXJlbmNlcykgewogICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWNDYXN0PFN0cnVjdHVyZSo+
KHRhcmdldCkpIHsKICAgICAgICAgICAgIGNvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMu
YXBwZW5kKAotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KHZtLCBtX2Nv
ZGVCbG9jaywgc3RydWN0dXJlKSk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4odm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb21tb24tPndlYWtSZWZlcmVuY2VzLmFwcGVu
ZCgKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgbV9jb2RlQmxvY2ss
IHRhcmdldCkpOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOwogICAgICAgICB9CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCmluZGV4IGFjYTczM2FhMmFm
ODUzNmIyYmFlN2E4ZTZhMDJkOTMwYTdkMGQzMTMuLmZlNDA3YWFlNjk4ZTM4ZjA5ZmVlZWYwMTI4
ZjQxZjgzNzQxYzIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAK
QEAgLTEyMSw3ICsxMjEsNyBAQCBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAogICAgICAgICB2
bSwgY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29k
ZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzLAogICAgICAgICBjYWxsYmFjayk7CiAgICAgaWYgKHJl
c3VsdCAhPSBDb21waWxhdGlvbkRlZmVycmVkKQotICAgICAgICBjYWxsYmFjay0+Y29tcGlsYXRp
b25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCByZXN1bHQpOwor
ICAgICAgICBjYWxsYmFjay0+Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3Vs
dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAppbmRleCBmMjgwN2U0MGY5NmE0YTIwYzRhMGQ4NmYxOWI3YzExY2I4NThmZjBkLi43
MmJmMzFmYzA0MDYzYzc5ODMwYzgxOGYyY2Y5YTk4YjgxMTIzNjE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgY29uc3QgY2hh
ciogZGZnT3BOYW1lc1tdID0gewogR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9u
Z0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0YXRlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fcGxh
bihwbGFuKQotICAgICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jaykKKyAgICAsIG1fY29k
ZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCkpCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAgICAgLCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0
ZS5tX2FsbG9jYXRvcikKICAgICAsIG1fbmV4dE1hY2hpbmVMb2NhbCgwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDA1NGZmMDdmODc4MTZhYzdlMDdjYjg0NjZjNjgxZDRk
MzJkZDdjNmMuLjgzNDMzNDFkZmFjNGYyZGU3MDEzNjMxMjkwYmE4YjUzN2RlZTU4ODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTM0OCw3ICszNDgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKICAgICAgICAgCi0gICAgICAgIHJldHVy
biBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFi
bGUoKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsK
ICAgICB9CiAgICAgCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZUZvcihjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpAQCAtMzcyLDcgKzM3Miw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpOwotICAgICAgICByZXR1cm4gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzU3RyaWN0TW9kZSgpOworICAgICAgICByZXR1cm4ganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVj
dXRhYmxlLmdldCgpKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgfQogICAgIAogICAgIEVDTUFNb2Rl
IGVjbWFNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmgKaW5kZXggZmY2Yzg2NjgyNmQxNGE0ZjdkMTViN2FiNzZjNjBjYTExNjIy
YTJkZi4uMjY2YTdjZWNlNGVkZDk4NWIwMjQ4MWZlNmZhM2JmMjRlMmU3MThjZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVO
QUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tcGls
YXRpb25SZXN1bHQuaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiREZH
TWluaWZpZWRHcmFwaC5oIgpAQCAtMTE1LDEyICsxMTQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB2
YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBvdmVycmlkZTsKICAg
ICAKICAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBD
b2RlQmxvY2sqIG9zckVudHJ5QmxvY2soKSB7IHJldHVybiBtX29zckVudHJ5QmxvY2suZ2V0KCk7
IH0KLSAgICB2b2lkIHNldE9TUkVudHJ5QmxvY2soVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBDb2RlQmxvY2sqIG9zckVudHJ5QmxvY2spIHsgbV9vc3JFbnRyeUJsb2NrLnNldCh2bSwgb3du
ZXIsIG9zckVudHJ5QmxvY2spOyB9Ci0gICAgdm9pZCBjbGVhck9TUkVudHJ5QmxvY2soKSB7IG1f
b3NyRW50cnlCbG9jay5jbGVhcigpOyB9Ci0jZW5kaWYKICAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENv
ZGVSZWYoKS4KQEAgLTEzNSw3ICsxMjgsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAgICAgdWludDhfdCBuZXN0ZWRUcmlnZ2VySXNTZXQgeyAwIH07CiAgICAgVXBwZXJUaWVyRXhl
Y3V0aW9uQ291bnRlciB0aWVyVXBDb3VudGVyOwotICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+
IG1fb3NyRW50cnlCbG9jazsKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBvc3JFbnRyeUJsb2NrOwog
ICAgIHVuc2lnbmVkIG9zckVudHJ5UmV0cnk7CiAgICAgYm9vbCBhYmFuZG9uT1NSRW50cnk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVEZpbmFsaXplci5jcHAKaW5kZXggMmQxMzFjM2M4OGJmNWQ2ZGIyMDA5NzljZDEwNmFhN2Iz
YThmOGQ0Yy4uODM2YzBlMDQ4YTdmMjQ2MzA3MjYyOGY2YmZlNjNjYzAyODAxYWY2MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcApAQCAtNTcsNyAr
NTcsNyBAQCBzaXplX3QgSklURmluYWxpemVyOjpjb2RlU2l6ZSgpCiBib29sIEpJVEZpbmFsaXpl
cjo6ZmluYWxpemUoKQogewogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCi0gICAg
ICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsICgiREZHIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRD
b2RlOjpERkdKSVQpKS5kYXRhKCkpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlu
a0J1ZmZlciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkp
LAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgCiAgICAgbV9wbGFuLmNv
ZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUpOwpAQCAtNzEsNyArNzEsNyBAQCBib29sIEpJ
VEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
d2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZhbHVlKCkpOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6
ZUNvZGVSZWYoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsICgiREZH
IEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4u
Y29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkpKSwKKyAgICAgICAgRklOQUxJWkVf
REZHX0NPREUoKm1fbGlua0J1ZmZlciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5n
KENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkRG
R0pJVCkpLmRhdGEoKSkpLAogICAgICAgICBtX3dpdGhBcml0eUNoZWNrKTsKICAgICBtX3BsYW4u
Y29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSk7CiAgICAgCkBAIC04Myw3ICs4Myw3IEBA
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHZvaWQgSklURmluYWxpemVy
OjpmaW5hbGl6ZUNvbW1vbigpCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgbV9qaXRDb2Rl
LT5vcHRpbWl6ZUFmdGVyV2FybVVwKG1fcGxhbi5jb2RlQmxvY2spOworICAgIG1faml0Q29kZS0+
b3B0aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29kZUJsb2NrLmdldCgpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKICAgICAKICAgICBpZiAobV9wbGFuLmNvbXBpbGF0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCmluZGV4IDlhNjA1NjA0NGE5MjI3Y2IxMGVlNjAwYjQ2MzFjMTAwN2Y4ODMyZDAuLjEyNjQ4
YmM5NTNlNzE5NDg2NTdhMjZkYmIwYjU4MzgyZTU2ZjE2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTY5
LDcgKzY5LDcgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0OCgKICAgICAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5h
ZGRyZXNzT2ZEaWRUcnlUb0VudGVySW5Mb29wKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+YWRkcmVzc09mRGlkVHJ5VG9FbnRlckluTG9vcCgp
KSkpOwogICAgIH0KICAgICAKICAgICBqaXQubW92ZSgKQEAgLTI2OCwxNCArMjY4LDEzIEBAIHN0
YXRpYyB2b2lkIG9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVy
LCBHUFJSZWcgc2NyYXRjaCkKIAogdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0LCBib29sIGlzRXhpdGluZ1RvT3BDYXRj
aCkKIHsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKLSAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29k
ZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAg
ICBvc3JXcml0ZUJhcnJpZXIoaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86Om5v
bkFyZ0dQUjApOwogICAgIElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGpp
dC5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5n
ZXQoKTsKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3IgKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpOwotICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSA9IGlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihvd25lckV4ZWN1dGFibGUpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOwogICAgICAgICAgICAgb3NyV3JpdGVCYXJyaWVyKGppdCwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4
Myw2ICsyODIsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQsIGJvb2wgaXNFeAogICAgIGlmIChleGl0Lm1fY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CiAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBqaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFz
ZWxpbmVDb2RlQmxvY2spOwogICAgIAogICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFw
cGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkPihk
ZWNvZGVkQ29kZU1hcCwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFy
YXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRp
b24uY3BwCmluZGV4IGJhMmEwZGExMWRhNzJkZDVkMWUyZTM5MmJjOGZhMDQzNDQyOTBlMDcuLjQ4
ZTlmMDVjNmVlMmM4Y2I5NDZhMzE1MDM2NWRkNDRjMjllMmU1NTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAKQEAgLTQyLDcg
KzQyLDcgQEAgdm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoRXhlY1N0YXRlKiBleGVj
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIAogICAgIGZvciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpIHsKLSAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVD
b2RlQmxvY2suZ2V0KCk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7CiAgICAgICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKU0M6OkpJVENvZGU6OkJhc2VsaW5lSklUKQogICAgICAgICAg
ICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCmluZGV4IGQ2YzQ3NDBjZGUwMzE1MzBjNDM3ZDU0OWU2MGZlMDgwZTg3ZGJkZDcuLjdlMGYw
N2RhNTk3MmM4NGEyZjU0MjNkMzI2M2VmOWU3MTRlNWQ0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMTMwNyw3ICsxMzA3LDcgQEAgZXh0ZXJu
ICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9j
ayogY29kZUJsb2NrLCBPU1IKICAgICAKICAgICBib29sIGRpZFRyeVRvRW50ZXJJbnRvSW5saW5l
ZExvb3BzID0gZmFsc2U7CiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGV4aXQtPm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsg
aW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2Fs
bEZyYW1lKSB7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CisgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUtPmRpZFRyeVRvRW50ZXJJbkxvb3Ao
KSkgewogICAgICAgICAgICAgZGlkVHJ5VG9FbnRlckludG9JbmxpbmVkTG9vcHMgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEzNzcsOCArMTM3Nyw4IEBAIHN0YXRp
YyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUoVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29kZSoKIAogICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4K
ICAgICBjb21waWxlKAotICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwg
Y29kZUJsb2NrLCBGVExNb2RlLCBVSU5UX01BWCwKLSAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4o
KSwgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKKyAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIGNvZGVCbG9jaywgRlRMTW9k
ZSwgVUlOVF9NQVgsCisgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+KCksIFRvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHRyaWdnZXJUaWVyVXBOb3dDb21tb24oRXhlY1N0YXRlKiBleGVjLCBib29sIGluTG9vcCkKQEAg
LTE0NjMsNyArMTQ2Myw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93
KAogICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpCiAgICAgICAg
IHJldHVybiAwOwogICAgIAotICAgIGlmIChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2Rl
LT5vc3JFbnRyeUJsb2NrKCkpIHsKKyAgICBpZiAoQ29kZUJsb2NrKiBlbnRyeUJsb2NrID0gaml0
Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSkgewogICAgICAgICB2b2lkKiBhZGRyZXNzID0gRlRM
OjpwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGVudHJ5Qmxv
Y2ssIGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKICAgICAgICAgaWYgKGFkZHJlc3MpCkBA
IC0xNDc3LDcgKzE0NzcsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5v
dygKICAgICAgICAgCiAgICAgICAgIC8vIE9TUiBlbnRyeSBmYWlsZWQuIE9oIG5vISBUaGlzIGlt
cGxpZXMgdGhhdCB3ZSBuZWVkIHRvIHJldHJ5LiBXZSByZXRyeQogICAgICAgICAvLyB3aXRob3V0
IGV4cG9uZW50aWFsIGJhY2tvZmYgYW5kIHdlIG9ubHkgZG8gdGhpcyBmb3IgdGhlIGVudHJ5IGNv
ZGUgYmxvY2suCi0gICAgICAgIGppdENvZGUtPmNsZWFyT1NSRW50cnlCbG9jaygpOworICAgICAg
ICBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrID0gbnVsbHB0cjsKICAgICAgICAgaml0Q29kZS0+b3Ny
RW50cnlSZXRyeSA9IDA7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE0OTQsMTkgKzE0
OTQsMjEgQEAgY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCiAgICAgT3Bl
cmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKICAgICBqaXRDb2RlLT5yZWNvbnN0cnVj
dCgKICAgICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBz
dHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7Ci0gICAgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICBSZWZQdHI8Q29k
ZUJsb2NrPiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQo
KTsKICAgICBDb21waWxhdGlvblJlc3VsdCBmb3JFbnRyeVJlc3VsdCA9IGNvbXBpbGUoCi0gICAg
ICAgICp2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlN
b2RlLCBieXRlY29kZUluZGV4LAotICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CisgICAgICAgICp2
bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2suZ2V0KCksIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlN
b2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7CiAg
ICAgCi0gICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAg
ICBpZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSB7CisgICAgICAg
IEFTU0VSVChmb3JFbnRyeVJlc3VsdCA9PSBDb21waWxhdGlvbkRlZmVycmVkIHx8IHJlcGxhY2Vt
ZW50Q29kZUJsb2NrLT5oYXNPbmVSZWYoKSk7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAog
ICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZm9yLWVudHJ5IGNvbXBpbGUgYWxyZWFkeSBz
dWNjZWVkZWQuIEluIHRoYXQgY2FzZSBPU1IKICAgICAvLyBlbnRyeSB3aWxsIHN1Y2NlZWQgdW5s
ZXNzIHdlIHJhbiBvdXQgb2Ygc3RhY2suIEl0J3Mgbm90IGNsZWFyIHdoYXQgd2Ugc2hvdWxkIGRv
LgogICAgIC8vIFdlIHNpZ25hbCB0byB0cnkgYWdhaW4gYWZ0ZXIgYSB3aGlsZSBpZiB0aGF0IGhh
cHBlbnMuCiAgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KAotICAgICAg
ICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5QmxvY2soKSwgYnl0ZWNvZGVJbmRl
eCwgc3RyZWFtSW5kZXgpOworICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVu
dHJ5QmxvY2suZ2V0KCksIGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcio+KGFkZHJlc3MpOwogfQogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKaW5kZXggNGRmYWQ3ZWJjYmUzNDZj
OTFjZjVlNGE5MzJmYzk5ODIzMTdmYzNhYS4uMzhiZTkyYTFmNjI5Y2UyMWEzZTM3YzBiNmE4N2E4
ODNhZDQ4NDg1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCkBAIC0xMzEs
NyArMTMxLDcgQEAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uS2luZCBwcm9maWxlckNvbXBpbGF0aW9u
S2luZEZvck1vZGUoQ29tcGlsYXRpb25Nb2RlIG1vZGUpCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQogCi1QbGFuOjpQbGFuKENvZGVCbG9jayogcGFzc2VkQ29kZUJsb2NrLCBDb2RlQmxvY2sq
IHByb2ZpbGVkREZHQ29kZUJsb2NrLAorUGxhbjo6UGxhbihQYXNzUmVmUHRyPENvZGVCbG9jaz4g
cGFzc2VkQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAogICAgIENv
bXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAg
Y29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiB2bSgqcGFz
c2VkQ29kZUJsb2NrLT52bSgpKQpAQCAtMTQwLDEwICsxNDAsMTAgQEAgUGxhbjo6UGxhbihDb2Rl
QmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywK
ICAgICAsIG1vZGUobW9kZSkKICAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiAgICAgLCBtdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCi0g
ICAgLCBjb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/
IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spLCBwcm9maWxl
ckNvbXBpbGF0aW9uS2luZEZvck1vZGUobW9kZSkpKSA6IDApCisgICAgLCBjb21waWxhdGlvbihj
b2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGFkb3B0UmVmKG5ldyBQcm9m
aWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpLCBwcm9maWxlckNvbXBpbGF0aW9u
S2luZEZvck1vZGUobW9kZSkpKSA6IDApCiAgICAgLCBpbmxpbmVDYWxsRnJhbWVzKGFkb3B0UmVm
KG5ldyBJbmxpbmVDYWxsRnJhbWVTZXQoKSkpCi0gICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2sp
Ci0gICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2spCisgICAgLCBpZGVudGlmaWVycyhjb2Rl
QmxvY2suZ2V0KCkpCisgICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCiAgICAg
LCB3aWxsVHJ5VG9UaWVyVXAoZmFsc2UpCiAgICAgLCBzdGFnZShQcmVwYXJpbmcpCiB7CkBAIC01
MzUsNyArNTM1LDcgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogCiB2b2lkIFBsYW46OnJl
YWxseUFkZChDb21tb25EYXRhKiBjb21tb25EYXRhKQogewotICAgIHdhdGNocG9pbnRzLnJlYWxs
eUFkZChjb2RlQmxvY2ssICpjb21tb25EYXRhKTsKKyAgICB3YXRjaHBvaW50cy5yZWFsbHlBZGQo
Y29kZUJsb2NrLmdldCgpLCAqY29tbW9uRGF0YSk7CiAgICAgaWRlbnRpZmllcnMucmVhbGx5QWRk
KHZtLCBjb21tb25EYXRhKTsKICAgICB3ZWFrUmVmZXJlbmNlcy5yZWFsbHlBZGQodm0sIGNvbW1v
bkRhdGEpOwogICAgIHRyYW5zaXRpb25zLnJlYWxseUFkZCh2bSwgY29tbW9uRGF0YSk7CkBAIC01
NTMsMTQgKzU1MywxNCBAQCB2b2lkIFBsYW46Om5vdGlmeUNvbXBpbGVkKCkKIAogdm9pZCBQbGFu
Ojpub3RpZnlSZWFkeSgpCiB7Ci0gICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVh
ZHlBc3luY2hyb25vdXNseShjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKKyAgICBj
YWxsYmFjay0+Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KGNvZGVCbG9j
ay5nZXQoKSk7CiAgICAgc3RhZ2UgPSBSZWFkeTsKIH0KIAogQ29tcGlsYXRpb25SZXN1bHQgUGxh
bjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKQogewogICAgIC8vIFdlIHdpbGwg
ZXN0YWJsaXNoIG5ldyByZWZlcmVuY2VzIGZyb20gdGhlIGNvZGUgYmxvY2sgdG8gdGhpbmdzLiBT
bywgd2UgbmVlZCBhIGJhcnJpZXIuCi0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
KTsKICAgICAKICAgICBpZiAoIWlzU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gQ29tcGls
YXRpb25JbnZhbGlkYXRlZDsKQEAgLTU5Niw3ICs1OTYsNyBAQCBDb21waWxhdGlvblJlc3VsdCBQ
bGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCiAKIHZvaWQgUGxhbjo6Zmlu
YWxpemVBbmROb3RpZnlDYWxsYmFjaygpCiB7Ci0gICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlk
Q29tcGxldGUoY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgZmluYWxpemVXaXRob3V0
Tm90aWZ5aW5nQ2FsbGJhY2soKSk7CisgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoY29kZUJsb2NrLmdldCgpLCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpKTsK
IH0KIAogQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKQEAgLTYwNCwxNSArNjA0LDE2IEBAIENv
bXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6cmVtZW1iZXJDb2Rl
QmxvY2tzKCkKK3ZvaWQgUGxhbjo6Y2xlYXJDb2RlQmxvY2tNYXJrcygpCiB7CiAgICAgLy8gQ29t
cGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVy
Zm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBl
c3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0
IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0
ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2stPmNsZWFyTWFya3MoKTsKKyAgICBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmNsZWFyTWFya3MoKTsKICAgICBpZiAocHJvZmlsZWRE
RkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxvY2spLT53
cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICBwcm9maWxlZERGR0Nv
ZGVCbG9jay0+Y2xlYXJNYXJrcygpOwogfQogCiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNjIzLDEzICs2MjQsMTUgQEAg
dm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0t
OykKICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZtdXN0SGFuZGxlVmFs
dWVzW2ldKTsKIAotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIo
Y29kZUJsb2NrKTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVy
KHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2stPnZpc2l0U3Ryb25nbHkodmlz
aXRvcik7CisgICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT52aXNpdFN0cm9uZ2x5KHZpc2l0
b3IpOworICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgcHJvZmlsZWRERkdD
b2RlQmxvY2stPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7CiAKICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lcykgewogICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxs
RnJhbWVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5nZXQoKSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVh
ZE9ubHlQb2ludGVyKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKSk7
CisgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCktPnZpc2l0
U3Ryb25nbHkodmlzaXRvcik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgKaW5kZXggOGNkMzQ3OWIzMjZjM2M4ZjQzOTY0NjY2MGY5YWUxMTFmNTFlYmI3
MC4uZWVjNWM5ZWY2ZDJhNmRjYmZhNTJmNTA0Mjk1ZTZhYWQ4MmExZWM5NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmgKQEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgVGhyZWFkRGF0YTsK
IAogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAg
IFBsYW4oCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrVG9Db21waWxlLCBDb2RlQmxvY2sq
IHByb2ZpbGVkREZHQ29kZUJsb2NrLAorICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrVG9Db21waWxlLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAogICAgICAg
ICBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAg
ICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFu
KCk7CkBAIC03MSwxNyArNzEsMTQgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8UGxhbj4gewogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAot
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBjbGVhckNvZGVCbG9ja01h
cmtzKCk7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNl
bCgpOwogICAgIAogICAgIFZNJiB2bTsKLQotICAgIC8vIFRoZXNlIGNhbiBiZSByYXcgcG9pbnRl
cnMgYmVjYXVzZSB3ZSB2aXNpdCB0aGVtIGR1cmluZyBldmVyeSBHQyBpbiBjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbi4KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrOwotCisgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJs
b2NrOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb2ZpbGVkREZHQ29kZUJsb2NrOwogICAgIENv
bXBpbGF0aW9uTW9kZSBtb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleDsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAppbmRleCBhMTg2NjQxNzNmYzAwODk0NDIxMjUxMTIwN2Ux
N2U2YWFiYmRjZWIxLi5mYWViZGQwN2U4Y2E0YWU2ZDEyZjY3NDg0NjU4ZDMzZmNhZDQ5Y2NhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcApAQCAtMzUsNDQgKzM1LDQ2IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkKK1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
aygKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQorICAgIDogbV9kZmdD
b2RlQmxvY2soZGZnQ29kZUJsb2NrKQogewogfQogCiBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjazo6flRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkgeyB9CiAKLVJlZjxU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s6OmNyZWF0ZSgpCitSZWY8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IGRmZ0NvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhkZmdDb2RlQmxvY2spKTsKIH0KIAogdm9p
ZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRCZWNvbWVS
ZWFkeUFzeW5jaHJvbm91c2x5KAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sq
IHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAq
cHJvZmlsZWRERkdDb2RlQmxvY2ssCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAogICAgICAgICAg
ICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOwogICAgIH0KICAgICAKLSAgICBwcm9maWxlZERG
R0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgKLSAgICAgICAgcHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgIG1fZGZnQ29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3Vy
cmVudGx5KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSk7CiB9CiAKIHZvaWQgVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCi0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsK
ICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9m
ICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqcHJvZmlsZWRERkdDb2RlQmxvY2ssCisgICAgICAg
ICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwg
Km1fZGZnQ29kZUJsb2NrLAogICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIp
OwogICAgIH0KICAgICAKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2stPnJlcGxhY2VtZW50
KCkgIT0gcHJvZmlsZWRERkdDb2RlQmxvY2spIHsKKyAgICBpZiAobV9kZmdDb2RlQmxvY2stPnJl
cGxhY2VtZW50KCkgIT0gbV9kZmdDb2RlQmxvY2spIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiRHJv
cHBpbmcgRlRMIGNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiBvbiB0aGUgZmxvb3IgYmVjYXVz
ZSB0aGUgIgotICAgICAgICAgICAgICAgICJERkcgY29kZSBibG9jayAiLCAqcHJvZmlsZWRERkdD
b2RlQmxvY2ssICIgd2FzIGpldHRpc29uZWQuXG4iKTsKKyAgICAgICAgICAgICAgICAiREZHIGNv
ZGUgYmxvY2sgIiwgKm1fZGZnQ29kZUJsb2NrLCAiIHdhcyBqZXR0aXNvbmVkLlxuIik7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgwLDEwICs4MiwxMCBAQCB2b2lkIFRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAog
ICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAgICBjb2RlQmxv
Y2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOwogICAg
IAotICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCi0gICAgICAgIHByb2ZpbGVk
REZHQ29kZUJsb2NrLCByZXN1bHQpOworICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
ZygpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisg
ICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpLCByZXN1bHQpOwogCi0gICAgRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmls
ZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
Ojpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKIH0KIAogfSB9IC8v
IEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgKaW5kZXggMmE3OTMxZDJjMzQ3
ZDNmYTAzN2Q2NTY0NzUxZDg1ZWQ1NjAyMzJiNS4uM2UwZWEwMmQwZmEyMjM2NGI4YzY5MGZiMTcx
NTE1NzlmMTE0ZjE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaApAQCAtNDAsMTUg
KzQwLDE4IEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjayA6IHB1YmxpYyBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgewogcHJvdGVj
dGVkOgotICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisgICAgVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVC
bG9jayk7CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaygpOwogCi0gICAgc3RhdGljIFJlZjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjaz4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOwogICAg
IAotICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3Vz
bHkoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBw
cm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQpOworICAgIHZpcnR1YWwgdm9p
ZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKik7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGls
YXRpb25SZXN1bHQpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fZGZnQ29k
ZUJsb2NrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKaW5kZXggYzllNWM3OWZkNjhj
N2QxNmRiNmYwMzlhOGU2NzZmNTFhM2NjNjRlNy4uNzBjYzgyNTAyMjYyZTE3M2MzMDNmNjQ4NzE4
NWQwM2ZkZDFmNWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCkBAIC0zNSw3ICszNSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpCitUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdD
b2RlQmxvY2spCisgICAgOiBtX2RmZ0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCiB7CiB9CiAKQEAg
LTQzLDM4ICs0NSwzOSBAQCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjp+VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpbwogewogfQogCi1SZWY8VG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz5Ub0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKQorUmVmPFRvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdD
b2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKGRmZ0NvZGVCbG9jaykp
OwogfQogCiB2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6
OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseSgKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAg
ICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAq
Y29kZUJsb2NrLCAiIChmb3IgIiwgKnByb2ZpbGVkREZHQ29kZUJsb2NrLAorICAgICAgICAgICAg
Ik9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICptX2Rm
Z0NvZGVCbG9jaywKICAgICAgICAgICAgICIpIGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsKICAgICB9
CiAgICAgCi0gICAgcHJvZmlsZWRERkdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNl
T3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCi0gICAgICAgIHByb2ZpbGVkREZHQ29k
ZUJsb2NrKTsKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRp
bWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0
KCkpOwogfQogCiB2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewog
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAg
ICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAi
LCAqcHJvZmlsZWRERkdDb2RlQmxvY2ssCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxh
dGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAogICAgICAg
ICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwogICAgIH0KICAgICAKLSAgICBKSVRD
b2RlKiBqaXRDb2RlID0gcHJvZmlsZWRERkdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Cisg
ICAgSklUQ29kZSogaml0Q29kZSA9IG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwog
ICAgICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNj
ZXNzZnVsOgotICAgICAgICBqaXRDb2RlLT5zZXRPU1JFbnRyeUJsb2NrKCpjb2RlQmxvY2stPnZt
KCksIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBjb2RlQmxvY2spOworICAgICAgICBqaXRDb2RlLT5v
c3JFbnRyeUJsb2NrID0gY29kZUJsb2NrOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBp
bGF0aW9uRmFpbGVkOgogICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeVJldHJ5ID0gMDsKQEAgLTg3
LDcgKzkwLDcgQEAgdm9pZCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Ci0gICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRl
KGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVz
dWx0KTsKIH0KIAogfSB9IC8vIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oCmluZGV4IDU4MGY3ZDJmNDZjODUyNzUxN2JjOGRkOWNjNWFj
NzMxMDI1YWYxNGYuLmM5ZGNmNmQ3YzAxZmMxZTQ4NTYwMDliOGZkNzMyMWMwODllM2U0YzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCkBAIC00
MCwxNSArNDAsMTggQEAgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFRvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrIHsKIHByb3RlY3RlZDoKLSAgICBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrKCk7CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKIAogcHVibGljOgog
ICAgIHZpcnR1YWwgflRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2so
KTsKIAotICAgIHN0YXRpYyBSZWY8VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaz4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0Nv
ZGVCbG9jayk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVh
ZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJs
b2NrKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sq
LCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShD
b2RlQmxvY2sqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2Rl
QmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPENvZGVC
bG9jaz4gbV9kZmdDb2RlQmxvY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCmluZGV4IGFjODIzYzNhMWZh
YWY5MzkyYTUzNmRmZDA2MjBhNjUwYzZiMjA1NzQuLmI0MWQ4MDNjMzRlNDk5MDcxZjE5OGVjOTVi
ZTk1NGQ2Mzc1YmQ0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwCkBAIC0yMDcsMTQgKzIwNywxNCBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0oVk0mIHZtKQogICAgIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKIH0KIAot
dm9pZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKK3ZvaWQgV29ya2xpc3Q6
OmNsZWFyQ29kZUJsb2NrTWFya3MoVk0mIHZtKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigp
OyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0g
aXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICgmcGxhbi0+dm0gIT0gJnZtKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2NrcygpOworICAg
ICAgICBwbGFuLT5jbGVhckNvZGVCbG9ja01hcmtzKCk7CiAgICAgfQogfQogCkBAIC00NjcsMTEg
KzQ2NywxMSBAQCB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQog
Ci12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit2b2lkIGNsZWFyQ29kZUJsb2NrTWFy
a3MoVk0mIHZtKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlz
dHMoKTsgaS0tOykgewogICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6
OndvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+cmVtZW1i
ZXJDb2RlQmxvY2tzKHZtKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LT5jbGVhckNvZGVCbG9ja01h
cmtzKHZtKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
aAppbmRleCAwNzVmN2NjZDdhMDk0NmI2NTMxMTIyMDc2ZjcxMjVhMTBmMzM3ZTA2Li4xNzQwNzQ1
M2ZkOTcyNTBjNDM5MTczMGFkYjZmNDdlNTI3ZTc1ZDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAvLyB3b3Jr
bGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAgIHZvaWQgY29tcGxldGVB
bGxQbGFuc0ZvclZNKFZNJik7CiAKLSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwor
ICAgIHZvaWQgY2xlYXJDb2RlQmxvY2tNYXJrcyhWTSYpOwogCiAgICAgdm9pZCB3YWl0VW50aWxB
bGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKICAgICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTShWTSYsIENvbXBpbGF0aW9uS2V5ID0gQ29tcGlsYXRpb25LZXkoKSk7CkBAIC0xNDEs
NyArMTQxLDcgQEAgaW5saW5lIFdvcmtsaXN0KiB3b3JrbGlzdEZvckluZGV4T3JOdWxsKHVuc2ln
bmVkIGluZGV4KQogfQogCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwotdm9pZCBy
ZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKK3ZvaWQgY2xlYXJDb2RlQmxvY2tNYXJrcyhWTSYpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAppbmRleCAwYWJhNmE4MDhlMWRmYzMyM2ZjMTlkYTRiZGFl
MDFjMjUxMDI1MDgxLi4zZGE0ODQ4NmFjY2FlM2JkMWE4NzU0ZWVlN2RkYzRmMDIwMmQzMjFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCkBAIC05
OSw3ICs5OSw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAg
ICAgaml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCiAgICAgICAgICAgICBGSU5BTElaRV9E
RkdfQ09ERSgKICAgICAgICAgICAgICAgICAqZXhpdFRodW5rc0xpbmtCdWZmZXIsCi0gICAgICAg
ICAgICAgICAgKCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsK
KyAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklU
KSkuZGF0YSgpKSkpOwogICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhp
dHMsIHNvIG5vIGV4aXQgdGh1bmtzLgogICAgIAogICAgIGlmIChzaWRlQ29kZUxpbmtCdWZmZXIp
IHsKQEAgLTExNiw3ICsxMTYsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlv
bigpCiAgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09ERSgKICAgICAg
ICAgICAgICpzaWRlQ29kZUxpbmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBzaWRlIGNvZGUg
Zm9yICVzIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkKKyAgICAgICAgICAg
ICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQo
KSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkKICAgICAgICAgICAgIC5leGVjdXRhYmxlTWVt
b3J5KCkpOwogICAgIH0KICAgICAKQEAgLTEyNCw3ICsxMjQsNyBAQCBib29sIEpJVEZpbmFsaXpl
cjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTEla
RV9ERkdfQ09ERSgKICAgICAgICAgICAgICpoYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlciwKICAg
ICAgICAgICAgICgiRlRMIGV4Y2VwdGlvbiBoYW5kbGVyIGZvciAlcyIsCi0gICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENv
ZGU6OkZUTEpJVCkpLmRhdGEoKSkpCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRh
dGEoKSkpCiAgICAgICAgICAgICAuZXhlY3V0YWJsZU1lbW9yeSgpKTsKICAgICB9CiAKQEAgLTEz
Nyw3ICsxMzcsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAg
aml0Q29kZS0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KAogICAgICAgICBGSU5BTEla
RV9ERkdfQ09ERSgKICAgICAgICAgICAgICplbnRyeXBvaW50TGlua0J1ZmZlciwKLSAgICAgICAg
ICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBnZW5lcmF0ZWQgY29k
ZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2Nr
LCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOworICAgICAgICAgICAgKCJG
VEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVw
IiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCks
IEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rpb24pKSk7CiAgICAgCiAgICAgbV9wbGFu
LmNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKaW5kZXggN2M2Y2VlMjNmOGQ3M2ZkOTQ1OTYzODZjYTQ3
NGQyODA0MDI5ODkyOS4uZWQ2ZWQ4OWFjZThmMGMyMDQ0YWNjZWY3N2U1ZjUxOTNkZGE0MDkwYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCkBAIC00MSwx
MSArNDEsMTcgQEAgQ29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogCiBDb2RlQmxvY2tTZXQ6
On5Db2RlQmxvY2tTZXQoKQogeworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX29s
ZENvZGVCbG9ja3MpCisgICAgICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsKKworICAgIGZvciAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpCisgICAgICAgIGNvZGVCbG9jay0+
ZGVyZWYoKTsKIH0KIAotdm9pZCBDb2RlQmxvY2tTZXQ6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3ZvaWQgQ29kZUJsb2NrU2V0OjphZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9j
aykKIHsKLSAgICBib29sIGlzTmV3RW50cnkgPSBtX25ld0NvZGVCbG9ja3MuYWRkKGNvZGVCbG9j
aykuaXNOZXdFbnRyeTsKKyAgICBDb2RlQmxvY2sqIGJsb2NrID0gY29kZUJsb2NrLmxlYWtSZWYo
KTsKKyAgICBib29sIGlzTmV3RW50cnkgPSBtX25ld0NvZGVCbG9ja3MuYWRkKGJsb2NrKS5pc05l
d0VudHJ5OwogICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdFbnRyeSwgaXNOZXdFbnRyeSk7CiB9CiAK
QEAgLTU4LDM1ICs2NCw1MiBAQCB2b2lkIENvZGVCbG9ja1NldDo6cHJvbW90ZVlvdW5nQ29kZUJs
b2NrcygpCiB2b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCkK
IHsKICAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKQotICAg
ICAgICBjb2RlQmxvY2stPmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCk7CisgICAgICAg
IGNvZGVCbG9jay0+Y2xlYXJNYXJrcygpOwogCiAgICAgLy8gV2UgcHJvbW90ZSBhZnRlciB3ZSBj
bGVhciBtYXJrcyBvbiB0aGUgb2xkIGdlbmVyYXRpb24gQ29kZUJsb2NrcyBiZWNhdXNlCiAgICAg
Ly8gbm9uZSBvZiB0aGUgeW91bmcgZ2VuZXJhdGlvbnMgQ29kZUJsb2NrcyBuZWVkIHRvIGJlIGNs
ZWFyZWQuCiAgICAgcHJvbW90ZVlvdW5nQ29kZUJsb2NrcygpOwogfQogCi12b2lkIENvZGVCbG9j
a1NldDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQordm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFy
a3NGb3JFZGVuQ29sbGVjdGlvbihjb25zdCBWZWN0b3I8Y29uc3QgSlNDZWxsKj4mIHJlbWVtYmVy
ZWRTZXQpCiB7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fbmV3Q29kZUJsb2Nr
cykKLSAgICAgICAgY29kZUJsb2NrLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShj
b2RlQmxvY2spOwotCi0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJs
b2NrcykKLSAgICAgICAgY29kZUJsb2NrLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJv
eShjb2RlQmxvY2spOworICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdpbGwgcmV2aXNpdCBD
b2RlQmxvY2tzIGluIHJlbWVtYmVyZWQgRXhlY3V0YWJsZXMgZXZlbiBpZiB0aGV5IHdlcmUgcHJl
dmlvdXNseSBtYXJrZWQuCisgICAgZm9yIChjb25zdCBKU0NlbGwqIGNlbGwgOiByZW1lbWJlcmVk
U2V0KSB7CisgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjb25zdF9jYXN0
PFNjcmlwdEV4ZWN1dGFibGUqPihqc0R5bmFtaWNDYXN0PGNvbnN0IFNjcmlwdEV4ZWN1dGFibGUq
PihjZWxsKSk7CisgICAgICAgIGlmICghZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBleGVjdXRhYmxlLT5mb3JFYWNoQ29kZUJsb2NrKFt0aGlzXShDb2RlQmxvY2sq
IGNvZGVCbG9jaykgeworICAgICAgICAgICAgY29kZUJsb2NrLT5jbGVhck1hcmtzKCk7CisgICAg
ICAgICAgICBtX3JlbWVtYmVyZWQuYWRkKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgIH0K
IH0KIAogdm9pZCBDb2RlQmxvY2tTZXQ6OmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKEhl
YXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUpCiB7CiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiYg
c2V0ID0gY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24gPyBtX25ld0NvZGVCbG9ja3Mg
OiBtX29sZENvZGVCbG9ja3M7Ci0gICAgVmVjdG9yPENvZGVCbG9jayo+IHVubWFya2VkOwotICAg
IGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBzZXQpIHsKLSAgICAgICAgaWYgKEhlYXA6Omlz
TWFya2VkKGNvZGVCbG9jaykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdW5tYXJr
ZWQuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgfQogCi0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVC
bG9jayA6IHVubWFya2VkKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+Y2xhc3NJbmZvKCktPm1ldGhv
ZFRhYmxlLmRlc3Ryb3koY29kZUJsb2NrKTsKLSAgICAgICAgc2V0LnJlbW92ZShjb2RlQmxvY2sp
OworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBmaXhwb2ludCBiZWNhdXNlIGNvZGUgYmxvY2tz
IHRoYXQgYXJlIHVubWFya2VkIG1heQorICAgIC8vIHJlZmVyIHRvIGVhY2ggb3RoZXIuIEZvciBl
eGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQgaXMgb3duZWQgYnkKKyAgICAvLyB0aGUgR0Mg
bWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkgY29kZSBibG9jayB0aGF0IGlzIGFsc28gb3du
ZWQgYnkKKyAgICAvLyB0aGUgR0MuCisgICAgVmVjdG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92
ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1
bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBzZXQuc2l6ZSgpLCAiLi4uXG4iKTsKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBzZXQpIHsKKyAgICAgICAg
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsKKyAgICAgICAgICAgIHRvUmVtb3Zl
LmFwcGVuZChjb2RlQmxvY2spOworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgIFJlbW92aW5nICIsIHRvUmVtb3ZlLnNpemUoKSwgIiBibG9j
a3MuXG4iKTsKKyAgICAgICAgaWYgKHRvUmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogdG9SZW1vdmUpCisgICAg
ICAgICAgICBzZXQucmVtb3ZlKGNvZGVCbG9jayk7CisgICAgICAgIHRvUmVtb3ZlLnJlc2l6ZSgw
KTsKICAgICB9CiAKICAgICAvLyBBbnkgcmVtYWluaW5nIHlvdW5nIENvZGVCbG9ja3MgYXJlIGxp
dmUgYW5kIG5lZWQgdG8gYmUgcHJvbW90ZWQgdG8gdGhlIHNldCBvZiBvbGQgQ29kZUJsb2Nrcy4K
QEAgLTk2LDYgKzExOSw3IEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVu
cmVmZXJlbmNlZChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQogCiB2b2lkIENvZGVCbG9j
a1NldDo6cmVtb3ZlKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIGNvZGVCbG9jay0+ZGVy
ZWYoKTsKICAgICBpZiAobV9vbGRDb2RlQmxvY2tzLmNvbnRhaW5zKGNvZGVCbG9jaykpIHsKICAg
ICAgICAgbV9vbGRDb2RlQmxvY2tzLnJlbW92ZShjb2RlQmxvY2spOwogICAgICAgICByZXR1cm47
CkBAIC0xMDQsMTYgKzEyOCwzNSBAQCB2b2lkIENvZGVCbG9ja1NldDo6cmVtb3ZlKENvZGVCbG9j
ayogY29kZUJsb2NrKQogICAgIG1fbmV3Q29kZUJsb2Nrcy5yZW1vdmUoY29kZUJsb2NrKTsKIH0K
IAotdm9pZCBDb2RlQmxvY2tTZXQ6OndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVC
bG9ja3MoSGVhcCogaGVhcCkKK3ZvaWQgQ29kZUJsb2NrU2V0Ojp0cmFjZU1hcmtlZChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiVHJh
Y2luZyAiLCBtX2N1cnJlbnRseUV4ZWN1dGluZy5zaXplKCksICIgY29kZSBibG9ja3MuXG4iKTsK
KworICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHNldCBi
ZWNhdXNlIGpldHRpc29uaW5nIGNvZGUKKyAgICAvLyBpcyBub3QgdmFsdWFibGUgb25jZSBpdCdz
IG9uIHRoZSBzdGFjay4gV2UncmUgcGFzdCB0aGUgcG9pbnQgd2hlcmUKKyAgICAvLyBqZXR0aXNv
bmluZyB3b3VsZCBhdm9pZCB0aGUgY29zdCBvZiBPU1IgZXhpdC4KKyAgICBmb3IgKGNvbnN0IFJl
ZlB0cjxDb2RlQmxvY2s+JiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAg
ICAgY29kZUJsb2NrLT52aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOworCisgICAgLy8gV2Ugc3Ryb25n
bHkgdmlzaXQgdGhlIHJlbWVtYmVyZWQgc2V0IGJlY2F1c2UgamV0dGlzb25pbmcgb2xkIGNvZGUg
ZHVyaW5nCisgICAgLy8gRWRlbiBHQyBpcyB1bnNvdW5kLiBUaGVyZSBtaWdodCBiZSBhbiBvbGQg
b2JqZWN0IHdpdGggYSBzdHJvbmcgcmVmZXJlbmNlCisgICAgLy8gdG8gdGhlIGNvZGUuCisgICAg
Zm9yIChjb25zdCBSZWZQdHI8Q29kZUJsb2NrPiYgY29kZUJsb2NrIDogbV9yZW1lbWJlcmVkKQor
ICAgICAgICBjb2RlQmxvY2stPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7Cit9CisKK3ZvaWQgQ29k
ZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MoSGVhcCogaGVh
cCkKIHsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwg
bV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9y
IChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBo
ZWFwLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICBmb3IgKGNvbnN0IFJlZlB0cjxDb2Rl
QmxvY2s+JiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAgaGVhcC0+
d3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogCi0gICAgLy8gSXQn
cyBzYWZlIHRvIGNsZWFyIHRoaXMgc2V0IGJlY2F1c2Ugd2Ugd29uJ3QgZGVsZXRlIHRoZSBDb2Rl
QmxvY2tzCi0gICAgLy8gaW4gaXQgdW50aWwgdGhlIG5leHQgR0MsIGFuZCB3ZSdsbCByZWNvbXB1
dGUgaXQgYXQgdGhhdCB0aW1lLgorICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBSZWZQ
dHIgc2V0cyBiZWNhdXNlIHdlIHdvbid0IGRlbGV0ZSB0aGUgQ29kZUJsb2NrcworICAgIC8vIGlu
IHRoZW0gdW50aWwgdGhlIG5leHQgR0MsIGFuZCB3ZSdsbCByZWNvbXB1dGUgdGhlbSBhdCB0aGF0
IHRpbWUuCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xlYXIoKTsKKyAgICBtX3JlbWVtYmVy
ZWQuY2xlYXIoKTsKIH0KIAogdm9pZCBDb2RlQmxvY2tTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKQEAgLTEyOCw4ICsxNzEsOCBAQCB2b2lkIENvZGVCbG9ja1NldDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1w
KGNvZGVCbG9jaykpOwogICAgIG91dC5wcmludCgiXSwgY3VycmVudGx5RXhlY3V0aW5nID0gWyIp
OwogICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVC
bG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBv
aW50ZXJEdW1wKGNvZGVCbG9jaykpOworICAgIGZvciAoY29uc3QgUmVmUHRyPENvZGVCbG9jaz4m
IGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHBvaW50ZXJEdW1wKGNvZGVCbG9jay5nZXQoKSkpOwogICAgIG91dC5wcmludCgiXX0iKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAppbmRleCBhZTE0
NDFlMGIwNjk4OGFlZmFmODM2M2QzYTFiMjkwNjQ0MDQwN2Q0Li4xOGVmNWE0MjIxOGFkYTllMmEy
MjQ3NTkxNjEzMWU0MjFjNDgyY2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db2RlQmxvY2tTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2Rl
QmxvY2tTZXQuaApAQCAtNTEsMTIgKzUxLDEzIEBAIGNsYXNzIENvZGVCbG9ja1NldCB7CiBwdWJs
aWM6CiAgICAgQ29kZUJsb2NrU2V0KCk7CiAgICAgfkNvZGVCbG9ja1NldCgpOwotCi0gICAgdm9p
ZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIAogICAgIC8vIEFkZCBhIENvZGVCbG9jay4g
VGhpcyBpcyBvbmx5IGNhbGxlZCBieSBDb2RlQmxvY2sgY29uc3RydWN0b3JzLgotICAgIHZvaWQg
YWRkKENvZGVCbG9jayopOworICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CiAg
ICAgCisgICAgLy8gQ2xlYXIgbWFyayBiaXRzIGZvciBjZXJ0YWluIENvZGVCbG9ja3MgZGVwZW5k
aW5nIG9uIHRoZSB0eXBlIG9mIGNvbGxlY3Rpb24uCisgICAgdm9pZCBjbGVhck1hcmtzRm9yRWRl
bkNvbGxlY3Rpb24oY29uc3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisKICAgICAvLyBDbGVh
ciBhbGwgbWFyayBiaXRzIGZvciBhbGwgQ29kZUJsb2Nrcy4KICAgICB2b2lkIGNsZWFyTWFya3NG
b3JGdWxsQ29sbGVjdGlvbigpOwogCkBAIC03MSw5ICs3MiwxMyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCByZW1vdmUoQ29kZUJsb2NrKik7CiAgICAgCisgICAgLy8gVHJhY2UgYWxsIG1hcmtl
ZCBjb2RlIGJsb2Nrcy4gVGhlIENvZGVCbG9jayBpcyBmcmVlIHRvIG1ha2UgdXNlIG9mCisgICAg
Ly8gbWF5QmVFeGVjdXRpbmcuCisgICAgdm9pZCB0cmFjZU1hcmtlZChTbG90VmlzaXRvciYpOwor
CiAgICAgLy8gQWRkIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIENvZGVCbG9ja3MgdG8gdGhlIHJl
bWVtYmVyZWQgc2V0IHRvIGJlIAogICAgIC8vIHJlLXNjYW5uZWQgZHVyaW5nIHRoZSBuZXh0IGNv
bGxlY3Rpb24uCi0gICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxv
Y2tzKEhlYXAqKTsKKyAgICB2b2lkIHJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2Nr
cyhIZWFwKik7CiAKICAgICAvLyBWaXNpdHMgZWFjaCBDb2RlQmxvY2sgaW4gdGhlIGhlYXAgdW50
aWwgdGhlIHZpc2l0b3IgZnVuY3Rpb24gcmV0dXJucyB0cnVlCiAgICAgLy8gdG8gaW5kaWNhdGUg
dGhhdCBpdCBpcyBkb25lIGl0ZXJhdGluZywgb3IgdW50aWwgZXZlcnkgQ29kZUJsb2NrIGhhcyBi
ZWVuCkBAIC05NiwxMSArMTAxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyTWFya3NGb3JDb2RlQmxvY2tz
SW5SZW1lbWJlcmVkRXhlY3V0YWJsZXMoY29uc3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CiAg
ICAgdm9pZCBwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCk7CiAKKyAgICAvLyBUaGlzIGlzIG5vdCBh
IHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBm
aW5kCisgICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBvaW50ZXJzLiBJIGNvdWxkIGhhdmUgd3JpdHRl
biBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVzCisgICAgLy8gYW5kIGFsbCwgYnV0IHRoYXQg
c2VlbWVkIGxpa2Ugb3ZlcmtpbGwuCiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX29sZENvZGVC
bG9ja3M7CiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX25ld0NvZGVCbG9ja3M7Ci0gICAgSGFz
aFNldDxDb2RlQmxvY2sqPiBtX2N1cnJlbnRseUV4ZWN1dGluZzsKKyAgICBIYXNoU2V0PFJlZlB0
cjxDb2RlQmxvY2s+PiBtX2N1cnJlbnRseUV4ZWN1dGluZzsKKyAgICBIYXNoU2V0PFJlZlB0cjxD
b2RlQmxvY2s+PiBtX3JlbWVtYmVyZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggZmEyY2Y4ZjM1YWYwYzRiNGEzNWZiYzI4NjE3
ZjQ2ZmM4N2QzMzBhOS4uNTM3YjQwYTI1ZWFhOGM3MGI1MzVkYTc4ODBhNzhhMzBjMWFkMGYyMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM4Miw3ICszODIsNiBAQCB2b2lk
IEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKICAgICBSRUxFQVNFX0FTU0VSVCghbV92bS0+
ZW50cnlTY29wZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09
IE5vT3BlcmF0aW9uKTsKIAotICAgIG1fY29kZUJsb2Nrcy5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgp
OwogICAgIG1fb2JqZWN0U3BhY2UubGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICByZWxlYXNl
RGVsYXllZFJlbGVhc2VkT2JqZWN0cygpOwogCkBAIC01MjEsNiArNTIwLDE3IEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSwgdm9pZCogc3RhY2tPcmlnaW4sIHZvaWQq
IHN0YWNrVG9wLCBNYWNoCiAgICAgR0NQSEFTRShNYXJrUm9vdHMpOwogICAgIEFTU0VSVChpc1Zh
bGlkVGhyZWFkU3RhdGUobV92bSkpOwogCisgICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVt
YmVyZWRTZXQobV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5zaXplKCkpOworICAgIG1fc2xvdFZp
c2l0b3IubWFya1N0YWNrKCkuZmlsbFZlY3RvcihyZW1lbWJlcmVkU2V0KTsKKworI2lmIEVOQUJM
RShERkdfSklUKQorICAgIERGRzo6Y2xlYXJDb2RlQmxvY2tNYXJrcygqbV92bSk7CisjZW5kaWYK
KyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKQorICAgICAg
ICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrc0ZvckVkZW5Db2xsZWN0aW9uKHJlbWVtYmVyZWRTZXQp
OworICAgIGVsc2UKKyAgICAgICAgbV9jb2RlQmxvY2tzLmNsZWFyTWFya3NGb3JGdWxsQ29sbGVj
dGlvbigpOworCiAgICAgLy8gV2UgZ2F0aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xl
YXJpbmcgbWFyayBiaXRzIGJlY2F1c2UgY29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVz
ZXMgdGhlIG1hcmsgYml0cyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxp
ZC4KICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygmbV9vYmplY3RTcGFj
ZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKQEAgLTUyOCwxNiArNTM4LDEwIEBAIHZvaWQg
SGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSwgdm9pZCogc3RhY2tPcmlnaW4sIHZv
aWQqIHN0YWNrVG9wLCBNYWNoCiAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJv
b3RzKTsKICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwog
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0p
OwotI2VuZGlmCisgICAgY2xlYXJMaXZlbmVzc0RhdGEoKTsKIAotICAgIGlmIChtX29wZXJhdGlv
bkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pIHsKKyAgICBpZiAobV9vcGVyYXRpb25JblBy
b2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQogICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7
Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuY2xlYXJNYXJrU3RhY2soKTsKLSAgICB9Ci0KLSAgICBj
bGVhckxpdmVuZXNzRGF0YSgpOwogCiAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0g
ZmFsc2U7CiAKQEAgLTU3Niw3ICs1ODAsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUg
Z2NTdGFydFRpbWUsIHZvaWQqIHN0YWNrT3JpZ2luLCB2b2lkKiBzdGFja1RvcCwgTWFjaAogICAg
IHsKICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwog
Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgdmlzaXRF
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKICAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAg
ICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CkBAIC02OTEs
OSArNjk0LDYgQEAgdm9pZCBIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmIHJvb3RzKQogdm9pZCBIZWFwOjpjbGVhckxpdmVuZXNzRGF0YSgpCiB7CiAgICAg
R0NQSEFTRShDbGVhckxpdmVuZXNzRGF0YSk7Ci0gICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBGdWxsQ29sbGVjdGlvbikKLSAgICAgICAgbV9jb2RlQmxvY2tzLmNsZWFyTWFya3NGb3JG
dWxsQ29sbGVjdGlvbigpOwotCiAgICAgbV9vYmplY3RTcGFjZS5jbGVhck5ld2x5QWxsb2NhdGVk
KCk7CiAgICAgbV9vYmplY3RTcGFjZS5jbGVhck1hcmtzKCk7CiB9CkBAIC04MTUsNiArODE1LDcg
QEAgdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikK
IHZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKIHsKICAgICBH
Q1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk7CisgICAgbV9jb2RlQmxv
Y2tzLnRyYWNlTWFya2VkKG1fc2xvdFZpc2l0b3IpOwogICAgIG1faml0U3R1YlJvdXRpbmVzLnRy
YWNlTWFya2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQpAQCAtOTQ4LDEyICs5NDksMTggQEAgdm9p
ZCBIZWFwOjpkZWxldGVBbGxDb2RlQmxvY2tzKCkKICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1
bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gZGVsZXRlIGFsbCBKYXZhU2NyaXB0IGNvZGUsIHNpbmNl
CiAgICAgLy8gd2UnbGwgZW5kIHVwIHJldHVybmluZyB0byBkZWxldGVkIGNvZGUuCiAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fdm0tPmVudHJ5U2NvcGUpOwotICAgIEFTU0VSVChtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogCiAgICAgY29tcGxldGVBbGxERkdQbGFucygpOwog
Ci0gICAgZm9yIChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA6IG1fZXhlY3V0YWJsZXMpCi0g
ICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyQ29kZSgpOworICAgIGZvciAoRXhlY3V0YWJsZUJhc2Uq
IGN1cnJlbnQgOiBtX2V4ZWN1dGFibGVzKSB7CisgICAgICAgIGlmICghY3VycmVudC0+aXNGdW5j
dGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlKCk7CisgICAgfQor
CisgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBt
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOworICAgIG1fY29kZUJsb2Nrcy5j
bGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5t
YXJrZWRBbmRVbnJlZmVyZW5jZWQoRnVsbENvbGxlY3Rpb24pOwogfQogCiB2b2lkIEhlYXA6OmRl
bGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcygpCkBAIC05NzMsOSArOTgwLDkgQEAgdm9pZCBIZWFw
OjpjbGVhclVubWFya2VkRXhlY3V0YWJsZXMoKQogICAgICAgICBpZiAoaXNNYXJrZWQoY3VycmVu
dCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAvLyBFYWdlcmx5IGRlcmVmZXJl
bmNlIHRoZSBFeGVjdXRhYmxlJ3MgSklUQ29kZSBpbiBvcmRlciB0byBydW4gd2F0Y2hwb2ludAot
ICAgICAgICAvLyBkZXN0cnVjdG9ycy4gT3RoZXJ3aXNlLCB3YXRjaHBvaW50cyBtaWdodCBmaXJl
IGZvciBkZWxldGVkIENvZGVCbG9ja3MuCi0gICAgICAgIGN1cnJlbnQtPmNsZWFyQ29kZSgpOwor
ICAgICAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2UgZXhlY3V0YWJsZSBtZW1vcnkgaXMgbGltaXRl
ZCBvbiBzb21lIHBsYXRmb3JtcyBhbmQgYmVjYXVzZQorICAgICAgICAvLyBDb2RlQmxvY2sgcmVx
dWlyZXMgZWFnZXIgZmluYWxpemF0aW9uLgorICAgICAgICBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJD
b2RlVmlydHVhbChjdXJyZW50KTsKICAgICAgICAgc3RkOjpzd2FwKG1fZXhlY3V0YWJsZXNbaV0s
IG1fZXhlY3V0YWJsZXMubGFzdCgpKTsKICAgICAgICAgbV9leGVjdXRhYmxlcy5yZW1vdmVMYXN0
KCk7CiAgICAgfQpAQCAtMTA5Niw3ICsxMTAzLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6
Y29sbGVjdEltcGwoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSwgdm9pZCogc3RhY2tPcmkK
ICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwogICAgIGRlbGV0ZVNvdXJjZVByb3Zp
ZGVyQ2FjaGVzKCk7CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgd3JpdGVC
YXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcygpOworICAgIHJlbWVtYmVyQ3VycmVu
dGx5RXhlY3V0aW5nQ29kZUJsb2NrcygpOwogCiAgICAgcmVzZXRBbGxvY2F0b3JzKCk7CiAgICAg
dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpOwpAQCAtMTEzMyw2ICsxMTQwLDcgQEAgdm9pZCBIZWFw
Ojp3aWxsU3RhcnRDb2xsZWN0aW9uKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUpCiAgICAg
R0NQSEFTRShTdGFydGluZ0NvbGxlY3Rpb24pOwogICAgIGlmIChzaG91bGREb0Z1bGxDb2xsZWN0
aW9uKGNvbGxlY3Rpb25UeXBlKSkgewogICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBG
dWxsQ29sbGVjdGlvbjsKKyAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwog
ICAgICAgICBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJGdWxsQ29sbGVjdGlvbiwgIik7
CkBAIC0xMjQ5LDEwICsxMjU3LDEwIEBAIHZvaWQgSGVhcDo6bm90aWZ5SW5jcmVtZW50YWxTd2Vl
cGVyKCkKICAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBpbmcoKTsKIH0KIAotdm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCkKK3ZvaWQgSGVhcDo6cmVt
ZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCkKIHsKLSAgICBHQ1BIQVNFKFdyaXRl
QmFycmllckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MpOwotICAgIG1fY29kZUJsb2Nrcy53
cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKHRoaXMpOworICAgIEdDUEhB
U0UoUmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKTsKKyAgICBtX2NvZGVCbG9j
a3MucmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKHRoaXMpOwogfQogCiB2b2lk
IEhlYXA6OnJlc2V0QWxsb2NhdG9ycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXgg
MjM3MzZhZTY1N2FkNDYzMjgwYzA5Mzg3NmFhZWNmMDQ5NTU4NGI1OC4uYjI4YWU4N2MxYmI3MDJi
MzI3MzQwZDI2ODEyYzJjZjZjYWY3YmRmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApA
QCAtMzEzLDcgKzMxMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzbmFwc2hvdE1hcmtlZFNwYWNl
KCk7CiAgICAgdm9pZCBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwogICAgIHZvaWQgbm90
aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmdDb2RlQmxvY2tzKCk7CisgICAgdm9pZCByZW1lbWJlckN1cnJlbnRseUV4ZWN1dGlu
Z0NvZGVCbG9ja3MoKTsKICAgICB2b2lkIHJlc2V0QWxsb2NhdG9ycygpOwogICAgIHZvaWQgY29w
eUJhY2tpbmdTdG9yZXMoKTsKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5k
ZXggMTFjYmQwYzNjYWZiOWFmYjgwZGM2YjdjMmY3NDc0M2U3NWI1OWI3Yy4uZDNhNjA4NWQ5NmZk
Zjk5ZmE2NTA5MGYxYTI2NDZlNzgyYmQ2YWYzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNzIsNyArMTcyLDcgQEAgSlNW
YWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+dm0oKS5leGNlcHRpb24oKSk7CiAKICAgICAgICAgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUg
PSBjYWxsZXJDb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmNvbnN0cnVjdG9yS2luZCgp
ID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCA/IFRoaXNURFpNb2RlOjpBbHdheXNDaGVjayA6
IFRoaXNURFpNb2RlOjpDaGVja0lmTmVlZGVkOwotICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJs
b2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jaywg
Y2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgdGhpc1REWk1vZGUsIHByb2dyYW1Tb3Vy
Y2UsIGNhbGxlclNjb3BlQ2hhaW4pOworICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5l
dmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jay0+b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCksIGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIHRoaXNU
RFpNb2RlLCBwcm9ncmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluKTsKICAgICAgICAgaWYgKCFl
dmFsKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA4
NWIwMTg3ODY0MGMxZWFiYzYyMTM3OWRkYzUzYzkyMzQ2NTlhNWQwLi5lNjg2ZTQ5MjEwOGRlNDE2
ZTUyN2RkNmE0NzgzNDA5YmQ5NWQ5MTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQg
U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
T3JpZ2luKiBjb2RlT3JpZ2luCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxp
bmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICBtX2ZyYW1lLm1f
Y29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAg
ICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4Owog
CiAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlRm9y
Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAKaW5kZXggYmI2NzVjMDAzMzUyMzkxNTJiMDc3YzVjNjM5MTZiNmI1ZGM4
MGNhYy4uOGUzYzI3MGNkMDU1MDI4YzNlOWMwMGQ5NTM4YjA4OTljNTc0MmE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtMzgsNyArMzgs
NyBAQCBFeGVjdXRhYmxlQmFzZSogQXNzZW1ibHlIZWxwZXJzOjpleGVjdXRhYmxlRm9yKGNvbnN0
IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAg
ICAKLSAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKTsKKyAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CiB9CiAKIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiBBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayogY29k
ZUJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5k
ZXggNzIwZWFjZjFjOWEyMTM5ZjU3ZmEwM2Q2YjNjYzFhMjJmZTg0ODU2ZC4uNDU5ZDMzNmNlYzEy
ZjJlN2ZhMGJmMGYxM2JiMmIwZmYxZDFiMmJiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAg
cmV0dXJuIGNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKTsKLSAgICAgICAgcmV0dXJuIGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc1N0cmljdE1vZGUoKTsKKyAgICAgICAgcmV0dXJuIGpz
Q2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhl
Y3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0TW9kZSgpOwogICAgIH0KICAgICAKICAgICBFQ01BTW9k
ZSBlY21hTW9kZUZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAppbmRleCA1OWNiYjI0ODdmNzFj
MWIzOTEwNTJhNTFhZTMyNDAzNDViYzdhMDJmLi4wYWRjNjNiNTA5NjNkYjNmZTVlYmQyNzU3NTlj
NjY0NWQ2NWEwNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdh
cmVKSVRTdHViUm91dGluZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKIC8vIEhlbHBlciBmb3IgdGhlIGNyZWF0aW9u
IG9mIHNpbXBsZSBzdHViIHJvdXRpbmVzIHRoYXQgbmVlZCBubyBoZWxwIGZyb20gdGhlIEdDLiBO
b3RlCiAvLyB0aGF0IGNvZGVCbG9jayBnZXRzICJleGVjdXRlZCIgbW9yZSB0aGFuIG9uY2UuCiAj
ZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SX0dDX0FXQVJFX1NUVUIoY29kZUJsb2NrLCBwYXRjaEJ1
ZmZlciwgbWFrZXNDYWxscywgY2VsbCwgZGF0YUxvZ0ZBcmd1bWVudHMpIFwKLSAgICAoY3JlYXRl
SklUU3R1YlJvdXRpbmUoRklOQUxJWkVfQ09ERV9GT1IoKGNvZGVCbG9jayksIChwYXRjaEJ1ZmZl
ciksIGRhdGFMb2dGQXJndW1lbnRzKSwgKihjb2RlQmxvY2spLT52bSgpLCAoY29kZUJsb2NrKSwg
KG1ha2VzQ2FsbHMpLCAoY2VsbCkpKQorICAgIChjcmVhdGVKSVRTdHViUm91dGluZShGSU5BTEla
RV9DT0RFX0ZPUigoY29kZUJsb2NrKSwgKHBhdGNoQnVmZmVyKSwgZGF0YUxvZ0ZBcmd1bWVudHMp
LCAqKGNvZGVCbG9jayktPnZtKCksIChjb2RlQmxvY2spLT5vd25lckV4ZWN1dGFibGUoKSwgKG1h
a2VzQ2FsbHMpLCAoY2VsbCkpKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAppbmRleCAzODJmN2FiM2YyZThmOWU0OWQ3YWZhNjAzZTAxYmFjN2Rm
NmU3OTc1Li5mZWY1YmM5Y2JjNWM1NWJkYWJhY2Q5MDg5NTgwNGMyMGEwN2U3NzQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaApAQCAtMTIxLDYgKzEyMSwyOCBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0
aW1lVG9MaXZlKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaml0VHlw
ZSkgeworICAgICAgICBjYXNlIEludGVycHJldGVyVGh1bms6CisgICAgICAgICAgICByZXR1cm4g
c3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCisg
ICAgICAgICAgICAgICAgc3RkOjpjaHJvbm86OnNlY29uZHMoNSkpOworICAgICAgICBjYXNlIEJh
c2VsaW5lSklUOgorICAgICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNv
bmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKKyAgICAgICAgICAgIC8vIEludGVycHJldGVyVGh1
bmsgc2hhcmUgYSBDb2RlQmxvY2suCisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCisgICAgICAgICAgICAgICAg
c3RkOjpjaHJvbm86OnNlY29uZHMoMTUpKTsKKyAgICAgICAgY2FzZSBERkdKSVQ6CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcz4oCisgICAgICAgICAgICAgICAgc3RkOjpjaHJvbm86OnNlY29uZHMoMjApKTsKKyAg
ICAgICAgY2FzZSBGVExKSVQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0
aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCisgICAgICAgICAgICAgICAgc3Rk
OjpjaHJvbm86OnNlY29uZHMoNjApKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIHN0YXRpYyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklU
VHlwZSBleHBlY3RlZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhl
Y3V0YWJsZVNjcmlwdChleHBlY3RlZExvd2VyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAppbmRleCA4NDBlMjYyOGQyNmFlOTEzMTJjZGI0OGQ4ZjUzZTU3MjAwOTMz
ODU5Li5lMTc2ODI5OGQ0MDE2M2U2ZDQ0Y2RmNGY1OWJiYjlhNTQ2ZTE0NGNiIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTY2Niw3ICs2NjYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiopCiAgICAgZm9yIChzaXplX3QgaiA9IENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggNzdiN2U0NGQwZjQ4NDY5Y2Fk
ZDVlZDRiMDI5NjViZDcyZWRmZDFjZC4uOTNlNDFiZjcwN2M2ZWIwMzY0Yzc0NGExNTg1MzE4Y2Rh
NjU1MTU2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CkBAIC0xMjYxLDEzICsxMjYxLDE1IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBieXRlCiAgICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJs
b2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBSZWZQdHI8Q29kZUJs
b2NrPiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsK
ICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAotICAgICAg
ICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBudWxscHRyLCBERkc6OkRGR01vZGUsIGJ5
dGVjb2RlSW5kZXgsCisgICAgICAgICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2suZ2V0KCks
IDAsIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKICAgICAgICAgICAgIG11c3RIYW5kbGVW
YWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKKyAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCByZXBsYWNlbWVudENvZGVC
bG9jay0+aGFzT25lUmVmKCkpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgwLCAw
KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVC
bG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAKaW5kZXggODc2YjA0MDFiOGM5OTM2ZTJmZTFkMjJjY2Y0M2RmZjVmMWJjODYzNS4u
YjQyNDY0ZjI1MTRhZGVhMmY2MWU0MmUyNmRiOTM2NmQyMGI2OGFiNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAKQEAgLTQzLDkgKzQzLDggQEAgUmVmPEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6Y3IKIH0KIAogdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29t
cGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewotICAgIEFTU0VSVF9VTlVTRUQocHJvZmlsZWRERkdDb2RlQmxvY2ssICFw
cm9maWxlZERGR0NvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAKICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQpAQCAtNTUsOSArNTQsOCBAQCB2b2lkIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9u
b3VzbAogfQogCiB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21w
aWxhdGlvbkRpZENvbXBsZXRlKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sq
IHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKLSAgICBBU1NF
UlQoIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIAogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCkBAIC02OCw3ICs2Niw3IEBAIHZvaWQgSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCiAgICAg
CiAgICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRC
YXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKIAotICAgIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHByb2ZpbGVkREZH
Q29kZUJsb2NrLCByZXN1bHQpOworICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29t
cGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CiB9CiAKIH0gLy8gSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgKaW5kZXggYWYyNTMyZjkyMDk2MDQyNjAxMWQxZGMx
ODg2ZGVmZTNmMzgwZTUxZC4uZjY0Yjk3OWNlY2NjZDQzOTMyZjMyZmQ4OGQ1YjQ2YjI2NGI1ODEx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaApAQCAtNDQsOCArNDQsOCBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgUmVmPEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PiBjcmVhdGUoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVS
ZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2Rl
QmxvY2spIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRl
KENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9u
UmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVS
ZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KSBv
dmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKaW5kZXggZjBjZjM1MTA4Y2E2MjIyMzEwMjAwNjkxZDU4MjFhOGQ1MTFiZDdj
NS4uMWU4OTVhNTBlNWNjMWY4NzhkODVhMjlhNWM0NGQwZjIwOTA2MGZjYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC0yMjcsMTQgKzIyNywxNSBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbgogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2Fz
ZTsKIAogICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKLSAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7CisgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NDYXNl
OjpBcnJheUxlbmd0aCk7CiAgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQotICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0
cmluZ0xlbmd0aCk7CisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0s
IG93bmVyLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOwogICAgIGVsc2UgewogICAgICAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTI3OCwxMCArMjc5LDEwIEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkg
ewogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LmltcGwoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJh
c2UoKSwKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MzAyLDcgKzMwMyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6Q3VzdG9tR2V0dGVyOwogCiAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpnZXQoCi0gICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgdm0s
IG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0
RnJvbVByb3h5LAogICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyLAogICAgICAgICAg
ICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0cik7
CiAgICAgfQpAQCAtMzU2LDYgKzM1Nyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2Rl
QmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKQEAgLTM4Niw3ICszODgsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpy
ZXBsYWNlKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwgb3duZXIsIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CiAK
QEAgLTQwOCwxMiArNDEwLDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAg
ICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBu
ZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
b3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OnRyYW5zaXRpb24odm0sIG93bmVyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zm
c2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CiAgICAgICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKQEAgLTQyMiwxMyArNDI0LDEzIEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZh
bHVlKSB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KICAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Qu
YmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVy
LCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOwogICAgICAgICAg
ICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRp
dGlvblNldCwKKyAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkN1c3RvbVNl
dHRlciwgc3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCiAgICAgICAgICAg
ICAgICAgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc2xvdC5iYXNlKCkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwpA
QCAtNDM3LDcgKzQzOSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICBp
ZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0KICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVj
LCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5p
bXBsKCkpOwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CkBAIC00
NDUsNyArNDQ3LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogCiAgICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6c2V0dGVyKAotICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAgICAg
ICAgICAgdm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIHN0cnVjdHVyZSwgb2Zmc2V0LCBj
b25kaXRpb25TZXQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00ODcsNiArNDg5LDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICB9CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVj
dHVyZSh2bSk7CiAgICAgCkBAIC00OTQsMTcgKzQ5NywxNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIGlmICh3YXNGb3VuZCkgewogICAgICAgICBpZiAoc2xv
dC5zbG90QmFzZSgpICE9IGJhc2UpIHsKICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBs
KCkpOworICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVj
dHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAgICAgfQogICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmluKAotICAgICAgICB2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0
IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCk7CisgICAgICAg
IHZtLCBvd25lciwgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6Oklu
TWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRlbnQsIFdU
Rjo6bW92ZShuZXdDYXNlKSk7CiAgICAgaWYgKCFjb2RlUHRyKQpAQCAtNTUzLDggKzU1Niw4IEBA
IHZvaWQgbGlua0ZvcigKICAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAg
CiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZv
LnNldENhbGxlZShleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0
aEJlZ2luKCksIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKLSAgICBjYWxsTGlua0luZm8uc2V0
TGFzdFNlZW5DYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUo
KS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNh
bGxlZShleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsZWUpOwogICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHlGb3IoY2Fs
bGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsICpjYWxs
ZXJDb2RlQmxvY2ssICIgYXQgIiwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSwgIiB0byAiLCBw
b2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIs
ICJcbiIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZv
LmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CkBAIC04NzEsNyAr
ODc0LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICAgICAgKCJQb2x5bW9y
cGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAogICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5r
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRh
dGEoKSkpLAotICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jaywgZXhlYy0+Y2FsbGVyRnJhbWUo
KSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgICp2bSwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYy0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBj
YWxsQ2FzZXMsCiAgICAgICAgIFdURjo6bW92ZShmYXN0Q291bnRzKSkpOwogICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBlMTg3ZjYxYzRmYzY3YTY4MWExNmI3ZjZk
NTBhMzFkNTFhNGZiZTA5Li40NzdjZWQwMjZmZDVjNzkwMTM0ZDYwNzJiYmRhNzZhZjM2ZTU4YjNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
QEAgLTU3Niw3ICs1NzYsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5
X2lkKQogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKQog
ICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQ
cm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkgewotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAKQEAgLTY0MSw3ICs2
NDEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkKQogICAgICAg
ICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KQogICAgICAgICAgICAgJiYgYmFzZUNlbGwgPT0gc2xvdC5iYXNlKCkpIHsKIAotICAgICAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9w
ZXJ0eSkgewogICAgICAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrLCB2bS5oZWFwKTsKQEAgLTY1OCw3ICs2NTgsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoYWluKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgY2hhaW4pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2hhaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKQEAgLTEx
OTAsOCArMTE5MCw4IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlCiAgICAgICAgIAogICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvLT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5yZW1vdmUoKTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJD
b2RlQmxvY2ssIGNhbGxlZSk7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUu
c2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+
Y2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQodm0sIGNhbGxlckNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5m
by0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwogICAgICAgICBpZiAoY29kZUJsb2NrKQog
ICAgICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMsIGNhbGxMaW5rSW5m
byk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
cmlnaW5TdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
cmlnaW5TdGFjay5jcHAKaW5kZXggYjhlZWNkZDYwNDA1YzdmMTRmOTA2NTkyYTBjNTQzNWM5ZWEz
ZTgzNy4uNWMzMjQyYTNiN2ExMzdlZTFkYzMxZTA1ZDNlZWM1MmM5OGRhMGFjNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNr
LmNwcApAQCAtNTIsNyArNTIsNyBAQCBPcmlnaW5TdGFjazo6T3JpZ2luU3RhY2soRGF0YWJhc2Um
IGRhdGFiYXNlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgQ29kZU9yaQogICAgIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICBh
cHBlbmQoT3JpZ2luKAotICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0
YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLAorICAgICAg
ICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0YWNrW2ldLmlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2soKSksCiAgICAgICAgICAgICBzdGFja1tpXS5ieXRlY29kZUlu
ZGV4KSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAKaW5kZXggMWFiNzhkZTJkMmU2ZDhhYzhiZTE5Nzk1YjcxODAxMGQ4
NWQ3ZjYwNy4uZTI5ZjEzYWJlZGRkN2EyZDUxMDI5ZGRjZDgwMzcyNmM5YWU5YjliZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBA
IC0yMzEsNyArMjMxLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQog
CiAgICAgYXV0byYgY2FjaGVXcml0ZUJhcnJpZXIgPSBwY1s0XS51LmpzQ2VsbDsKICAgICBpZiAo
IWNhY2hlV3JpdGVCYXJyaWVyKQotICAgICAgICBjYWNoZVdyaXRlQmFycmllci5zZXQoZXhlYy0+
dm0oKSwgZXhlYy0+Y29kZUJsb2NrKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY2FjaGVXcml0
ZUJhcnJpZXIuc2V0KGV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFi
bGUoKSwgY29uc3RydWN0b3IpOwogICAgIGVsc2UgaWYgKGNhY2hlV3JpdGVCYXJyaWVyLnVudmFs
aWRhdGVkR2V0KCkgIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkgJiYgY2Fj
aGVXcml0ZUJhcnJpZXIuZ2V0KCkgIT0gY29uc3RydWN0b3IpCiAgICAgICAgIGNhY2hlV3JpdGVC
YXJyaWVyLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVP
YmplY3RzKCkpOwogCkBAIC0yNTAsNyArMjUwLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3RvX3RoaXMpCiAgICAgICAgIGlmIChteVN0cnVjdHVyZSAhPSBvdGhlclN0cnVjdHVyZSkgewog
ICAgICAgICAgICAgaWYgKG90aGVyU3RydWN0dXJlKQogICAgICAgICAgICAgICAgIHBjWzNdLnUu
dG9UaGlzU3RhdHVzID0gVG9UaGlzQ29uZmxpY3RlZDsKLSAgICAgICAgICAgIHBjWzJdLnUuc3Ry
dWN0dXJlLnNldCh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG15U3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIHBjWzJdLnUuc3RydWN0dXJlLnNldCh2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpLCBteVN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICBwY1szXS51LnRvVGhpc1N0YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7CkBAIC01MjYsOCArNTI2
LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9lbnRlcikKIHsKICAgICBCRUdJTigpOwotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRh
YmxlID0gZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpOworICAgIEhlYXA6Omhl
YXAob3duZXJFeGVjdXRhYmxlKS0+d3JpdGVCYXJyaWVyKG93bmVyRXhlY3V0YWJsZSk7CiAgICAg
RU5EKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmgKaW5kZXggNDQ0YmM5ZmI4OGYzN2NlZWM0Y2Y0ODM2ZDQ5OWVjMjdhNDBmNDhjMC4u
MDU3NjJlNWVlMzEzYTdhYjQ2NDQ5NGU1ZTM1NTM3N2I1ZGY2MDllYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKQEAgLTEyOSw3ICsxMjks
NyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoCiAgICAgICAgIHNjb3Bl
LT5zdHJ1Y3R1cmUoKS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KGV4ZWMtPnZtKCksIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwogCiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIGNvZGVCbG9jaywgc2NvcGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcGNbNV0udS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNj
b3BlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7CiAgICAgfQogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIGlubGluZSB2b2lkIHRyeUNh
Y2hlR2V0RnJvbVNjb3BlR2xvYmFsKAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBzY29wZS0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jaywgc3RydWN0
dXJlKTsKKyAgICAgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAg
ICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCAwMzBiY2M1MTU4NzgyYmZmYzk4NzZlNWIwNTg0YzBj
OGI4NjUxOTFhLi45NjMxYzk4NTA5YWE5MmI4NWRhMzFmNWQxNGE5YzVhYjMyOGI0NjNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtNjAsNDUg
KzYwLDYgQEAgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICNlbmRpZgogICAgIG1f
bnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAg
bV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVE
OwotCi0gICAgaWYgKGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSB7
Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JD
YWxsLmNsZWFyKCk7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0
LmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2xhc3NJbmZvKCkg
PT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewotICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBleGVjdXRh
YmxlLT5tX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxp
bmtlZEV2YWxDb2RlQmxvY2suY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewotICAg
ICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KHRoaXMpOwotICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2suY2xl
YXIoKTsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjbGFzc0luZm8oKSA9PSBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4o
dGhpcyk7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVh
cigpOwotICAgICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5jbGVhcigpOwotICAgICAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9s
VGFibGUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi0gICAgaWYgKGNsYXNzSW5mbygpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZTo6aW5mbygpKSB7Ci0gICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgZXhlY3V0YWJs
ZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEFTU0VSVChjbGFzc0luZm8oKSA9PSBOYXRpdmVFeGVjdXRhYmxlOjppbmZv
KCkpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xNjIsNyArMTIzLDcgQEAgdm9pZCBT
Y3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdm0sIENvZGVCbG9jayogZ2VuZXJpY0Nv
ZGVCbG9jaywgQ29kZVR5cGUKIHsKICAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwog
ICAgIAotICAgIENvZGVCbG9jayogb2xkQ29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8
Q29kZUJsb2NrPiBvbGRDb2RlQmxvY2s7CiAgICAgCiAgICAgc3dpdGNoIChjb2RlVHlwZSkgewog
ICAgIGNhc2UgR2xvYmFsQ29kZTogewpAQCAtMTcxLDggKzEzMiw4IEBAIHZvaWQgU2NyaXB0RXhl
Y3V0YWJsZTo6aW5zdGFsbENvZGUoVk0mIHZtLCBDb2RlQmxvY2sqIGdlbmVyaWNDb2RlQmxvY2ss
IENvZGVUeXBlCiAgICAgICAgIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7
CiAgICAgICAgIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX3Byb2dyYW1D
b2RlQmxvY2suZ2V0KCk7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jay5z
ZXRNYXlCZU51bGwodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgICAgIG9sZENvZGVCbG9jayA9
IGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jazsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9w
cm9ncmFtQ29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTE4Miw4ICsxNDMsOCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2
bSwgQ29kZUJsb2NrKiBnZW5lcmljQ29kZUJsb2NrLCBDb2RlVHlwZQogCiAgICAgICAgIEFTU0VS
VChraW5kID09IENvZGVGb3JDYWxsKTsKIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRh
YmxlLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCk7Ci0gICAgICAgIGV4ZWN1dGFibGUt
Pm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5zZXRNYXlCZU51bGwodm0sIHRoaXMsIGNvZGVCbG9j
ayk7CisgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jazsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrID0g
Y29kZUJsb2NrOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE5Myw4ICsxNTQsOCBAQCB2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZNJiB2bSwgQ29kZUJsb2NrKiBnZW5l
cmljQ29kZUJsb2NrLCBDb2RlVHlwZQogICAgICAgICAKICAgICAgICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNhbGwpOwogICAgICAgICAKLSAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJs
ZS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpOwotICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2Rl
QmxvY2suc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgICAgICBvbGRDb2Rl
QmxvY2sgPSBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2s7CisgICAgICAgIGV4ZWN1dGFibGUt
Pm1fZXZhbENvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTIwNCwxMiArMTY1LDEyIEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFs
bENvZGUoVk0mIHZtLCBDb2RlQmxvY2sqIGdlbmVyaWNDb2RlQmxvY2ssIENvZGVUeXBlCiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoK
LSAgICAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2Fs
bC5nZXQoKTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbC5zZXRN
YXlCZU51bGwodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sg
PSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgICAgICAgICBleGVjdXRhYmxl
LT5tX2NvZGVCbG9ja0ZvckNhbGwgPSBjb2RlQmxvY2s7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICAgICAgb2xkQ29kZUJsb2NrID0g
ZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7Ci0gICAgICAgICAgICBl
eGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5zZXRNYXlCZU51bGwodm0sIHRoaXMs
IGNvZGVCbG9jayk7CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdDsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0ID0gY29kZUJsb2NrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CkBAIC0yNDksNyArMjEwLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxl
OjppbnN0YWxsQ29kZShWTSYgdm0sIENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaywgQ29kZVR5
cGUKICAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzKTsKIH0KIAotQ29kZUJsb2NrKiBTY3Jp
cHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCitSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRF
eGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiYgZXhj
ZXB0aW9uKQogewogICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwpAQCAtMjYzLDkgKzIyNCw5IEBA
IENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAogICAgICAgICBS
RUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0sCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKICAgICAgICAgICAgIGV4
ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdldCgpLCBzY29w
ZSwKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCkpOworICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSkpOwogICAgIH0KICAgICAKICAg
ICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewpAQCAtMjcz
LDkgKzIzNCw5IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9y
KAogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBQcm9ncmFtQ29kZUJs
b2NrOjpjcmVhdGUodm0sCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVC
bG9jaygKICAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpOworICAg
ICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291
cmNlKCkuc3RhcnRDb2x1bW4oKSkpOwogICAgIH0KIAogICAgIGlmIChjbGFzc0luZm8oKSA9PSBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CkBAIC0yODMsOSArMjQ0LDkgQEAgQ29k
ZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6
OmNyZWF0ZSh2bSwKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4o
KSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBleGVjdXRh
YmxlLT5zb3VyY2UoKS5zdGFydENvbHVtbigpKSk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOwpAQCAtMzE1LDEx
ICsyNzYsMTEgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3Io
CiAgICAgdW5zaWduZWQgc291cmNlT2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRP
ZmZzZXQoKTsKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGV4ZWN1dGFibGUtPnNvdXJjZSgp
LnN0YXJ0Q29sdW1uKCk7CiAKLSAgICByZXR1cm4gRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSh2
bSwKLSAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92aWRl
ciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbik7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBG
dW5jdGlvbkNvZGVCbG9jaygKKyAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ss
IHNjb3BlLCBwcm92aWRlciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOwogfQogCi1Db2Rl
QmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKAorUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJs
b2NrRm9yKAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBpZiAoY2xh
c3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewpAQCAtMzI3LDkgKzI4OCw5IEBA
IENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Io
CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRh
YmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nh
c3Q8RXZhbENvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIHJlc3VsdCA9
IEV2YWxDb2RlQmxvY2s6OmNyZWF0ZSh2bSgpLAotICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5
UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUo
KnZtKCksIGJhc2VsaW5lKTsKKyAgICAgICAgUmVmUHRyPEV2YWxDb2RlQmxvY2s+IHJlc3VsdCA9
IGFkb3B0UmVmKG5ldyBFdmFsQ29kZUJsb2NrKAorICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5
UGFyc2VkQmxvY2ssICpiYXNlbGluZSkpOworICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZl
KGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0zMzgs
OSArMjk5LDkgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENv
ZGVCbG9ja0ZvcigKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nh
c3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayog
YmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oCiAgICAgICAgICAgICBl
eGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAg
ICAgUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZt
KCksCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSgqdm0oKSwgYmFzZWxpbmUpOworICAgICAg
ICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1D
b2RlQmxvY2soCisgICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2Vs
aW5lKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMzQ5LDkgKzMxMCw5IEBAIENvZGVCbG9jayog
U2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoCiAgICAgICAgIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGJhc2Vs
aW5lID0gc3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KAogICAgICAgICAgICAg
ZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7
Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHJlc3VsdCA9IE1vZHVsZVByb2dyYW1D
b2RlQmxvY2s6OmNyZWF0ZSh2bSgpLAotICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2Vk
QmxvY2ssICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoKnZtKCks
IGJhc2VsaW5lKTsKKyAgICAgICAgUmVmUHRyPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IHJlc3Vs
dCA9IGFkb3B0UmVmKG5ldyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICAgICAgQ29k
ZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSkpOworICAgICAgICByZXN1bHQtPnNl
dEFsdGVybmF0aXZlKGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
QEAgLTM1OSw5ICszMjAsOSBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxh
Y2VtZW50Q29kZUJsb2NrRm9yKAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKICAgICBGdW5jdGlvbkNvZGVCbG9j
ayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KAogICAgICAgICBl
eGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICBG
dW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSh2bSgp
LAotICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICBy
ZXN1bHQtPnNldEFsdGVybmF0aXZlKCp2bSgpLCBiYXNlbGluZSk7CisgICAgUmVmUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCisg
ICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICByZXN1
bHQtPnNldEFsdGVybmF0aXZlKGJhc2VsaW5lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0zODksNyArMzUwLDcgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JF
eGVjdXRpb25JbXBsKAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBK
U09iamVjdCogZXhjZXB0aW9uID0gMDsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG5ld0Nv
ZGVCbG9ja0ZvcihraW5kLCBmdW5jdGlvbiwgc2NvcGUsIGV4Y2VwdGlvbik7CisgICAgUmVmUHRy
PENvZGVCbG9jaz4gY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrRm9yKGtpbmQsIGZ1bmN0aW9uLCBz
Y29wZSwgZXhjZXB0aW9uKTsKICAgICBpZiAoIWNvZGVCbG9jaykgewogICAgICAgICBSRUxFQVNF
X0FTU0VSVChleGNlcHRpb24pOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwpAQCAtMzk5LDEx
ICszNjAsMTEgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRp
b25JbXBsKAogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAgICAgCiAgICAgaWYgKE9w
dGlvbnM6OnVzZUxMSW50KCkpCi0gICAgICAgIHNldHVwTExJbnQodm0sIGNvZGVCbG9jayk7Cisg
ICAgICAgIHNldHVwTExJbnQodm0sIGNvZGVCbG9jay5nZXQoKSk7CiAgICAgZWxzZQotICAgICAg
ICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9j
ay5nZXQoKSk7CiAgICAgCi0gICAgaW5zdGFsbENvZGUoKmNvZGVCbG9jay0+dm0oKSwgY29kZUJs
b2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5k
KCkpOworICAgIGluc3RhbGxDb2RlKCpjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jay5nZXQoKSwg
Y29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsK
ICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTQxLDkgKzUwMiwxNiBAQCB2b2lkIEV2YWxFeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV2YWxDb2RlQmxv
Y2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spCi0gICAgICAgIHRoaXNP
YmplY3QtPm1fZXZhbENvZGVCbG9jay0+dmlzaXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRo
aXNPYmplY3QtPm1fZXZhbENvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrKTsKK30K
Kwordm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3sKKyAgICBtX2V2YWxDb2RlQmxv
Y2sgPSBudWxscHRyOworICAgIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmNsZWFyKCk7CisgICAg
QmFzZTo6Y2xlYXJDb2RlKCk7CiB9CiAKIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hl
Y2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQpAQCAtNjUwLDcgKzYxOCwxNCBAQCB2b2lkIFByb2dy
YW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2spCi0g
ICAgICAgIHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRXZWFrbHkodmlzaXRv
cik7CisgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7Cit9CisKK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7
CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICBtX3VubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jay5jbGVhcigpOworICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCiB2b2lkIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkBAIC02NjEsNyArNjM2LDE1IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGUpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dy
YW1Db2RlQmxvY2spCi0gICAgICAgIHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay0+dmlzaXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRoaXNPYmplY3QtPm1fbW9kdWxlUHJv
Z3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK3ZvaWQgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7CisgICAgbV9tb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrID0gbnVsbHB0cjsKKyAgICBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5j
bGVhcigpOworICAgIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5jbGVhcigpOworICAg
IEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCiBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVj
dXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CkBAIC02ODQsMTMgKzY2NywyMCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBTY3JpcHRFeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIGlmICh0aGlzT2JqZWN0
LT5tX2NvZGVCbG9ja0ZvckNhbGwpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9y
Q2FsbC0+dmlzaXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJs
b2NrRm9yQ2FsbC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQotICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC0+dmlzaXRXZWFrbHkodmlzaXRvcik7CisgICAgICAgIHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOwogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NpbmdsZXRvbkZ1bmN0aW9uKTsKIH0KIAordm9p
ZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7CisgICAgbV9jb2RlQmxvY2tGb3JD
YWxsID0gbnVsbHB0cjsKKyAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IG51bGxwdHI7Cisg
ICAgQmFzZTo6Y2xlYXJDb2RlKCk7Cit9CisKIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25F
eGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBF
eGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgSlNPYmplY3Qq
JiBleGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIpCkBAIC03MjYsMTAgKzcxNiwxNiBA
QCB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBFeGVjdXRhYmxlQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxs
KQotICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0V2Vha2x5KHZp
c2l0b3IpOworICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVs
ZSk7CiB9CiAKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAg
IG1fY29kZUJsb2NrRm9yQ2FsbCA9IG51bGxwdHI7CisgICAgQmFzZTo6Y2xlYXJDb2RlKCk7Cit9
CisKIHZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBpZiAoaGFzSklUQ29kZUZvckNhbGwoKSkKQEAgLTczOCwxNiAr
NzM0LDE2IEBAIHZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKIAotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICB0aGlzLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+
IGNvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBXZWJBc3NlbWJseUNvZGVCbG9jaygKKyAgICAgICAg
dGhpcywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOwogCi0gICAgV0FTTUZ1bmN0
aW9uUGFyc2VyOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIG1fbW9kdWxlLmdldCgpLCBtX3NvdXJj
ZSwgbV9mdW5jdGlvbkluZGV4KTsKKyAgICBXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUodm0s
IGNvZGVCbG9jay5nZXQoKSwgbV9tb2R1bGUuZ2V0KCksIG1fc291cmNlLCBtX2Z1bmN0aW9uSW5k
ZXgpOwogCiAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGNvZGVCbG9jay0+aml0Q29kZSgpOwogICAg
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
OwogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsKIAotICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Cisg
ICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gY29kZUJsb2NrOwogCiAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+d3JpdGVCYXJyaWVyKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCmluZGV4IDlmYzliZTdhMTRmNmMwZmViYzIzOTcxMjZiNjBmZDdiMGMzNDBh
MDQuLjE1NWY0NGJiYjY1Y2VlMGRkYTgxODM5MGIxMWIwNTNmOTJjYzBhNjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTEzOSw2ICsxMzksOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgaW50IG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdDsKIAogcHVibGlj
OgorICAgIHN0YXRpYyB2b2lkIGNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqKTsKKwog
ICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGwpOwpAQCAtMzA0LDggKzMwNiw2IEBAIHBy
b3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVC
YXNlOwotCiAgICAgTmF0aXZlRXhlY3V0YWJsZShWTSYgdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgOiBFeGVjdXRhYmxlQmFz
ZSh2bSwgdm0ubmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNf
SVNfSE9TVCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQpAQCAtMzc2LDggKzM3Niw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5zdGFsbENvZGUoQ29kZUJsb2NrKik7CiAgICAgdm9p
ZCBpbnN0YWxsQ29kZShWTSYsIENvZGVCbG9jayosIENvZGVUeXBlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKLSAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKLSAg
ICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9u
KTsKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgCiAgICAgSlNPYmplY3QqIHByZXBhcmVGb3JF
eGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSog
c2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CkBAIC0zODksNyArMzg5
LDYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hDb2RlQmxvY2soRnVuY3RvciYmKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRXhl
Y3V0YWJsZUJhc2U7CiAgICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKEV4ZWNT
dGF0ZSosIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAK
IHByb3RlY3RlZDoKQEAgLTQ0OCwxOSArNDQ3LDIwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
REVDTEFSRV9JTkZPOwogCisgICAgdm9pZCBjbGVhckNvZGUoKTsKKwogICAgIEV4ZWN1dGFibGVJ
bmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNB
Y3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UsIENv
bnN0cnVjdG9yS2luZDo6Tm9uZSwgZmFsc2UpOyB9CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJs
ZXMoKSB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVtVmFyaWFibGVzKCk7IH0K
ICAgICB1bnNpZ25lZCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX3VubGlua2Vk
RXZhbENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IH0KIAogcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4
ZWN1dGFibGU7CiAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIGJvb2wpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCi0gICAgV3JpdGVCYXJyaWVyPEV2YWxDb2RlQmxvY2s+IG1fZXZhbENvZGVC
bG9jazsKKyAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOwogICAgIFdy
aXRlQmFycmllcjxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IG1fdW5saW5rZWRFdmFsQ29kZUJsb2Nr
OwogfTsKIApAQCAtNTAxLDEwICs1MDEsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICBERUNM
QVJFX0lORk87CiAKKyAgICB2b2lkIGNsZWFyQ29kZSgpOworCiAgICAgRXhlY3V0YWJsZUluZm8g
ZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2
YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgQ29uc3Ry
dWN0b3JLaW5kOjpOb25lLCBmYWxzZSk7IH0KIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
RXhlY3V0YWJsZUJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CiAKICAg
ICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CkBAIC01
MTIsNyArNTEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKLSAgICBXcml0ZUJhcnJpZXI8
UHJvZ3JhbUNvZGVCbG9jaz4gbV9wcm9ncmFtQ29kZUJsb2NrOworICAgIFJlZlB0cjxQcm9ncmFt
Q29kZUJsb2NrPiBtX3Byb2dyYW1Db2RlQmxvY2s7CiB9OwogCiBjbGFzcyBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTU0MiwxMyAr
NTQzLDE0IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAorICAgIHZvaWQgY2xlYXJD
b2RlKCk7CisKICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0
dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmlj
dE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIGZhbHNlKTsgfQog
ICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKCkgeyByZXR1cm4gbV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0
KCk7IH0KIAogICAgIFN5bWJvbFRhYmxlKiBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCkg
eyByZXR1cm4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLmdldCgpOyB9CiAKIHByaXZh
dGU6Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAgIGZyaWVuZCBjbGFzcyBT
Y3JpcHRFeGVjdXRhYmxlOwogCiAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRl
KiwgY29uc3QgU291cmNlQ29kZSYpOwpAQCAtNTU3LDcgKzU1OSw3IEBAIHByaXZhdGU6CiAKICAg
ICBXcml0ZUJhcnJpZXI8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1f
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZTsKLSAgICBXcml0ZUJhcnJpZXI8TW9kdWxlUHJv
Z3JhbUNvZGVCbG9jaz4gbV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrOworICAgIFJlZlB0cjxNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrPiBtX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiB9OwogCiBjbGFz
cyBGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CkBA
IC01OTgsNyArNjAwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ2FsbCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gISFtX2NvZGVCbG9ja0ZvckNh
bGw7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgfQogCiAgICAgRnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNhbGwoKQpAQCAtNjA4LDcgKzYxMCw3IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOworICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgfQogCiAgICAgRnVuY3Rpb25Db2Rl
QmxvY2sqIGNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpCkBAIC02NzQsMTAgKzY3NiwxMSBAQCBwdWJs
aWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKKyAgICB2b2lkIGNsZWFyQ29kZSgpOworICAgIAog
ICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbkZ1bmN0aW9uKCkgeyByZXR1cm4gbV9zaW5nbGV0
b25GdW5jdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRh
YmxlQmFzZTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoCiAgICAgICAgIFZNJiwgY29uc3QgU291
cmNlQ29kZSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmlyc3RMaW5l
LCAKICAgICAgICAgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNp
Z25lZCBlbmRDb2x1bW4pOwpAQCAtNjg3LDggKzY5MCw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKLSAgICBXcml0ZUJhcnJp
ZXI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKLSAgICBXcml0ZUJhcnJp
ZXI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgIFJlZlB0
cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAgIFJlZlB0cjxGdW5j
dGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgUmVmUHRyPFR5cGVT
ZXQ+IG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNT
dGFydE9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25G
dW5jdGlvbjsKQEAgLTcxNiw2ICs3MTksOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87
CiAKKyAgICB2b2lkIGNsZWFyQ29kZSgpOworCiAgICAgdm9pZCBwcmVwYXJlRm9yRXhlY3V0aW9u
KEV4ZWNTdGF0ZSopOwogCiAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNh
bGwoKQpAQCAtNzI0LDcgKzcyOSw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZShW
TSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1dBU01Nb2R1bGUqLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4KTsKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKQEAgLTczMywxMCArNzM3LDMwIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpT
V0FTTU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4OwogCi0g
ICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7
CisgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiB9
OwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIEpTQworaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJh
c2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCit7CisgICAg
c3dpdGNoIChleGVjdXRhYmxlLT50eXBlKCkpIHsKKyAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlw
ZToKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5j
bGVhckNvZGUoKTsKKyAgICBjYXNlIFByb2dyYW1FeGVjdXRhYmxlVHlwZToKKyAgICAgICAgcmV0
dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsK
KyAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6CisgICAgICAgIHJldHVybiBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICBjYXNlIFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGU6CisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNs
ZWFyQ29kZSgpOworI2VuZGlmCisgICAgY2FzZSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVR5cGU6
CisgICAgICAgIHJldHVybiBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxO
YXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworICAgIH0KK30KKwor
fQogCi0jZW5kaWYgLy8gRXhlY3V0YWJsZV9oCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAppbmRleCA2OTVmYWRjMGQyOGRjZjNiYzJkNzA1MmM3MjVhN2ZkODE2ZTg4NDM3
Li5iMmM1MWRkOWE5YmMzOTdhNDViZDg2ZTg0ZmNjNmU4MTZmOGFhYzAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNDcsMTQgKzI0Nyw2IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGludGVybmFsUHJvbWlz
ZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHByb2dyYW1Db2RlQmxv
Y2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgbW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKLSAgICBldmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywg
RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAg
IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25Db2RlQmxvY2s6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0gICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwot
I2VuZGlmCi0KICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVj
dDo6Y3JlYXRlKCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpLCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQo
KnRoaXMsIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhp
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA4N2QxNjYyYTdjOGI3ZWY4ZDgx
NjU3ZTkxMjRmMTA2YmU0ZDYyMGI2Li5hNDliOTRlZWRkMTI1ZTM1MTQ0YzA3YzVhYjY1Mjc1NmVk
YjBkMzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTMwOSwxMiArMzA5LDYg
QEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVy
ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbnRlcm5hbFByb21pc2VEZWZlcnJlZFN0cnVjdHVy
ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBuYXRpdmVTdGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmU7
Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKLSAgICBT
dHJvbmc8U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOwotICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVj
dHVyZT4gZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4g
d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7Ci0KICAgICBTdHJvbmc8SlNDZWxsPiBpdGVy
YXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlOYW1lRW51
bWVyYXRvcjsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>