<?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>234587</bug_id>
          
          <creation_ts>2021-12-21 18:31:23 -0800</creation_ts>
          <short_desc>Allow loop tier up to the Air tier</short_desc>
          <delta_ts>2022-01-10 17:37:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>justin_michaud</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1826187</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-21 18:31:23 -0800</bug_when>
    <thetext>Probably will be a perf win for first run programs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826188</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-21 18:31:43 -0800</bug_when>
    <thetext>If we add a new lightweight Baseline JIT, this probably isn&apos;t necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827142</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-28 18:32:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/86968638&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828017</commentid>
    <comment_count>3</comment_count>
      <attachid>448313</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-04 11:42:11 -0800</bug_when>
    <thetext>Created attachment 448313
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828170</commentid>
    <comment_count>4</comment_count>
      <attachid>448356</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-04 17:53:58 -0800</bug_when>
    <thetext>Created attachment 448356
WIP

Fixed latent regalloc bug in O0. I think this patch is mostly ready. But I&apos;m going to implement exceptions in Air first, since that&apos;ll make some of the tier up logic nicer, and it&apos;s a nice to have anyways, since we want all tiers supporting all wasm features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829180</commentid>
    <comment_count>5</comment_count>
      <attachid>448657</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-07 18:38:58 -0800</bug_when>
    <thetext>Created attachment 448657
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829186</commentid>
    <comment_count>6</comment_count>
      <attachid>448661</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-07 19:04:26 -0800</bug_when>
    <thetext>Created attachment 448661
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829189</commentid>
    <comment_count>7</comment_count>
      <attachid>448662</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-07 19:24:35 -0800</bug_when>
    <thetext>Created attachment 448662
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829191</commentid>
    <comment_count>8</comment_count>
      <attachid>448662</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-07 19:43:31 -0800</bug_when>
    <thetext>Comment on attachment 448662
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829515</commentid>
    <comment_count>9</comment_count>
      <attachid>448764</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-10 10:00:02 -0800</bug_when>
    <thetext>Created attachment 448764
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829692</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-10 17:37:09 -0800</bug_when>
    <thetext>Committed r287864 (245908@main): &lt;https://commits.webkit.org/245908@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 448764.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448313</attachid>
            <date>2022-01-04 11:42:11 -0800</date>
            <delta_ts>2022-01-04 17:53:58 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>99623</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODczNjEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRvIEJCUSBhbmQgQkJRIHNo
b3VsZCBsb29wIE9TUiBpbnRvIE9NRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qczoKKwogMjAyMS0xMi0x
OSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pT
Q10gT3BQb3cgc2hvdWxkIGhhdmUgYSAic21hbGwgaW50IGV4cG9uZW50IiBmYXN0IHBhdGggYXQg
bG93ZXIgdGllcnMKSW5kZXg6IEpTVGVzdHMvd2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwkocmV2aXNpb24g
Mjg3MzM5KQorKysgSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtNCw2ICs0LDcgQEAgbGV0IGNvbnRleHQgPSB7CiB9OwogCiBnbG9iYWxUaGlzLl9f
bGluZWFyX21lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiAxIH0pOwor
Z2xvYmFsVGhpcy5jYWxsZXJJc09NR0NvbXBpbGVkID0gY2FsbGVySXNCQlFPck9NR0NvbXBpbGVk
OyAvLyBDYW4ndCBjaGFuZ2UgdGhlIC53YXN0IGVhc2lseS4uLgogCiBhc3luYyBmdW5jdGlvbiBy
dW5XYXNtRmlsZShmaWxlUGF0aCkgewogICAgIGxldCBibG9iID0gcmVhZEZpbGUoZmlsZVBhdGgs
ICJiaW5hcnkiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDUyIEBACisyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRvIEJCUSBhbmQgQkJRIHNob3Vs
ZCBsb29wIE9TUiBpbnRvIE9NRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQncyBhIHN0YXJ0dXAgcGVyZiBpbXByb3ZlbWVudCBvbiBzb21lIFdhc20g
YmVuY2htYXJrcyBJJ20gcnVubmluZyB0byBoYXZlCisgICAgICAgIFdhc20gTExJbnQgZG8gbG9v
cCBPU1IgZW50cnkgaW50byBCQlEgaW5zdGVhZCBvZiBPTUcuIFRoaXMgaW1wcm92ZXMgdGhpcwor
ICAgICAgICBiZW5jaG1hcmsgYnkgNSUuIFRoZXJlIGlzIHByb2JhYmx5IG1vcmUgcGVyZiB0byBi
ZSBoYWQgaGVyZS4gQ3VycmVudGx5LAorICAgICAgICB3ZSdyZSBqdXN0IE9TUiBlbnRlcmluZyBp
bnRvIEIzIEJCUSBPMS4gSG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkCisgICAgICAg
IGp1c3QgY29tcGlsZSBhIHNpbmdsZSBBaXIgQkJRIENhbGxlZSB0aGF0IGFsbG93cyBmb3IgT1NS
IGVudHJ5IGF0IGxvb3AKKyAgICAgICAgYm91bmRhcmllcy4gTWF5YmUgd2UgY2FuIG1vZGVsIHRo
aXMgdXNpbmcgRW50cnlTd2l0Y2ggd2l0aG91dCBhbnkgcmVhbAorICAgICAgICBoYXJtIHRvIHRo
cm91Z2hwdXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuY3BwOgorICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpzZXRPU1JFbnRyeUNhbGxlZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Db21w
aWxhdGlvbk1vZGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAg
ICAgKiB3YXNtL1dhc21Db21waWxhdGlvbk1vZGUuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNP
U1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OmlzQW55QkJRKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6aXNBbnlPTUcpOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmg6IFJl
bW92ZWQuCisgICAgICAgICogd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Ok9TUkVudHJ5UGxhbjo6T1NSRW50cnlQbGFuKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6T1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
Rm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbU9TUkVudHJ5UGxhbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmguCisgICAgICAgICogd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmRvT1NSRW50cnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0Nh
bGxVcyk6CisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OldBU01fU0xPV19QQVRIX0RFQ0wpOgorCiAyMDIxLTEyLTIxICBaYW4gRG9iZXJzZWsg
IDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbUklTQ1Y2NF0gQWRkIG9yIGVuYWJs
ZSBtaXNzaW5nIENQVShSSVNDVjY0KSBjb2RlcGF0aHMgaW4gYmFzZWxpbmUgSklUCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwOTgsOCArMTA5OCw4
IEBAIHdhc20vV2FzbU1lbW9yeU1vZGUuY3BwCiB3YXNtL1dhc21Nb2R1bGUuY3BwCiB3YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcAot
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAogd2FzbS9XYXNtT01HUGxhbi5jcHAKK3dh
c20vV2FzbU9TUkVudHJ5UGxhbi5jcHAKIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKIHdhc20v
V2FzbU9wZXJhdGlvbnMuY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbk5vT1NSRXhpdEZ1enppbmcpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uKTsKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyk7Ci1zdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25DYWxsZXJJc0JCUU9yT01HQ29t
cGlsZWQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25KU0NPcHRp
b25zKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uVHJhbnNmZXJBcnJheUJ1ZmZlcik7CkBAIC01NTksNyArNTU5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgYWRkRnVuY3Rpb24odm0sICJub0ZUTCIsIGZ1bmN0aW9uTm9GVEwsIDEpOwogICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgIm5vT1NSRXhpdEZ1enppbmciLCBmdW5jdGlvbk5vT1NSRXhpdEZ1
enppbmcsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mREZHQ29tcGlsZXMi
LCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMsIDEpOwotICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImNhbGxlcklzT01HQ29tcGlsZWQiLCBmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQsIDAp
OworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNhbGxlcklzQkJRT3JPTUdDb21waWxlZCIsIGZ1
bmN0aW9uQ2FsbGVySXNCQlFPck9NR0NvbXBpbGVkLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJqc2NPcHRpb25zIiwgZnVuY3Rpb25KU0NPcHRpb25zLCAwKTsKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJvcHRpbWl6ZU5leHRJbnZvY2F0aW9uIiwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJyZW9wdGltaXphdGlvblJl
dHJ5Q291bnQiLCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudCwgMSk7CkBAIC0xODg2
LDcgKzE4ODYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1iZXJPZkRGR0NvbXBpbGVzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lKSk7CiB9CiAKLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNh
bGxlcklzT01HQ29tcGlsZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25DYWxsZXJJ
c0JCUU9yT01HQ29tcGlsZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5MDYsNyArMTkwNiw3
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNhbGxlckkKICAgICBBU1NFUlQo
d2FzbUZyYW1lLmNhbGxlckZyYW1lKCktPmNhbGxlZSgpLmlzV2FzbSgpKTsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgYXV0byBtb2RlID0gd2FzbUZyYW1lLmNhbGxlckZyYW1lKCktPmNh
bGxlZSgpLmFzV2FzbUNhbGxlZSgpLT5jb21waWxhdGlvbk1vZGUoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtb2RlID09IFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01H
TW9kZSB8fCBtb2RlID09IFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2Rl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNBbnlCQlEobW9kZSkg
fHwgaXNBbnlPTUcobW9kZSkpKTsKICNlbmRpZgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw2ICs4OTUsNyBAQAogCQk1MjY3
Q0Y4MjI0OTMxNkIxMDAyMkJGNkQgLyogRmFzdEpJVFBlcm1pc3Npb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3Q0Y4MTI0OTMxNkFEMDAyMkJG
NkQgLyogRmFzdEpJVFBlcm1pc3Npb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2QUM0QjcxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21DYWxs
ZWVHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21DYWxsZWVHcm91cC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyN0NFMzU0MjI1NTVGRTUw
MEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MjdDRTM1MzIyNTU1RkREMDBDNkYzODIgLyogSlNUb1dhc21J
Q0NhbGxlZS5oICovOyB9OworCQk1MjdFNkNFQzI3NzJCOUNCMDA1RTA3ODIgLyogV2FzbU9TUkVu
dHJ5UGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21PU1JFbnRyeVBsYW4uaCAqLzsgfTsKIAkJ
NTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdBREEyMUZGQjg2MzAw
NjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovOyB9OwogCQk1MkIzMTBGQjE5NzRBRTYx
MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyog
RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2Nh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkxMyw3ICsxOTE0
LDYgQEAKIAkJRTM2NUYzM0EyNEFBNjIzOTAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNjVGMzM5MjRBQTYyMTIwMEM5OTFCMiAvKiBJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0
b3IubHV0LmggKi87IH07CiAJCUUzNjVGMzNCMjRBQTYyM0IwMEM5OTFCMiAvKiBJbnRsRGlzcGxh
eU5hbWVzUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM2NUYzMzgyNEFBNjIxMTAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNQ
cm90b3R5cGUubHV0LmggKi87IH07CiAJCUUzNjY0NDFFMjU0NDA5QjMwMDAxODc2RiAvKiBJbnRs
TGlzdEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzE4Q0E2OTI1NDQwNkI1MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXQuY3BwICovOyB9
OwotCQlFMzZCNzY3MDIyRjhENjE5MDBEMDk4MTggLyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2Qjc2NkYy
MkY4RDYxMTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLzsgfTsKIAkJRTM2
Q0M5NDcyMDg2MzE0RjAwNTFGRkQ2IC8qIFdhc21DcmVhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkNDOTQ2MjA4NjMxNEYwMDUxRkZE
NiAvKiBXYXNtQ3JlYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTM2RURDRTUyNEYwOTc1NzAwRTYwREEyIC8qIENvbmN1cnJlbmN5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZFRENF
NDI0RjA5NzU3MDBFNjBEQTIgLyogQ29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzcxMTk5MjI1M0ZBODdGMDBCQTY5QTAgLyog
R2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3
MTE5OTEyNTNGQTg3RTAwQkE2OUEwIC8qIEdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzcwMCw2ICszNzAwLDggQEAKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTI3Q0UzNTIyMjU1NUZERDAwQzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSlNUb1dhc21JQ0NhbGxlZS5jcHA7IHBhdGggPSBqcy9KU1RvV2Fz
bUlDQ2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3Q0UzNTMyMjU1
NUZERDAwQzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNUb1dh
c21JQ0NhbGxlZS5oOyBwYXRoID0ganMvSlNUb1dhc21JQ0NhbGxlZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MjdFNkNFQTI3NzJCOUM1MDA1RTA3ODIgLyogV2FzbU9TUkVudHJ5
UGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT1NSRW50cnlQbGFuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21P
U1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9TUkVudHJ5UGxhbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFp
cklSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlE
QiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUFpcklSR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZBMTk3NEFFNjEwMDgw
ODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjQw
LDggKzUyNDIsNiBAQAogCQlFMzY1RjMzODI0QUE2MjExMDBDOTkxQjIgLyogSW50bERpc3BsYXlO
YW1lc1Byb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM2NUYzMzkyNEFBNjIxMjAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rv
ci5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZCNDgw
MTIzRTk1NzM4MDBFNEE2NkUgLyogVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFMzZCNzY2RTIyRjhENjExMDBEMDk4MTggLyogV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTM2Qjc2NkYyMkY4RDYxMTAw
RDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZDQzk0
NjIwODYzMTRGMDA1MUZGRDYgLyogV2FzbUNyZWF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtQ3JlYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzNkVEQ0U0MjRGMDk3NTcwMEU2MERBMiAvKiBDb25jdXJyZW5jeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW5jeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzcxMTk5MTI1M0ZBODdFMDBCQTY5QTAgLyogR2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NjA5LDggKzY2MDksNiBAQAogCQkJCUUzQkYxQkFEMjM4QUFFRDEwMDNBMUMy
QiAvKiBJc29IZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlFM0M4RUQ0MjIzQTFEQkM1MDAxMzE5NTgg
LyogSXNvSW5saW5lZEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUZFNjVCMTUwMjc0ODYwMUYwMERC
NUIxNiAvKiBJc29JbmxpbmVkSGVhcENlbGxUeXBlSW5saW5lcy5oICovLAotCQkJCTUzN0ZFRUNE
Mjc0MkJERTAwMEM5RUZFRSAvKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmggKi8sCi0JCQkJNTM3
RkVFQ0EyNzQyQkRFMDAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9jYXRvckJhc2VJbmxpbmVzLmgg
Ki8sCiAJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywK
IAkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkw
RkQyRkQ5MjIwQjUyQkRDMDBGMDk0NDEgLyogSXNvU3Vic3BhY2VJbmxpbmVzLmggKi8sCkBAIC03
MjU1LDEwICs3MjUzLDEwIEBACiAJCQkJQUQ3QjRCMkQxRkEzRTI4NjAwQzlERjc5IC8qIFdhc21O
YW1lU2VjdGlvbi5oICovLAogCQkJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFt
ZVNlY3Rpb25QYXJzZXIuY3BwICovLAogCQkJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLywKLQkJCQlFMzZCNzY2RTIyRjhENjExMDBEMDk4MTgg
LyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgKi8sCi0JCQkJRTM2Qjc2NkYyMkY4RDYxMTAw
RDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLywKIAkJCQk1MzExQkQ0ODFFQTU4
MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3BwICovLAogCQkJCTUzMTFCRDQ5MUVBNTgxRTUw
MDUyNTI4MSAvKiBXYXNtT01HUGxhbi5oICovLAorCQkJCTUyN0U2Q0VBMjc3MkI5QzUwMDVFMDc4
MiAvKiBXYXNtT1NSRW50cnlQbGFuLmNwcCAqLywKKwkJCQk1MjdFNkNFQjI3NzJCOUM1MDA1RTA3
ODIgLyogV2FzbU9TUkVudHJ5UGxhbi5oICovLAogCQkJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQy
NSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLywKIAkJCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0
MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovLAogCQkJCUUzOUQ4QjJDMjMwMjFFMUUwMDI2NTg1
MiAvKiBXYXNtT3BlcmF0aW9ucy5jcHAgKi8sCkBAIC05NzE3LDYgKzk3MTUsNyBAQAogCQkJCUE3
RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0
ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MjdFNkNFQzI3NzJCOUNCMDA1RTA3ODIg
LyogV2FzbU9TUkVudHJ5UGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMkZEOTQyMEI1MkJE
RTAwRjA5NDQxIC8qIENvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTA5NzUsNyArMTA5NzQsNiBAQAogCQkJCUFENUI0MTZGMUVCQUZCNzcw
MDhFRkE0MyAvKiBXYXNtTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QjRCMkUxRkEzRTI5
ODAwQzlERjc5IC8qIFdhc21OYW1lU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUREOEZB
NDYxRUIzMDc5NzAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJRTM2Qjc2NzAyMkY4RDYxOTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBs
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTUzMTFCRDRCMUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNt
T01HUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNDNkZFRUYxRThBREZBOTAwQjE4NDI1IC8q
IFdhc21PcGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOUQ4QjJFMjMwMjFFMjYw
MDI2NTg1MiAvKiBXYXNtT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuY3BwCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE1
ICs3NywxMCBAQCBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21wCiB7CiAg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlOgorICAgIGlmIChXYXNtOjppc0FueUJCUShtb2RlKSkKICAgICAgICAgcmV0
dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGU6CisgICAgaWYgKFdhc206OmlzQW55T01HKG1vZGUpKQogICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGls
ZSAoMCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6
OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCos
IGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplKTsKKyAgICB2b2lkIGZpbmFsaXplRW50cnlwb2ludHMoKTsKIAogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1
aW50MzJfdCk7CkBAIC03NDgsNiArNzQ5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dWludDMy
X3Q+IG1fb3V0ZXJMb29wczsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKICAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBCYXNp
Y0Jsb2NrKiBtX21haW5FbnRyeXBvaW50U3RhcnQgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFR5
cGVkVG1wPiBtX2xvY2FsczsKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBm
dW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCiAg
ICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKQEAgLTc3NCw2ICs3
NzYsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIAog
ICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIg
fTsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+
PiBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YTsKKyAgICBSZWZQdHI8QjM6OkFpcjo6UHJvbG9ndWVH
ZW5lcmF0b3I+IG1fcHJvbG9ndWVHZW5lcmF0b3I7CisgICAgdW5zaWduZWQmIG1fb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZTsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJs
eSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQg
MzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04MTksNyArODI1LDcgQEAgdm9pZCBBaXJJUkdlbmVy
YXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SQogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRj
aHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5l
cmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUpCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5j
dGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAg
LCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQpAQCAt
ODI4LDYgKzgzNCw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QK
ICAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQogICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25z
KGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQorICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiB7CiAgICAgbV9jdXJyZW50QmxvY2sg
PSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVudEJsb2NrOwpA
QCAtODQ3LDExICs4NTQsOSBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3Qg
TW9kCiAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX2JvdW5kc0NoZWNraW5nU2l6ZUdQUik7
CiAgICAgfQogCi0gICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOwotCiAgICAgR1BSUmVn
IGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMV0gOiBtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFI7CiAKLSAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJh
dG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9u
PihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgbV9w
cm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5l
cmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29k
ZSkgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CiAgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwogCkBAIC04NTks
NyArODY0LDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAg
ICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xv
Z3VlU2NyYXRjaEdQUnNbMF07CiAgICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5t
b3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxs
ZWVHUFIpOwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxv
Y2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVu
dHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb25zLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5
UHRyVGFnPihtb3ZlTG9jYXRpb24pKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSk7CiAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC05MDgsOCArOTEzLDYgQEAgQWlySVJHZW5lcmF0
b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICB9CiAgICAgfSk7CiAKLSAgICBt
X2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAsIFdURk1vdmUocHJvbG9ndWVHZW5lcmF0
b3IpKTsKLQogICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgbV9pbnN0
YW5jZVZhbHVlID0gZzY0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIG9u
bHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCkBAIC05MjQsNiArOTI3LDEwIEBA
IEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgbV9sb2Nh
bHNbaV0gPSB0bXBGb3JUeXBlKHR5cGUpOwogICAgIH0KIAorICAgIGFwcGVuZChFbnRyeVN3aXRj
aCk7CisgICAgbV9tYWluRW50cnlwb2ludFN0YXJ0ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX21haW5FbnRyeXBvaW50U3RhcnQ7CisKICAgICBDYWxsSW5mb3Jt
YXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0
aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgd2FzbUNhbGxJbmZvLnBhcmFtcy5zaXplKCk7ICsraSkgewpAQCAtOTU0LDYg
Kzk2MSw4OCBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAg
ZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKIH0KIAordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZmluYWxp
emVFbnRyeXBvaW50cygpCit7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSAxICsgbV9s
b29wRW50cnlWYXJpYWJsZURhdGEuc2l6ZSgpOworICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50
cyhudW1FbnRyeXBvaW50cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVudHJ5
cG9pbnRzOyArK2kpCisgICAgICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoaSwg
UmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRvcikpOwor
CisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgQmFzaWNCbG9jazo6U3Vj
Y2Vzc29yTGlzdCBzdWNjZXNzb3JzOworICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKG1fbWFpbkVudHJ5
cG9pbnRTdGFydCk7CisKKyAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOworCisg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9sb29wRW50cnlWYXJpYWJsZURhdGEpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogbG9vcEJvZHkgPSBwYWlyLmZpcnN0OworICAgICAgICBUbXAgYmFzZVB0ciA9
IFRtcChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBCYXNpY0Jsb2NrKiBlbnRyeSA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGVudHJ5OworICAg
ICAgICBhdXRvJiB0ZW1wcyA9IHBhaXIuc2Vjb25kOworCisgICAgICAgIHN1Y2Nlc3NvcnMuYXBw
ZW5kKGVudHJ5KTsKKworICAgICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBzdGQ6
Om1heChtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
ZW1wcy5zaXplKCkpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGVtcHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEIzOjpBaXI6Ok9wY29kZSBsb2FkT3A7CisgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlczsKKyAgICAgICAgICAgIHN3aXRjaCAodGVtcHNbaV0udHlw
ZSgpLmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgICAg
ICAgICBsb2FkT3AgPSBNb3ZlMzI7CisgICAgICAgICAgICAgICAgYnl0ZXMgPSA0OworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6STY0OgorICAgICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6RnVuY3JlZjoKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OlJlZjoKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJlZk51bGw6CisgICAgICAgICAgICBj
YXNlIFR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgICAgICAgICAgbG9hZE9wID0gTW92ZTsK
KyAgICAgICAgICAgICAgICBieXRlcyA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVLaW5kOjpGMzI6CisgICAgICAgICAgICAgICAgbG9hZE9wID0gTW92
ZUZsb2F0OworICAgICAgICAgICAgICAgIGJ5dGVzID0gNDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkY2NDoKKyAgICAgICAgICAgICAgICBsb2Fk
T3AgPSBNb3ZlRG91YmxlOworICAgICAgICAgICAgICAgIGJ5dGVzID0gODsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdWludDY0X3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGkpICogc2l6ZW9mKHVpbnQ2NF90KTsKKworICAgICAgICAgICAgQXJnIGFkZHJBcmc7Cisg
ICAgICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JC
eXRlcyhieXRlcykpKQorICAgICAgICAgICAgICAgIGFkZHJBcmcgPSBBcmc6OmFkZHIoYmFzZVB0
ciwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaW1t
VG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGltbVRtcCA9IGc2NCgpOworICAgICAgICAgICAg
ICAgICAgICBuZXdQdHIgPSBnNjQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIGJhc2VQdHIsIG5ld1B0cik7CisgICAgICAgICAg
ICAgICAgYWRkckFyZyA9IEFyZzo6YWRkcihuZXdQdHIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBhcHBlbmQobG9hZE9wLCBhZGRyQXJnLCB0ZW1wc1tpXS50bXAoKSk7CisgICAgICAg
IH0KKworICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGVudHJ5LT5zZXRTdWNjZXNzb3Jz
KGxvb3BCb2R5KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1FbnRyeXBvaW50cyA9
PSBzdWNjZXNzb3JzLnNpemUoKSk7CisgICAgbV9yb290QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IHN1
Y2Nlc3NvcnM7Cit9CisKIEIzOjpUeXBlIEFpcklSR2VuZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShC
bG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKQogewogICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5z
Vm9pZCgpKQpAQCAtMjk1NCwxMCArMzA0MywzMCBAQCBBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERh
dGEgQWlySVJHZW5lcmF0CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9j
aywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKKyAgICBSRUxFQVNFX0FTU0VSVChsb29wSW5kZXggPT0gbV9sb29wRW50cnlWYXJpYWJsZURh
dGEuc2l6ZSgpKTsKKwogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsK
ICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKIAogICAg
IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworCisgICAg
eworICAgICAgICBWZWN0b3I8VHlwZWRUbXA+IHZhcmlhYmxlczsKKyAgICAgICAgZm9yIChhdXRv
IGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgICAgICB2YXJpYWJsZXMuYXBwZW5kKGxvY2FsKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgICAgICAgICB2YXJp
YWJsZXMuYXBwZW5kKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8gdmFy
aWFibGUgOiBlbmNsb3NpbmdTdGFjaykKKyAgICAgICAgICAgIHZhcmlhYmxlcy5hcHBlbmQodmFy
aWFibGUpOworICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBuZXdTdGFjaykKKyAgICAgICAg
ICAgIHZhcmlhYmxlcy5hcHBlbmQodmFyaWFibGUpOworCisgICAgICAgIG1fbG9vcEVudHJ5VmFy
aWFibGVEYXRhLmFwcGVuZChzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+
KGJvZHksIFdURk1vdmUodmFyaWFibGVzKSkpOworICAgIH0KKwogICAgIFJlc3VsdExpc3QgcmVz
dWx0czsKICAgICByZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV3U3RhY2suc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8gaXRlbSA6IG5ld1N0YWNrKQpAQCAtMzU5NCw4ICszNzAzLDkgQEAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogCiAgICAgY29tcGlsYXRp
b25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJz
PigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmUgPSBt
YWtlVW5pcXVlPEIzOjpQcm9jZWR1cmU+KCk7CiAKLSAgICBCMzo6UHJvY2VkdXJlIHByb2NlZHVy
ZTsKKyAgICBhdXRvJiBwcm9jZWR1cmUgPSAqY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZTsK
ICAgICBDb2RlJiBjb2RlID0gcHJvY2VkdXJlLmNvZGUoKTsKIAogICAgIHByb2NlZHVyZS5zZXRP
cmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3JpZ2luIG9yaWdpbikgewpA
QCAtMzYxMSwxMCArMzcyMSwxMCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvCiAgICAgCiAgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKE9wdGlvbnM6OndlYkFzc2Vt
Ymx5QkJRQWlyT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBBaXJJUkdlbmVyYXRvciBpckdl
bmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlKTsKKyAgICBBaXJJ
UkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0
dXJlLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogICAgIEZ1bmN0aW9uUGFy
c2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0
YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKLQorICAgIGlyR2VuZXJhdG9yLmZp
bmFsaXplRW50cnlwb2ludHMoKTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNyArNTM1
LDcgQEAgcHJpdmF0ZToKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJz
ZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAg
ICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
Ci0gICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRp
b25Nb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgY29uc3QgdW5zaWduZWQgbV9sb29wSW5kZXhGb3JPU1JFbnRyeSB7IFVJTlRfTUFYIH07
CiAgICAgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OwpAQCAtNzAxLDcgKzcwMSw3
IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWwKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIGF1dG8qIGNhbGxlZU1vdmVMb2NhdGlvbiA9ICZjb21waWxhdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uOworICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb25zID0gJmNv
bXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5v
dy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXpl
b2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcywg
IldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAgICAgICAgIEIzOjpQYXRjaHBvaW50
VmFsdWUqIGdldENhbGxlZVBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIz
OjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBPcmlnaW4oKSk7CkBAIC03MTEs
OCArNzExLDggQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bAogICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHBh
cmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbY2FsbGVlTW92ZUxvY2F0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0aW9ucywgbW92ZUxvY2F0
aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVNb3ZlTG9jYXRpb25zLT5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0
clRhZz4obW92ZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKIApAQCAtNzgyLDcgKzc4Miw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWwKIAogICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7CiAKLSAgICBpZiAobV9jb21w
aWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCisgICAg
aWYgKGlzT1NSRW50cnkobV9jb21waWxhdGlvbk1vZGUpKQogICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fcHJvYy5hZGRCbG9jaygpOwogfQogCkBAIC0zMjQ3LDcgKzMyNDcsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGREdW1wSVJGb3IodWludDMyX3QgZnVuCiAgICAgcmV0dXJuIGR1bXBBbGxvd2xp
c3QtPnNob3VsZER1bXBXYXNtRnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiB9CiAKLUV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9u
RGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50
KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWlu
dDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAg
YXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTMyODAs
MTEgKzMyODAsMTEgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpbwog
ICAgIC8vIG9wdExldmVsPTEuCiAgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhm
YWxzZSk7CiAgICAgCi0gICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9
PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUKKyAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoaXNB
bnlCQlEoY29tcGlsYXRpb25Nb2RlKQogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJR
QjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdP
cHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5m
bywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5k
ZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXApOworICAgIEIzSVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUsIGNvbXBpbGF0
aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRpZXJVcCk7CiAg
ICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5j
dGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7
CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTMz
MjksNiArMzMyOSw5IEBAIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmUK
ICAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAo
ZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsKICAgICB1bnNpZ25lZCBudW1FbnRy
eXBvaW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygpOwogICAgIGZvciAo
Y29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0
aW9uSGFuZGxlcnMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5N
YXA+IHBjVG9Db2RlT3JpZ2luTWFwOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVy
VXBDb3VudCogPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogdm9pZCBjb21wdXRlRXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiosIGNvbnN0IENvbXBp
bGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2lu
TWFwKENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMTcgKzYzLDI2IEBAIGJvb2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQogICAgIGNvbnN0
IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBp
ZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25z
LnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQogICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21w
aWxhdGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVy
VXBDb3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAg
fHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwg
IiB0aWVyLXVwIGNvdW50cyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9hbGxM
b29wRW50cnlwb2ludHMsIGZ1bmN0aW9ucy5zaXplKCksICIgbG9vcCBlbnRyeXBvaW50cyIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNp
emUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLnJl
c2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXpl
KGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbnMu
c2l6ZSgpKTsKKyAgICBtX2FsbExvb3BFbnRyeXBvaW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgc2V0TG9vcEVudHJ5cG9p
bnRzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb2NhdGlvbnMpCit7Cisg
ICAgLy8gT09QUzogVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBleGNlcHRpb25zLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9jZWR1cmUubnVtRW50cnlwb2ludHMoKSAtIDE7ICsraSkK
KyAgICAgICAgbG9jYXRpb25zLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5
UHRyVGFnPihwcm9jZWR1cmUuY29kZSgpLmVudHJ5cG9pbnRMYWJlbChpICsgMSkpKTsKK30KKwog
dm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBpZiAo
IW1fY2FsbGVlR3JvdXApIHsKQEAgLTEyNSwxMyArMTM0LDE3IEBAIHZvaWQgQkJRUGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewotICAgICAgICBSZWY8QkJRQ2FsbGVlPiBj
YWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwg
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0
KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdh
c21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVu
Y3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+
Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwor
ICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGll
clVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24t
PnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUpOworICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1bmN0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsK
ICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQogICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6
OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKGNhbGxlZS5wdHIoKSwgV1RGTW92ZShj
b250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKSk7CiAKKyAgICAgICAgaWYgKGNvbnRleHQucHJvY2Vk
dXJlKQorICAgICAgICAgICAgc2V0TG9vcEVudHJ5cG9pbnRzKGxpbmtCdWZmZXIsICpjb250ZXh0
LnByb2NlZHVyZSwgY2FsbGVlLT5sb29wRW50cnlwb2ludHMoKSk7CisKICAgICAgICAgLy8gV2Ug
d2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUg
YXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAg
ICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5r
ZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRlcywg
d2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkg
cHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVz
IGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQpAQCAtMTk1LDIxICsyMDgsMjMgQEAgc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYQogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSArIGZ1
bmN0aW9uSW5kZXg7CiAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKICAgICBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0
OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotCiAgICAgLy8g
RklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBl
eGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUg
c2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1C
LgogICAgIC8vIFRoZSBsb25nIHRlcm0gc29sdXRpb24gc2hvdWxkIGJlIHRvIGludHJvZHVjZSBh
IFdhc20gaW50ZXJwcmV0ZXIuIEJ1dCBhcyBhIHNob3J0IHRlcm0gc29sdXRpb24sIHdlIGludHJv
ZHVjZSBoZXVyaXN0aWNzIHRvIHN3aXRjaCBiYWNrIHRvIEJCUSBCMyBhdCB0aGUgc2FjcmlmaWNl
IG9mIHN0YXJ0LXVwIHRpbWUsCiAgICAgLy8gYXMgQkJRIEFpciBibG9hdHMgc3VjaCBsZW5ndGh5
IFdhc20gY29kZSBhbmQgd2lsbCBjb25zdW1lIGEgbGFyZ2UgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5LgorCisgICAgLy8gT09QUwogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7Cisg
ICAgLyoKICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkg
JiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXplID49IE9wdGlvbnM6OndlYkFz
c2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVl
OwogICAgIGVsc2UgaWYgKCFtX21vZHVsZUluZm9ybWF0aW9uLT5tX2Z1bmN0aW9uRG9lc05vdFVz
ZUV4Y2VwdGlvbnMucXVpY2tHZXQoZnVuY3Rpb25JbmRleCkpCiAgICAgICAgIGZvcmNlVXNpbmdC
MyA9IHRydWU7CiAgICAgZWxzZSBpZiAoIU9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCiAgICAg
ICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CisgICAgKi8KIAogICAgIGlmIChmb3JjZVVzaW5nQjMp
Ci0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21w
aWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7
CisgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0
aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CiAgICAgZWxzZQogICAgICAgICBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNp
Z25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIApAQCAtMjQ2LDYgKzI2MSw5IEBA
IHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigpCiAKICAgICAgICAgICAgIGNv
bXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAorICAgICAgICAg
ICAgaWYgKGNvbnRleHQucHJvY2VkdXJlKQorICAgICAgICAgICAgICAgIHNldExvb3BFbnRyeXBv
aW50cyhsaW5rQnVmZmVyLCAqY29udGV4dC5wcm9jZWR1cmUsIG1fYWxsTG9vcEVudHJ5cG9pbnRz
W2Z1bmN0aW9uSW5kZXhdKTsKKwogICAgICAgICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkg
QkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgV1RGTW92ZShj
b250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwpAQCAtMjg1LDEzICszMDMsMTggQEAg
dm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYQogICAgICAgICBSZWZQdHI8
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiAgICAg
ICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAg
IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICBzaXplX3Qg
ZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3
YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24t
PmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50
c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMp
LCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUobV9leGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24s
IENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKKyAgICAg
ICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdU
Rk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShm
dW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
LCBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5k
ZXhdKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworCisgICAgICAgIHdh
c21FbnRyeXBvaW50Q2FsbGVlLT5sb29wRW50cnlwb2ludHMoKSA9IFdURk1vdmUobV9hbGxMb29w
RW50cnlwb2ludHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSk7CisKKyAgICAgICAgZm9yIChhdXRv
JiBtb3ZlTG9jYXRpb24gOiBmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBpZiAo
bV9jb21waWxhdGlvbkNvbnRleHRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmln
aW5NYXApCiAgICAgICAgICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkuYWRkUENUb0Nv
ZGVPcmlnaW5NYXAod2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCksIFdURk1vdmUobV9jb21waWxh
dGlvbkNvbnRleHRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmlnaW5NYXApKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkocmV2aXNpb24g
Mjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMy
X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRGVmYXVsdEhhc2g8dWludDMy
X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJl
ZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRl
eHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRp
ZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CisgICAgVmVjdG9yPFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxXYXNtRW50cnlQdHJUYWc+Pj4gbV9hbGxMb29wRW50cnlwb2ludHM7CiAKICAgICBS
ZWZQdHI8Q2FsbGVlR3JvdXA+IG1fY2FsbGVlR3JvdXAgeyBudWxscHRyIH07CiAgICAgdWludDMy
X3QgbV9mdW5jdGlvbkluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsNiBAQCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWV9CM0pJVCkKLWNsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlOwotI2VuZGlmCi0KIGNs
YXNzIENhbGxlZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsZWU+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIApAQCAtNjcsMTMgKzYzLDYgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBoYXNFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICFtX2V4Y2VwdGlv
bkhhbmRsZXJzLmlzRW1wdHkoKTsgfQogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPU1JFbnRyeUNhbGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+JiYsIE1lbW9yeU1vZGUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLSNlbmRpZgotCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBsbGludEZ1bmN0aW9uQ29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtMTYxLDE5ICsxNTAsMTkgQEAgcHJp
dmF0ZToKICAgICB9CiB9OwogCi1jbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1
YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK2NsYXNzIE9TUkVudHJ5Q2FsbGVlIGZpbmFsIDog
cHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01H
Rm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9v
cEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBT
dGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2Vw
dGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICBzdGF0aWMgUmVmPE9TUkVu
dHJ5Q2FsbGVlPiBjcmVhdGUoQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZN
b3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9T
UkVudHJ5Q2FsbGVlKGNvbXBpbGF0aW9uTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgs
IFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RG
TW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0K
IAogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVy
biBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQogCiBwcml2YXRlOgotICAgIE9NR0Zvck9T
UkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNp
Z25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0
YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMs
IFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKQotICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2Fz
bTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2lu
dCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3Zl
KHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMpKQorICAgIE9TUkVudHJ5Q2FsbGVlKENvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYm
IHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxl
cnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUo
Y29tcGlsYXRpb25Nb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKICAg
ICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgewpAQCAtMTg1LDEz
ICsxNzQsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgQkJRQ2FsbGVlIGZpbmFsIDogcHVibGljIE9w
dGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBj
cmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVl
X3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJV
cENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBT
dGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2Vw
dGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgdW5zaWduZWQgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0
aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUo
ZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSwgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSkpOwogICAgIH0KIAotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4mJiBvc3JF
bnRyeUNhbGxlZSwgTWVtb3J5TW9kZSkgZmluYWwKKyAgICBPU1JFbnRyeUNhbGxlZSogb3NyRW50
cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRPU1JFbnRyeUNhbGxlZShSZWY8T1NSRW50cnlDYWxsZWU+JiYgb3NyRW50cnlDYWxsZWUsIE1l
bW9yeU1vZGUpCiAgICAgewogICAgICAgICBtX29zckVudHJ5Q2FsbGVlID0gV1RGTW92ZShvc3JF
bnRyeUNhbGxlZSk7CiAgICAgfQpAQCAtMjA3LDE3ICsxOTYsMjQgQEAgcHVibGljOgogCiAgICAg
VGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsg
fQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb29w
RW50cnlwb2ludHMoKSB7IHJldHVybiBtX2xvb3BFbnRyeXBvaW50czsgfQorCisgICAgdW5zaWdu
ZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZTsgfQorCiBwcml2YXRlOgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50
PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtl
ZENhbGxzLCBTdGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICBCQlFDYWxs
ZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWly
PGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0
cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5r
ZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMs
IHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgICAgIDogT3B0aW1pemlu
Z0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlw
b2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZN
b3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpKQogICAgICAgICAsIG1fdGllclVwQ291bnQoV1RGTW92ZSh0
aWVyVXBDb3VudCkpCisgICAgICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxPTUdGb3JP
U1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKKyAgICBSZWZQdHI8T1NSRW50cnlDYWxs
ZWU+IG1fb3NyRW50cnlDYWxsZWU7CiAgICAgUmVmUHRyPE9NR0NhbGxlZT4gbV9yZXBsYWNlbWVu
dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnQ7CisgICAg
VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IG1fbG9vcEVudHJ5cG9p
bnRzOwogICAgIGJvb2wgbV9kaWRTdGFydENvbXBpbGluZ09TUkVudHJ5Q2FsbGVlIHsgZmFsc2Ug
fTsKKyAgICB1bnNpZ25lZCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgeyAwIH07CiB9Owog
I2VuZGlmCiAKQEAgLTIzNywxMyArMjMzLDEzIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWV9CM0pJVCkKICAgICBKSVRDYWxsZWUqIHJlcGxhY2VtZW50KE1lbW9yeU1vZGUgbW9k
ZSkgeyByZXR1cm4gbV9yZXBsYWNlbWVudHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRSZXBsYWNlbWVudChSZWY8SklUQ2FsbGVlPiYmIHJlcGxhY2Vt
ZW50LCBNZW1vcnlNb2RlIG1vZGUpCisgICAgdm9pZCBzZXRSZXBsYWNlbWVudChSZWY8T3B0aW1p
emluZ0pJVENhbGxlZT4mJiByZXBsYWNlbWVudCwgTWVtb3J5TW9kZSBtb2RlKQogICAgIHsKICAg
ICAgICAgbV9yZXBsYWNlbWVudHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gV1RGTW92
ZShyZXBsYWNlbWVudCk7CiAgICAgfQogCi0gICAgT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlKE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9vc3JFbnRyeUNhbGxlZXNbc3Rh
dGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRPU1JFbnRyeUNh
bGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+JiYgb3NyRW50cnlDYWxsZWUsIE1lbW9yeU1v
ZGUgbW9kZSkgZmluYWwKKyAgICBPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUoTWVtb3J5
TW9kZSBtb2RlKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlc1tzdGF0aWNfY2FzdDx1aW50OF90
Pihtb2RlKV0uZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPU1JFbnRy
eUNhbGxlZT4mJiBvc3JFbnRyeUNhbGxlZSwgTWVtb3J5TW9kZSBtb2RlKQogICAgIHsKICAgICAg
ICAgbV9vc3JFbnRyeUNhbGxlZXNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gV1RGTW92
ZShvc3JFbnRyeUNhbGxlZSk7CiAgICAgfQpAQCAtMjU4LDggKzI1NCw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WV9CM0pJVCkKLSAgICBSZWZQdHI8SklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1i
ZXJPZk1lbW9yeU1vZGVzXTsKLSAgICBSZWZQdHI8T01HRm9yT1NSRW50cnlDYWxsZWU+IG1fb3Ny
RW50cnlDYWxsZWVzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOworICAgIFJlZlB0cjxPcHRp
bWl6aW5nSklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVz
XTsKKyAgICBSZWZQdHI8T1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxsZWVzW1dhc206Ok51
bWJlck9mTWVtb3J5TW9kZXNdOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBtX2VudHJ5cG9pbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGVlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlR3JvdXAuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3
ICsxNjMsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICBm
cmllbmQgY2xhc3MgQkJRUGxhbjsKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKLSAgICBmcmll
bmQgY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuOworICAgIGZyaWVuZCBjbGFzcyBPU1JFbnRyeVBs
YW47CiAjZW5kaWYKIAogICAgIENhbGxlZUdyb3VwKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1
bGVJbmZvcm1hdGlvbiYsIFJlZlB0cjxMTEludENhbGxlZXM+KTsKQEAgLTE4Myw2ICsxODMsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxFbnRyeVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0b21p
Yzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKK3B1YmxpYzoKICAgICBMb2NrIG1fbG9jazsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db21waWxhdGlvbk1vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db21waWxhdGlvbk1vZGUuY3BwCShy
ZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29tcGls
YXRpb25Nb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQCBjb25zdCBjaGFy
KiBtYWtlU3RyaW5nKENvbXBpbGF0aW9uTW9kZSBtCiAgICAgICAgIHJldHVybiAiTExJbnQiOwog
ICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlOgogICAgICAgICByZXR1cm4gIkJCUSI7
CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkJCUUZvck9TUkVudHJ5TW9kZToKKyAgICAgICAg
cmV0dXJuICJCQlFGb3JPU1JFbnRyeSI7CiAgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6Ok9NR01v
ZGU6CiAgICAgICAgIHJldHVybiAiT01HIjsKICAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6T01H
Rm9yT1NSRW50cnlNb2RlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bXBpbGF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db21waWxhdGlvbk1vZGUuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbXBpbGF0aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiBlbnVtIGNsYXNz
IENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3QgewogICAgIExMSW50TW9kZSwKICAgICBCQlFNb2Rl
LAorICAgIEJCUUZvck9TUkVudHJ5TW9kZSwKICAgICBPTUdNb2RlLAogICAgIE9NR0Zvck9TUkVu
dHJ5TW9kZSwKICAgICBFbWJlZGRlckVudHJ5cG9pbnRNb2RlLApAQCAtMzcsNCArMzgsNDYgQEAg
ZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90IHsKIAogY29uc3QgY2hhciogbWFr
ZVN0cmluZyhDb21waWxhdGlvbk1vZGUpOwogCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNPU1JF
bnRyeShDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKQoreworICAgIHN3aXRjaCAoY29t
cGlsYXRpb25Nb2RlKSB7CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZToKKyAg
ICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9k
ZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50
TW9kZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpC
QlFGb3JPU1JFbnRyeU1vZGU6CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitjb25zdGV4cHIgaW5s
aW5lIGJvb2wgaXNBbnlCQlEoQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKGNvbXBpbGF0aW9uTW9kZSkgeworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlOgorICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpCQlFGb3JPU1JFbnRyeU1vZGU6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JF
bnRyeU1vZGU6CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZToKKyAgICBjYXNl
IENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6RW1i
ZWRkZXJFbnRyeXBvaW50TW9kZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Y29uc3RleHByIGlubGluZSBib29sIGlzQW55T01HKENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUpCit7CisgICAgc3dpdGNoIChjb21waWxhdGlvbk1vZGUpIHsKKyAgICBjYXNlIENvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NS
RW50cnlNb2RlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9k
ZTo6QkJRTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6QkJRRm9yT1NSRW50cnlNb2Rl
OgorICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGU6CisgICAgY2FzZSBDb21waWxh
dGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Mywx
MCArNDQzLDExIEBAIHN0cnVjdCBFbnRyeXBvaW50IHsKIAogc3RydWN0IEludGVybmFsRnVuY3Rp
b24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiBjYWxsZWVNb3ZlTG9jYXRpb247CisgICAg
VmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+PiBjYWxsZWVN
b3ZlTG9jYXRpb25zOwogICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CiAgICAgVmVjdG9yPFVubGlu
a2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRsZXJzOwogICAgIEVudHJ5cG9pbnQgZW50cnlw
b2ludDsKKyAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplIHsgMCB9OwogfTsK
IAogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxsX2luZGlyZWN0IHVzZSBpbmRp
Y2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBzcGFjZSBzdGFydHMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRD
b21wbGV0ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgICAgIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWU+IGNhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUo
ZnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhp
cyByZXBhdGNoUG9pbnRlciAtIGp1c3QgcGFzcyBpbiB0aGUgY2FsbGVlIGRpcmVjdGx5CiAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYy
Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbikKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1v
dmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlv
bnMpCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5hZGQoZnVuY3Rpb25JbmRleCwgV1RG
TW92ZShjYWxsZWUpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9y
T1NSRW50cnlQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldhc21PTUdG
b3JPU1JFbnRyeVBsYW4uaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLQotI2lu
Y2x1ZGUgIkpJVENvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1
ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgotI2luY2x1
ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgotI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgot
I2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewotCi1uYW1lc3BhY2UgV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbkludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7Ci19Ci0KLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKENv
bnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxl
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2Rl
IG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UoY29udGV4dCwgY29uc3Rf
Y2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSksIFdU
Rk1vdmUodGFzaykpCi0gICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCi0gICAgLCBtX2Nh
bGxlZUdyb3VwKCptX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSkpCi0gICAgLCBtX2NhbGxl
ZShXVEZNb3ZlKGNhbGxlZSkpCi0gICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkK
LSAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKLXsKLSAgICBBU1NFUlQoT3B0aW9uczo6dXNl
T01HSklUKCkpOwotICAgIHNldE1vZGUobW9kZSk7Ci0gICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAt
PnJ1bm5hYmxlKCkpOwotICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxl
LT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKLSAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NS
RW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFu
IGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1
bGUuZ2V0KCkpKTsKLX0KLQotdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQpCi17Ci0gICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpOwotICAg
IEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvciht
b2RlKCkpKTsKLSAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07Ci0KLSAgICBjb25zdCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0aW9u
SW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSk7Ci0KLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rp
b25JbmRleF07Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwotICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0
OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9u
LCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JP
U1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwotCi0gICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIg
eyBtX2xvY2sgfTsKLSAgICAgICAgZmFpbChtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1
bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBFbnRyeXBvaW50
IG9tZ0VudHJ5cG9pbnQ7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21F
bnRyeXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKSB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAg
QmFzZTo6ZmFpbChtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgdGll
cmluZyB1cCBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5k
ZXgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRlcm5hbEZ1bmN0aW9uKiBp
bnRlcm5hbEZ1bmN0aW9uID0gcGFyc2VBbmRDb21waWxlUmVzdWx0LT5nZXQoKTsKLSAgICBWZWN0
b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnM7Ci0gICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1
ZmZlcik7Ci0KLSAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21w
aWxhdGlvbj4oCi0gICAgICAgIEZJTkFMSVpFX0NPREVfSUYoY29udGV4dC5wcm9jZWR1cmUtPnNo
b3VsZER1bXBJUigpIHx8IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb21waWxhdGlvbk1vZGU6
Ok9NR0Zvck9TUkVudHJ5TW9kZSksIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAi
V2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3Ry
aW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAot
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0KLSAg
ICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVybmFsRnVu
Y3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Ci0KLSAgICBBU1NFUlQobV9j
YWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7Ci0g
ICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVy
bmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKSk7Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hX
YXNtKGNhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdy
b3VwLT5tX2xvY2sgfTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9X
YXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNv
dW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPm1fd2Fz
bVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NhbGxlZUdyb3VwLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UobG9ja2VyLCBjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4o
KTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNh
bGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVh
ZHMoKTsKLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG1fY2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSkgewotICAgICAgICAg
ICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZTogewotICAgICAgICAgICAgICAgIExM
SW50Q2FsbGVlKiBsbGludENhbGxlZSA9IHN0YXRpY19jYXN0PExMSW50Q2FsbGVlKj4obV9jYWxs
ZWUucHRyKCkpOwotICAgICAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBsbGludENhbGxlZS0+
dGllclVwQ291bnRlcigpLm1fbG9jayB9OwotICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLT5z
ZXRPU1JFbnRyeUNhbGxlZShjYWxsZWUuY29weVJlZigpLCBtb2RlKCkpOwotICAgICAgICAgICAg
ICAgIGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9sb29wQ29tcGlsYXRpb25TdGF0dXMg
PSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ29tcGls
YXRpb25Nb2RlOjpCQlFNb2RlOiB7Ci0gICAgICAgICAgICAgICAgQkJRQ2FsbGVlKiBiYnFDYWxs
ZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NhbGxlZS5wdHIoKSk7Ci0gICAgICAgICAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygp
IH07Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRPU1JFbnRyeUNhbGxlZShjYWxsZWUu
Y29weVJlZigpLCBtb2RlKCkpOwotICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+dGllclVwQ291
bnQoKS0+b3NyRW50cnlUcmlnZ2VycygpW21fbG9vcEluZGV4XSA9IFRpZXJVcENvdW50OjpUcmln
Z2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmU7Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT50
aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVy
VXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIGNvbXBsZXRlKCk7Ci19Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5oCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCi0KLSNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCi0jaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtTW9k
dWxlLmgiCi0jaW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNtUGxhbi5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtJbmZvOwotCi1uYW1lc3BhY2Ug
V2FzbSB7Ci0KLWNsYXNzIE9NR0Zvck9TUkVudHJ5UGxhbiBmaW5hbCA6IHB1YmxpYyBQbGFuIHsK
LXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gUGxhbjsKLQotICAgIGJvb2wgaGFzV29yaygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQotICAgIHZvaWQgd29yayhDb21waWxh
dGlvbkVmZm9ydCkgZmluYWw7Ci0gICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBu
b3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBh
IHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxN
b2R1bGU+JiYsIFJlZjxDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90
IGxvb3BJbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7Ci0KLXByaXZhdGU6Ci0g
ICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50
IGNsYXNzZXMuLi4KLSAgICB1c2luZyBCYXNlOjptX2xvY2s7Ci0KLSAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQotICAgIHZvaWQgY29tcGxl
dGUoKSBXVEZfUkVRVUlSRVNfTE9DSyhtX2xvY2spIGZpbmFsCi0gICAgewotICAgICAgICBtX2Nv
bXBsZXRlZCA9IHRydWU7Ci0gICAgICAgIHJ1bkNvbXBsZXRpb25UYXNrcygpOwotICAgIH0KLQot
ICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOwotICAgIFJlZjxDYWxsZWVHcm91cD4gbV9jYWxsZWVH
cm91cDsKLSAgICBSZWY8Q2FsbGVlPiBtX2NhbGxlZTsKLSAgICBib29sIG1fY29tcGxldGVkIHsg
ZmFsc2UgfTsKLSAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7Ci0gICAgdWludDMyX3QgbV9s
b29wSW5kZXg7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw4
IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwogCiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7
Ci0gICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBDb21waWxhdGlv
bkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFY
KTsKKyAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250
ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbklu
ZGV4LCBVSU5UMzJfTUFYKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBAIC0xMDUsNyArMTA0
LDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9y
KG1vZGUoKSkpOwogICAgICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNy
ZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92
ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5
cG9pbnQoKTsKIAogICAgICAgICBpZiAoY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShy
ZXZpc2lvbiAyODczMzkpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uY3BwOjI4NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PU1JFbnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oIgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQorCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgi
CisjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKK25hbWVzcGFjZSBXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWwg
eworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKworT01HRm9yT1NS
RW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZT4mJiBtb2R1bGUsIFJlZjxDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4o
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9k
dWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fY2FsbGVlR3JvdXAoKm1fbW9kdWxlLT5jYWxs
ZWVHcm91cEZvcihtb2RlKSkKKyAgICAsIG1fY2FsbGVlKFdURk1vdmUoY2FsbGVlKSkKKyAgICAs
IG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQorICAgICwgbV9sb29wSW5kZXgobG9vcElu
ZGV4KQoreworICAgIEFTU0VSVChPcHRpb25zOjp1c2VPTUdKSVQoKSk7CisgICAgc2V0TW9kZSht
b2RlKTsKKyAgICBBU1NFUlQobV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAgQVNTRVJU
KG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1fbW9kZSkp
OworICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlN0YXJ0aW5nIE9NR0Zvck9TUkVudHJ5IHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIg
b2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOworfQorCit2b2lkIE9N
R0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKK3sKKyAgICBBU1NFUlQo
bV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRy
KCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOworICAgIGNvbnN0IEZ1bmN0
aW9uRGF0YSYgZnVuY3Rpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnNbbV9mdW5j
dGlvbkluZGV4XTsKKworICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1f
ZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0
aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKKworICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOworCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7
CisgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgdW5zaWduZWQgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSA9IDA7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBw
YXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxs
cywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwg
bV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgbV9mdW5jdGlvbklu
ZGV4LCBtX2xvb3BJbmRleCk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJl
c3VsdCkpIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBmYWls
KG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0
byB0aWVyIHVwICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIExp
bmtCdWZmZXI6OlByb2ZpbGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYg
KFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKKyAgICAgICAgTG9j
a2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBCYXNlOjpmYWlsKG1ha2VTdHJpbmcoIk91
dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4
ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQtPmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21w
dXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBp
bnRlcm5hbEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKworICAgIG9tZ0VudHJ5cG9p
bnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKKyAgICAgICAgRklOQUxJ
WkVfQ09ERV9JRihjb250ZXh0LnByb2NlZHVyZS0+c2hvdWxkRHVtcElSKCkgfHwgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSwgbGlu
a0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUdGb3JPU1JFbnRy
eSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgIFdURk1vdmUoY29udGV4dC53
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKKworICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9k
dWxlLT5jYWxsZWVHcm91cEZvcihtb2RlKCkpKTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRy
eXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFu
ZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKKyAgICB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxs
ZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2FsbGVlR3JvdXAtPm1fbG9jayB9OworICAgICAgICBm
b3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgeworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
KyAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAgICAgICAgICAgICBl
bnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShsb2NrZXIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBv
aW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOworCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOworICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9jYWxsZWUt
PmNvbXBpbGF0aW9uTW9kZSgpKSB7CisgICAgICAgICAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6
TExJbnRNb2RlOiB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUqIGxsaW50Q2FsbGVlID0g
c3RhdGljX2Nhc3Q8TExJbnRDYWxsZWUqPihtX2NhbGxlZS5wdHIoKSk7CisgICAgICAgICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9sb2NrIH07
CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnNldE9TUkVudHJ5Q2FsbGVlKGNhbGxlZS5j
b3B5UmVmKCksIG1vZGUoKSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnRpZXJVcENv
dW50ZXIoKS5tX2xvb3BDb21waWxhdGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6Q29t
cGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGU6IHsKKyAg
ICAgICAgICAgICAgICBCQlFDYWxsZWUqIGJicUNhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxl
ZSo+KG1fY2FsbGVlLnB0cigpKTsKKyAgICAgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgYmJx
Q2FsbGVlLT50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkgfTsKKyAgICAgICAgICAgICAgICBiYnFD
YWxsZWUtPnNldE9TUkVudHJ5Q2FsbGVlKGNhbGxlZS5jb3B5UmVmKCksIG1vZGUoKSk7CisgICAg
ICAgICAgICAgICAgYmJxQ2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJzKClb
bV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9u
ZTsKKyAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRp
b25TdGF0dXNGb3JPTUdGb3JPU1JFbnRyeSA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuSWYo
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HRm9y
T1NSRW50cnkgIiwgbV9mdW5jdGlvbkluZGV4KTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CisgICAgY29tcGxldGUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyODczMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXYXNtT01HRm9yT1NSRW50cnlQbGFuLmgiCisjaW5jbHVkZSAiV2FzbU9TUkVu
dHJ5UGxhbi5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogCkBAIC00MSwxMSAr
NDEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotbmFtZXNwYWNl
IFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbCB7CituYW1lc3BhY2UgV2FzbU9TUkVudHJ5
UGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9
CiAKLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKENvbnRleHQqIGNvbnRl
eHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxlZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKK09TUkVudHJ5UGxhbjo6T1NSRW50cnlQbGFuKENvbnRleHQqIGNv
bnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxlZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENv
bXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IEJhc2UoY29udGV4dCwgY29uc3RfY2FzdDxNb2R1
bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSksIFdURk1vdmUodGFz
aykpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCiAgICAgLCBtX2NhbGxlZUdyb3Vw
KCptX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSkpCkBAIC01NywxMCArNTcsMTAgQEAgT01H
Rm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQwogICAgIHNldE1vZGUobW9kZSk7
CiAgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2Nh
bGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKLSAg
ICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJT
dGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1v
ZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKKyAgICBkYXRhTG9nTG5JZihX
YXNtT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRy
eSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigm
bV9tb2R1bGUuZ2V0KCkpKTsKIH0KIAotdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQpCit2b2lkIE9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9y
dCkKIHsKICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CiAgICAgQVNTRVJU
KG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkp
OwpAQCAtNzIsMTAgKzcyLDEyIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBp
bGF0aW8KICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07
CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAorICAgIC8vQ29tcGlsYXRpb25Nb2RlIHRhcmdldENvbXBp
bGF0aW9uTW9kZSA9IG1fY2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSA9PSBDb21waWxhdGlvbk1v
ZGU6OkxMSW50TW9kZSA/IENvbXBpbGF0aW9uTW9kZTo6QkJRRm9yT1NSRW50cnlNb2RlIDogQ29t
cGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU7CisgICAgQ29tcGlsYXRpb25Nb2RlIHRh
cmdldENvbXBpbGF0aW9uTW9kZSA9ICBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9k
ZTsKKwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwog
ICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMs
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRl
eCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgdGFyZ2V0Q29tcGlsYXRpb25Nb2RlLCBt
X2Z1bmN0aW9uSW5kZXgsIG1fbG9vcEluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VB
bmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBA
IC05NiwxNSArOTgsMTYgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRp
bwogICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMsIGludGVybmFsRnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCiAgICAg
b21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAotICAg
ICAgICBGSU5BTElaRV9DT0RFX0lGKGNvbnRleHQucHJvY2VkdXJlLT5zaG91bGREdW1wSVIoKSB8
fCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRy
eU1vZGUpLCBsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9N
R0Zvck9TUkVudHJ5IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBz
aWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFt
ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJ
WkVfQ09ERV9JRihjb250ZXh0LnByb2NlZHVyZS0+c2hvdWxkRHVtcElSKCkgfHwgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKHRhcmdldENvbXBpbGF0aW9uTW9kZSksIGxpbmtCdWZmZXIsIEpJVENv
bXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWld
ICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSku
YXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRC
eXByb2R1Y3RzKSk7CiAKICAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7
CiAKICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3Jv
dXBGb3IobW9kZSgpKSk7Ci0gICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBP
TUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21h
cHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CisgICAgUmVmPE9TUkVudHJ5Q2FsbGVlPiBj
YWxsZWUgPSBPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKHRhcmdldENvbXBpbGF0aW9uTW9kZSwgV1RG
TW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIGludGVybmFsRnVuY3Rp
b24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlu
a2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUo
aW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2FsbGVl
R3JvdXAtPm1fbG9jayB9OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21U
b1dhc21DYWxsc2l0ZXMoKSkgewpAQCAtMTQyLDcgKzE0NSw3IEBAIHZvaWQgT01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LSAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJGaW5pc2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGRhdGFM
b2dMbklmKFdhc21PU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zv
ck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCk7CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9j
ayB9OwogICAgIGNvbXBsZXRlKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT1NSRW50cnlQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9TUkVudHJ5UGxhbi5oCShyZXZpc2lvbiAyODczMzkpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoyODczMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQor
CisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiV2FzbVBsYW4uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rSW5mbzsK
KworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBPTUdGb3JPU1JFbnRyeVBsYW4gZmluYWwgOiBw
dWJsaWMgUGxhbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IFBsYW47CisKKyAgICBib29s
IGhhc1dvcmsoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9jb21wbGV0ZWQ7IH0KKyAgICB2b2lk
IHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIGZpbmFsOworICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9u
VGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRo
ZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgT01HRm9yT1NSRW50cnlQbGFuKENv
bnRleHQqLCBSZWY8TW9kdWxlPiYmLCBSZWY8Q2FsbGVlPiYmLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOwor
Citwcml2YXRlOgorICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0
ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCisgICAgdXNpbmcgQmFzZTo6bV9sb2NrOworCisgICAg
Ym9vbCBpc0NvbXBsZXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0KKyAg
ICB2b2lkIGNvbXBsZXRlKCkgV1RGX1JFUVVJUkVTX0xPQ0sobV9sb2NrKSBmaW5hbAorICAgIHsK
KyAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBydW5Db21wbGV0aW9uVGFza3Mo
KTsKKyAgICB9CisKKyAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKKyAgICBSZWY8Q2FsbGVlR3Jv
dXA+IG1fY2FsbGVlR3JvdXA7CisgICAgUmVmPENhbGxlZT4gbV9jYWxsZWU7CisgICAgYm9vbCBt
X2NvbXBsZXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OworICAg
IHVpbnQzMl90IG1fbG9vcEluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmgJKHJldmlzaW9uIDI4NzMzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBDYWxsTGlua0luZm87CiAKIG5hbWVzcGFj
ZSBXYXNtIHsKIAotY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuIGZpbmFsIDogcHVibGljIFBsYW4g
eworY2xhc3MgT1NSRW50cnlQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAg
IHVzaW5nIEJhc2UgPSBQbGFuOwogCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29s
IG11bHRpVGhyZWFkZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8g
Tm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQ
bGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zv
ck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPENhbGxlZT4mJiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21w
bGV0aW9uVGFzayYmKTsKKyAgICBPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYs
IFJlZjxDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRl
eCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9y
IHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMu
Li4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsOSBAQAogI2luY2x1ZGUg
Ildhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNt
TW9kdWxlSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRlICJXYXNtT01HRm9yT1NSRW50cnlQbGFuLmgi
CiAjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKICNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRhLmgi
CisjaW5jbHVkZSAiV2FzbU9TUkVudHJ5UGxhbi5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5o
IgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9i
ZTo6Q29udGV4dAogfQogCiBTVVBQUkVTU19BU0FOCi1zdGF0aWMgdm9pZCBkb09TUkVudHJ5KElu
c3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgY2Fs
bGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYg
b3NyRW50cnlEYXRhKQorc3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2Us
IFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBCQlFDYWxsZWUmIGNhbGxlZSwgT1NSRW50cnlDYWxs
ZWUmIG9zckVudHJ5Q2FsbGVlLCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKIHsKICAgICBh
dXRvIHJldHVybldpdGhvdXRPU1JFbnRyeSA9IFsmXSB7CiAgICAgICAgIGNvbnRleHQuZ3ByKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkgPSAwOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHIKICAgICAgICAgcmV0dXJuIHJldHVybldpdGhv
dXRPU1JFbnRyeSgpOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIkNvbnNpZGVyIE9NR0Zvck9TUkVudHJ5UGxhbiBmb3IgWyIsIGZ1bmN0aW9uSW5kZXgs
ICJdIGxvb3BJbmRleCMiLCBsb29wSW5kZXgsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIHRp
ZXJVcCwgIiAiLCBSYXdQb2ludGVyKGNhbGxlZS5yZXBsYWNlbWVudCgpKSk7CisgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29uc2lkZXIgT1NSRW50cnlQbGFuIGZvciBb
IiwgZnVuY3Rpb25JbmRleCwgIl0gbG9vcEluZGV4IyIsIGxvb3BJbmRleCwgIiB3aXRoIGV4ZWN1
dGVDb3VudGVyID0gIiwgdGllclVwLCAiICIsIFJhd1BvaW50ZXIoY2FsbGVlLnJlcGxhY2VtZW50
KCkpKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlPU1IoKSkgewogICAgICAg
ICBpZiAoc2hvdWxkVHJpZ2dlck9NR0NvbXBpbGUodGllclVwLCBjYWxsZWUucmVwbGFjZW1lbnQo
KSwgZnVuY3Rpb25JbmRleCkpCkBAIC0zMDcsNyArMzA3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21UcgogICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVu
dHJ5KCk7CiAgICAgfQogCi0gICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNh
bGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CisgICAgaWYgKE9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CiAgICAgICAgIGlm
IChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgPT0gbG9vcEluZGV4KQogICAgICAgICAgICAg
cmV0dXJuIGRvT1NSRW50cnkoaW5zdGFuY2UsIGNvbnRleHQsIGNhbGxlZSwgKm9zckVudHJ5Q2Fs
bGVlLCBvc3JFbnRyeURhdGEpOwogICAgIH0KQEAgLTMyMiw3ICszMjIsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyCiAgICAgICAgICAgICByZXR1cm4gcmV0dXJu
V2l0aG91dE9TUkVudHJ5KCk7CiAgICAgfQogCi0gICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CisgICAgaWYgKE9T
UkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7
CiAgICAgICAgIGlmIChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgPT0gbG9vcEluZGV4KQog
ICAgICAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkoaW5zdGFuY2UsIGNvbnRleHQsIGNhbGxlZSwg
Km9zckVudHJ5Q2FsbGVlLCBvc3JFbnRyeURhdGEpOwogICAgICAgICB0aWVyVXAuZG9udE9wdGlt
aXplQW55dGltZVNvb24oZnVuY3Rpb25JbmRleCk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcgogICAgICAgICAgICAgdWludDMyX3Qg
Y3VycmVudExvb3BJbmRleCA9IHRpZXJVcC5vdXRlckxvb3BzKClbbG9vcEluZGV4XTsKICAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIgeyB0aWVyVXAuZ2V0TG9jaygpIH07CiAKLSAgICAgICAgICAg
IC8vIFdlIGFscmVhZHkgc3RhcnRlZCBPTUdGb3JPU1JFbnRyeVBsYW4uCisgICAgICAgICAgICAv
LyBXZSBhbHJlYWR5IHN0YXJ0ZWQgT1NSRW50cnlQbGFuLgogICAgICAgICAgICAgaWYgKGNhbGxl
ZS5kaWRTdGFydENvbXBpbGluZ09TUkVudHJ5Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0zOTAsNyArMzkwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21UcgogCiAgICAgaWYgKHN0YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewog
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NS
IGZvciAiLCBmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6
TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUp
LCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNhbGxlZUdyb3VwLm1vZGUoKSwgUGxhbjo6ZG9u
dEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9T
UkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5j
ZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4
LCBsb29wSW5kZXgsIGNhbGxlZUdyb3VwLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsK
ICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAg
ICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKQEAgLTM5OCw3ICszOTgsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyCiAgICAgICAgICAgICB0aWVyVXAuc2V0
T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KGZ1bmN0aW9uSW5k
ZXgsIENvbXBpbGF0aW9uRGVmZXJyZWQpOwogICAgIH0KIAotICAgIE9NR0Zvck9TUkVudHJ5Q2Fs
bGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpOworICAgIE9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpOwogICAg
IGlmICghb3NyRW50cnlDYWxsZWUpIHsKICAgICAgICAgdGllclVwLnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChmdW5jdGlvbkluZGV4LCBDb21waWxhdGlv
bkRlZmVycmVkKTsKICAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRPU1JFbnRyeSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsMTMgKzE0MSwxMyBAQCB2b2lkIFBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2Fs
bFVzKGNvbnN0CiAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBjYWxsZWVH
cm91cC5tX2xsaW50Q2FsbGVlcy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoSklUQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KGNhbGxlZUdy
b3VwLm1vZGUoKSkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKGNh
bGxlZUdyb3VwLm1vZGUoKSkpCisgICAgICAgICAgICBpZiAoT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoY2FsbGVlR3JvdXAubW9kZSgp
KSkKICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUtPndhc21Ub1dh
c21DYWxsc2l0ZXMoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2Fs
bGVlID0gY2FsbGVlR3JvdXAuYmJxQ2FsbGVlKGNhbGxlZUdyb3VwTG9ja2VyLCBpKSkgewogICAg
ICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBiYnFDYWxsZWUtPnJl
cGxhY2VtZW50KCkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkK
KyAgICAgICAgICAgIGlmIChPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxs
ZWUtPm9zckVudHJ5Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVu
dHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTc2LDEzICsxNzYsMTMgQEAgdm9pZCBQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0NhbGxVcyhjb25z
dAogICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gY2FsbGVlR3JvdXAubV9s
bGludENhbGxlZXMtPmF0KGkpLmdldCgpOwogICAgICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVw
bGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudChjYWxsZWVHcm91cC5tb2Rl
KCkpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxl
ZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZShjYWxsZWVHcm91
cC5tb2RlKCkpKQorICAgICAgICAgICAgaWYgKE9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxl
ZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKGNhbGxlZUdyb3VwLm1vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNp
dGVzKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IGNh
bGxlZUdyb3VwLmJicUNhbGxlZShjYWxsZWVHcm91cExvY2tlciwgaSkpIHsKICAgICAgICAgICAg
IGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVu
dCgpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxl
ZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAg
ICAgICBpZiAoT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gYmJxQ2FsbGVlLT5vc3JF
bnRyeUNhbGxlZSgpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODcz
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtT01HUGxhbi5oIgorI2luY2x1ZGUgIldhc21PU1JFbnRyeVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCkBAIC0xODUsNjAgKzE4NSw4OCBAQCBXQVNNX1NM
T1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
T2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYyk7CiAgICAgY29uc3QgYXV0byYg
b3NyRW50cnlEYXRhID0gdGllclVwQ291bnRlci5vc3JFbnRyeURhdGFGb3JMb29wKGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGlmICghdGllclVwQ291bnRlci5jaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7
Ci0gICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBhdXRvIGRvT1NSRW50cnkgPSBbJl0oV2FzbTo6T01HRm9yT1NSRW50cnlDYWxsZWUq
IG9zckVudHJ5Q2FsbGVlKSB7Ci0gICAgICAgIGlmIChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4
KCkgIT0gb3NyRW50cnlEYXRhLmxvb3BJbmRleCkKKyAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50
VGllcnNVcFRvQkJRKCkgJiYgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCku
bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGNvZGVCbG9jay0+ZnVuY3Rp
b25JbmRleCgpKSkgeworICAgICAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNh
bGxlZSwgY29kZUJsb2NrLCBpbnN0YW5jZSkpCiAgICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08o
bnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICAgICAgc2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUgPSBvc3JFbnRyeUNhbGxlZS0+b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID09IG9zckVudHJ5
RGF0YS52YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgV2FzbTo6QkJRQ2FsbGVlKiBjYWxsZWU7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBpbnN0YW5jZS0+Y2FsbGVlR3Jv
dXAoKS0+bV9sb2NrIH07CisgICAgICAgICAgICBjYWxsZWUgPSBpbnN0YW5jZS0+Y2FsbGVlR3Jv
dXAoKS0+YmJxQ2FsbGVlKGxvY2tlciwgY29kZUJsb2NrLT5mdW5jdGlvbkluZGV4KCkpOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSk7CisKKyAgICAgICAgc2l6ZV90
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBjYWxsZWUtPm9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSA+PSBvc3JFbnRyeURhdGEudmFsdWVzLnNpemUoKSk7CiAgICAgICAgIHVpbnQ2NF90KiBidWZm
ZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICBXQVNN
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9z
ckVudHJ5RGF0YS5sb29wSW5kZXggPCBjYWxsZWUtPmxvb3BFbnRyeXBvaW50cygpLnNpemUoKSk7
CiAKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAwOwogICAgICAgICBmb3IgKFZpcnR1YWxSZWdp
c3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVmZmVyW2luZGV4
KytdID0gUkVBRChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FTTV9SRVRVUk5f
VFdPKGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICB9OworICAgICAgICBkYXRhTG9nTG4oIk9TUiBlbnRlcmluZyBpbnRvIEJCUSBB
aXIhIik7CisgICAgICAgIFdBU01fUkVUVVJOX1RXTyhidWZmZXIsIGNhbGxlZS0+bG9vcEVudHJ5
cG9pbnRzKClbb3NyRW50cnlEYXRhLmxvb3BJbmRleF0uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0aWVyVXBDb3VudGVyLmNoZWNrSWZPcHRpbWl6YXRp
b25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Cisg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIH0K
IAotICAgIGlmIChhdXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUo
aW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCkpKQotICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShv
c3JFbnRyeUNhbGxlZSk7CisgICAgICAgIGNvbnN0IGF1dG8gZG9PU1JFbnRyeSA9IFsmXShXYXNt
OjpPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChvc3JF
bnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgIT0gb3NyRW50cnlEYXRhLmxvb3BJbmRleCkKKyAgICAg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIHNpemVfdCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gb3NyRW50cnlDYWxsZWUtPm9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPT0gb3NyRW50cnlEYXRhLnZhbHVlcy5zaXplKCkpOwor
ICAgICAgICAgICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0
Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworICAgICAgICAgICAg
aWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51
bGxwdHIpOworCisgICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IDA7CisgICAgICAgICAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQorICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVnKS5lbmNvZGVkSlNWYWx1ZSgpOworCisg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVyLCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlw
b2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9OworCisgICAgICAgIGlmIChh
dXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUoaW5zdGFuY2UtPm1l
bW9yeSgpLT5tb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkob3NyRW50cnlD
YWxsZWUpOworCisgICAgICAgIGJvb2wgY29tcGlsZSA9IGZhbHNlOworICAgICAgICB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgdGllclVwQ291bnRlci5tX2xvY2sgfTsKKyAgICAgICAg
ICAgIHN3aXRjaCAodGllclVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cykgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVz
OjpOb3RDb21waWxlZDoKKyAgICAgICAgICAgICAgICBjb21waWxlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB0aWVyVXBDb3VudGVyLm1fbG9vcENvbXBpbGF0aW9uU3RhdHVzID0gV2FzbTo6TExJ
bnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsaW5nOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6
OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxpbmc6CisgICAgICAgICAgICAgICAgdGllclVwQ291
bnRlci5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6
OkNvbXBpbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAKLSAgICBib29sIGNvbXBpbGUgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyB0aWVyVXBDb3VudGVyLm1fbG9jayB9OwotICAgICAgICBzd2l0Y2ggKHRpZXJVcENv
dW50ZXIubV9sb29wQ29tcGlsYXRpb25TdGF0dXMpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpMTElu
dFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpOb3RDb21waWxlZDoKLSAgICAgICAg
ICAgIGNvbXBpbGUgPSB0cnVlOwotICAgICAgICAgICAgdGllclVwQ291bnRlci5tX2xvb3BDb21w
aWxhdGlvblN0YXR1cyA9IFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0
dXM6OkNvbXBpbGluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkxM
SW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzoKLSAgICAgICAg
ICAgIHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0
YXR1czo6Q29tcGlsZWQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGNvbXBpbGUp
IHsKKyAgICAgICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKnN0YXRpY19j
YXN0PFdhc206OlBsYW4qPihuZXcgV2FzbTo6T1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0
KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpDYWxs
ZWU+KCpjYWxsZWUpLCBjb2RlQmxvY2stPmZ1bmN0aW9uSW5kZXgoKSwgb3NyRW50cnlEYXRhLmxv
b3BJbmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5h
bGl6ZSgpKSkpOworICAgICAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBs
YW4uY29weVJlZigpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29u
Y3VycmVudEpJVCgpKSkKKyAgICAgICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1p
emVBZnRlcldhcm1VcCgpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNvbXBpbGUpIHsK
LSAgICAgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8V2Fz
bTo6UGxhbio+KG5ldyBXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQo
KSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkNhbGxl
ZT4oKmNhbGxlZSksIGNvZGVCbG9jay0+ZnVuY3Rpb25JbmRleCgpLCBvc3JFbnRyeURhdGEubG9v
cEluZGV4LCBpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFs
aXplKCkpKSk7Ci0gICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNv
cHlSZWYoKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJ
VCgpKSkKLSAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgpOworICAg
ICAgICBpZiAoYXV0byogb3NyRW50cnlDYWxsZWUgPSBjYWxsZWUtPm9zckVudHJ5Q2FsbGVlKGlu
c3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBkb09TUkVudHJ5
KG9zckVudHJ5Q2FsbGVlKTsKKworICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgfQogCi0gICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5v
c3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCi0gICAgICAgIHJldHVy
biBkb09TUkVudHJ5KG9zckVudHJ5Q2FsbGVlKTsKIAotICAgIFdBU01fUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChlcGlsb2d1ZV9vc3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OCw5ICsxNzgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4gY3JlYXRlCiAgICAgaml0LmVtaXRaZXJvVG9DYWxsRnJhbWVIZWFkZXIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRy
IGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OwogICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+
Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8
V2FzbUVudHJ5UHRyVGFnPj4qIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3Zl
TG9jYXRpb25zOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
V2FzbUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgICAgICBsaW5rZWRDYWxs
ZWVNb3ZlLT5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2Fs
bGVlTW92ZUxvY2F0aW9uKSk7CiAgICAgfSk7CiAKICAgICBjb25zdCBQaW5uZWRSZWdpc3Rlcklu
Zm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448356</attachid>
            <date>2022-01-04 17:53:58 -0800</date>
            <delta_ts>2022-01-07 18:38:58 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>46833</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2Rl
LmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgyLDE5ICs1ODIsMjIgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0
ZXJzOjpnZW5lcgogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCiAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wIHRtcCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2VkUmVn
aXN0ZXIodG1wLnJlZygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fbmFtZWRVc2VkUmVncy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
bmFtZWREZWZkUmVncy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworCiAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IGFy
Zy50bXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2Vk
UmVnaXN0ZXIodG1wLnJlZygpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9uYW1lZFVzZWRS
ZWdzLnNldCh0bXAucmVnKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURl
Zihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbmFtZWREZWZkUmVncy5zZXQodG1w
LnJlZygpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBXZSBjb252
ZXJ0IGFueSBjb2xkIHVzZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiB0aGUgc3RhY2sgdG8ganVzdCBw
b2ludCB0bwogICAgICAgICAgICAgICAgIC8vIHRoZSBjYW5vbmljYWwgc3RhY2sgbG9jYXRpb24u
CkBAIC02OTIsMzMgKzY5NSwyOCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6
OmdlbmVyCiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gcHJvdmlkaW5nIHRoYXQg
YXJnIGluIHN0YWNrIGZvcm0uIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBmdWxseSBhbGxvY2F0ZQog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGluc3Qgd2hlbiB3ZSByZXdpbmQuCiAgICAgICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZyhbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJh
bmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgVG1wIHRtcCA9IGFyZy50bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
bXAuaXNSZWcoKSAmJiBpc0Rpc2FsbG93ZWRSZWdpc3Rlcih0bXAucmVnKCkpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wIG9yaWdpbmFs
VG1wID0gYWxsb2NhdGlvblNuYXBzaG90W3RtcC5yZWcoKV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsVG1wLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRtcC5yZWcoKSA9PSBvcmlnaW5hbFRtcC5yZWcoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhpcyBJbnN0IHJlZmVy
cmVkIHRvIHRoaXMgcmVnIGRpcmVjdGx5LiBXZSBsZWF2ZSB0aGVzZSBhcyBpcy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBvcmlnaW5hbFRtcDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bnN0LmFkbWl0c1N0YWNrKGFyZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSB0bXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGluc3QuYWRtaXRzU3RhY2soYXJnKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBhcmcudG1wKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChSZWcgcmVnID0gZW50cnkucmVnKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KSwgZW50cnkuc3BpbGxTbG90LT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1w
RmFzdChbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rpc2FsbG93ZWRSZWdp
c3Rlcih0bXAucmVnKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAgb3JpZ2luYWxUbXAgPSBh
bGxvY2F0aW9uU25hcHNob3RbdG1wLnJlZygpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsVG1wLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCh0bXAucmVnKCkgPT0gb3JpZ2luYWxUbXAucmVnKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGlzIEluc3Qg
cmVmZXJyZWQgdG8gdGhpcyByZWcgZGlyZWN0bHkuIFdlIGxlYXZlIHRoZXNlIGFzIGlzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IG9yaWdpbmFsVG1wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9
IG1fbWFwW3RtcF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVnIHJlZyA9IGVudHJ5
LnJlZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpLCBlbnRyeS5zcGlsbFNsb3QtPm9mZnNldEZyb21GUCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICAgLS1pbnN0SW5kZXg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwK
ICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRp
ZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgQWlySVJHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJiwgdW5zaWduZWQmIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworICAgIHZvaWQgZmluYWxpemVFbnRyeXBvaW50cygpOwog
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExv
Y2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTc0OCw2ICs3NDksNyBAQCBwcml2YXRlOgogICAgIFZl
Y3Rvcjx1aW50MzJfdD4gbV9vdXRlckxvb3BzOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJs
b2NrIHsgbnVsbHB0ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9
OworICAgIEJhc2ljQmxvY2sqIG1fbWFpbkVudHJ5cG9pbnRTdGFydCB7IG51bGxwdHIgfTsKICAg
ICBWZWN0b3I8VHlwZWRUbXA+IG1fbG9jYWxzOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0
ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNo
ZWQgd2l0aC4KICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwpA
QCAtNzc0LDYgKzc3NiwxMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVu
Y3Rpb25zOwogCiAgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNocG9pbnRTcGVjaWFs
IHsgbnVsbHB0ciB9OworCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmVjdG9y
PFR5cGVkVG1wPj4+IG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhOworICAgIFJlZlB0cjxCMzo6QWly
OjpQcm9sb2d1ZUdlbmVyYXRvcj4gbV9wcm9sb2d1ZUdlbmVyYXRvcjsKKyAgICB1bnNpZ25lZCYg
bV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogfTsKIAogLy8gTWVtb3J5IGFjY2Vzc2VzIGlu
IFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhleSBo
YXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KQEAgLTgxOSw3ICs4MjUsNyBAQCB2b2lk
IEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJCiAgICAgZW1pdFBhdGNocG9pbnQo
YmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFpcklSR2VuZXJhdG9y
OjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9k
ZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJ
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgOiBtX2luZm8o
aW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9u
SW5kZXgpCkBAIC04MjgsNiArODM0LDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9y
KGNvbnN0IE1vZAogICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCiAgICAgLCBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogICAgICwgbV9udW1JbXBv
cnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCisgICAgLCBtX29zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKIHsKICAgICBtX2N1
cnJlbnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOwogICAgIG1fcm9vdEJsb2NrID0gbV9jdXJy
ZW50QmxvY2s7CkBAIC04NDcsMTEgKzg1NCw5IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVy
YXRvcihjb25zdCBNb2QKICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fYm91bmRzQ2hlY2tp
bmdTaXplR1BSKTsKICAgICB9CiAKLSAgICBtX2NvZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7Ci0K
ICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1sxXSA6IG1fd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUjsKIAotICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJv
bG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJh
dG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUp
IHsKKyAgICBtX3Byb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQ
cm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWly
OjpDb2RlJiBjb2RlKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xvZ3VlKGppdCk7
CiAKQEAgLTg1OSw3ICs4NjQsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kCiAgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1swXTsKICAgICAgICAgICAgIGF1dG8gbW92ZUxvY2F0
aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIGNhbGxlZUdQUik7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NvbXBpbGF0
aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgY29t
cGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbikpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
bnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKQEAgLTkwOCw4ICs5MTMsNiBAQCBB
aXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgICAgIH0KICAgICB9
KTsKIAotICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoMCwgV1RGTW92ZShwcm9s
b2d1ZUdlbmVyYXRvcikpOwotCiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAg
ICAgICBtX2luc3RhbmNlVmFsdWUgPSBnNjQoKTsKICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJl
IG5pY2UgdG8gb25seSBkbyB0aGlzIGlmIHdlIHVzZSBpbnN0YW5jZSB2YWx1ZS4KQEAgLTkyNCw2
ICs5MjcsMTAgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAg
ICAgICBtX2xvY2Fsc1tpXSA9IHRtcEZvclR5cGUodHlwZSk7CiAgICAgfQogCisgICAgYXBwZW5k
KEVudHJ5U3dpdGNoKTsKKyAgICBtX21haW5FbnRyeXBvaW50U3RhcnQgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fbWFpbkVudHJ5cG9pbnRTdGFydDsKKwogICAg
IENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5j
YWxsSW5mb3JtYXRpb25Gb3Ioc2lnbmF0dXJlLCBDYWxsUm9sZTo6Q2FsbGVlKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB3YXNtQ2FsbEluZm8ucGFyYW1zLnNpemUoKTsgKytpKSB7
CkBAIC05NTQsNiArOTYxLDkwIEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25z
dCBNb2QKICAgICBlbWl0RW50cnlUaWVyVXBDaGVjaygpOwogfQogCit2b2lkIEFpcklSR2VuZXJh
dG9yOjpmaW5hbGl6ZUVudHJ5cG9pbnRzKCkKK3sKKyAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50
cyA9IDEgKyBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YS5zaXplKCk7CisgICAgbV9wcm9jLnNldE51
bUVudHJ5cG9pbnRzKG51bUVudHJ5cG9pbnRzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtRW50cnlwb2ludHM7ICsraSkKKyAgICAgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50
cnlwb2ludChpLCBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+KCptX3Byb2xvZ3VlR2Vu
ZXJhdG9yKSk7CisKKyAgICBUbXAgaW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisKKyAgICBCYXNp
Y0Jsb2NrOjpTdWNjZXNzb3JMaXN0IHN1Y2Nlc3NvcnM7CisgICAgc3VjY2Vzc29ycy5hcHBlbmQo
bV9tYWluRW50cnlwb2ludFN0YXJ0KTsKKworICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSA9IDA7CisKKworICAgIGZvciAoYXV0byYgcGFpciA6IG1fbG9vcEVudHJ5VmFyaWFibGVEYXRh
KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcGFpci5maXJzdDsKKyAgICAgICAg
QmFzaWNCbG9jayogZW50cnkgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBlbnRyeTsKKyAgICAgICAgYXV0byYgdGVtcHMgPSBwYWlyLnNlY29uZDsKKworICAg
ICAgICBzdWNjZXNzb3JzLmFwcGVuZChlbnRyeSk7CisKKyAgICAgICAgbV9vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplID0gc3RkOjptYXgobV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odGVtcHMuc2l6ZSgpKSk7CisKKyAgICAgICAgVG1wIGJhc2VQdHIg
PSBUbXAoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGVtcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEIzOjpBaXI6Ok9wY29k
ZSBsb2FkT3A7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlczsKKyAgICAgICAgICAgIHN3aXRj
aCAodGVtcHNbaV0udHlwZSgpLmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okkz
MjoKKyAgICAgICAgICAgICAgICBsb2FkT3AgPSBNb3ZlMzI7CisgICAgICAgICAgICAgICAgYnl0
ZXMgPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlS2lu
ZDo6STY0OgorICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuY3JlZjoKKyAgICAgICAgICAg
IGNhc2UgVHlwZUtpbmQ6OlJlZjoKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJlZk51bGw6
CisgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgICAgICAgICAg
bG9hZE9wID0gTW92ZTsKKyAgICAgICAgICAgICAgICBieXRlcyA9IDg7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpGMzI6CisgICAgICAgICAgICAg
ICAgbG9hZE9wID0gTW92ZUZsb2F0OworICAgICAgICAgICAgICAgIGJ5dGVzID0gNDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkY2NDoKKyAgICAg
ICAgICAgICAgICBsb2FkT3AgPSBNb3ZlRG91YmxlOworICAgICAgICAgICAgICAgIGJ5dGVzID0g
ODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZv
aWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdWludDY0X3Qgb2Zmc2V0ID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGkpICogc2l6ZW9mKHVpbnQ2NF90KTsKKworICAgICAgICAgICAg
QXJnIGFkZHJBcmc7CisgICAgICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0
LCBCMzo6d2lkdGhGb3JCeXRlcyhieXRlcykpKQorICAgICAgICAgICAgICAgIGFkZHJBcmcgPSBB
cmc6OmFkZHIoYmFzZVB0ciwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGlmICghaW1tVG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGltbVRtcCA9IGc2NCgp
OworICAgICAgICAgICAgICAgICAgICBuZXdQdHIgPSBnNjQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRt
cCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIGJhc2VQdHIsIG5ld1B0
cik7CisgICAgICAgICAgICAgICAgYWRkckFyZyA9IEFyZzo6YWRkcihuZXdQdHIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBhcHBlbmQobG9hZE9wLCBhZGRyQXJnLCB0ZW1wc1tpXS50
bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGVudHJ5
LT5zZXRTdWNjZXNzb3JzKGxvb3BCb2R5KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChu
dW1FbnRyeXBvaW50cyA9PSBzdWNjZXNzb3JzLnNpemUoKSk7CisgICAgbV9yb290QmxvY2stPnN1
Y2Nlc3NvcnMoKSA9IHN1Y2Nlc3NvcnM7Cit9CisKIEIzOjpUeXBlIEFpcklSR2VuZXJhdG9yOjp0
b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKQogewogICAgIGlmIChyZXR1
cm5UeXBlLT5yZXR1cm5zVm9pZCgpKQpAQCAtMjk1NCwxMCArMzA0NSwzMCBAQCBBaXJJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChsb29wSW5kZXggPT0gbV9sb29w
RW50cnlWYXJpYWJsZURhdGEuc2l6ZSgpKTsKKwogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRk
QmxvY2soKTsKIAogICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3
U3RhY2spOworCisgICAgeworICAgICAgICBWZWN0b3I8VHlwZWRUbXA+IHZhcmlhYmxlczsKKyAg
ICAgICAgZm9yIChhdXRvIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgICAgICB2YXJpYWJsZXMu
YXBwZW5kKGxvY2FsKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7
IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJv
bEluZGV4KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBtX3BhcnNlci0+Y29u
dHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaykKKyAgICAg
ICAgICAgICAgICB2YXJpYWJsZXMuYXBwZW5kKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKGF1dG8gdmFyaWFibGUgOiBlbmNsb3NpbmdTdGFjaykKKyAgICAgICAgICAgIHZhcmlh
Ymxlcy5hcHBlbmQodmFyaWFibGUpOworICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBuZXdT
dGFjaykKKyAgICAgICAgICAgIHZhcmlhYmxlcy5hcHBlbmQodmFyaWFibGUpOworCisgICAgICAg
IG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhLmFwcGVuZChzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZl
Y3RvcjxUeXBlZFRtcD4+KGJvZHksIFdURk1vdmUodmFyaWFibGVzKSkpOworICAgIH0KKwogICAg
IFJlc3VsdExpc3QgcmVzdWx0czsKICAgICByZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bmV3U3RhY2suc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8gaXRlbSA6IG5ld1N0YWNrKQpAQCAtMzU5
NCw4ICszNzA1LDkgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpbwog
CiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29udGV4
dC5wcm9jZWR1cmUgPSBtYWtlVW5pcXVlPEIzOjpQcm9jZWR1cmU+KCk7CiAKLSAgICBCMzo6UHJv
Y2VkdXJlIHByb2NlZHVyZTsKKyAgICBhdXRvJiBwcm9jZWR1cmUgPSAqY29tcGlsYXRpb25Db250
ZXh0LnByb2NlZHVyZTsKICAgICBDb2RlJiBjb2RlID0gcHJvY2VkdXJlLmNvZGUoKTsKIAogICAg
IHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3Jp
Z2luIG9yaWdpbikgewpAQCAtMzYxMSwxMCArMzcyMywxMCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAgICAgCiAgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKE9w
dGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBBaXJJ
UkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0
dXJlKTsKKyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJl
c3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCwgc2lnbmF0dXJlLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwog
ICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1
bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZv
KTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKLQorICAg
IGlyR2VuZXJhdG9yLmZpbmFsaXplRW50cnlwb2ludHMoKTsKIAogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MDEsNyArNzAxLDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBN
b2R1bAogICAgIH0KIAogICAgIHsKLSAgICAgICAgYXV0byogY2FsbGVlTW92ZUxvY2F0aW9uID0g
JmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgICAgIGF1dG8qIGNhbGxlZU1v
dmVMb2NhdGlvbnMgPSAmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnM7CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVy
KSA8IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMsICJXZSByZWx5IG9u
IHRoaXMgaGVyZSBmb3Igbm93LiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0NvbnZlbnRpb246Omhl
YWRlclNpemVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6SW50NjQsIE9y
aWdpbigpKTsKQEAgLTcxMSw4ICs3MTEsOCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9y
KGNvbnN0IE1vZHVsCiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0ID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1v
dmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVM
b2NhdGlvbik7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9j
YXRpb25zLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxlZU1vdmVMb2NhdGlvbnMtPmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0pOwogCkBAIC0zMjQ3LDcgKzMyNDcsNyBAQCBzdGF0aWMgYm9vbCBz
aG91bGREdW1wSVJGb3IodWludDMyX3QgZnVuCiAgICAgcmV0dXJuIGR1bXBBbGxvd2xpc3QtPnNo
b3VsZER1bXBXYXNtRnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYg
ZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1v
ZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVy
VXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRp
b25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3Qg
bG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAgYXV0byBy
ZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTMyODQsNyArMzI4
NCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICAgICAg
PyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUIzT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6
IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lS
R2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29t
cGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVw
KTsKKyAgICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0
LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgcmVzdWx0LT5vc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRl
eEZvck9TUkVudHJ5LCB0aWVyVXApOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+
IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlKCkpOwogCkBAIC0zMzI5LDYgKzMzMjksOSBAQCB2b2lkIGNvbXB1dGVFeGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKFZlCiAgICAgaWYgKCFjb250ZXh0LnByb2NlZHVyZSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgaWYgKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9
IDA7CiAgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSBjb250ZXh0LnByb2NlZHVyZS0+bnVt
RW50cnlwb2ludHMoKTsKICAgICBmb3IgKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRs
ZXJJbmZvIDogZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4NzU4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7
CiAgICAgQm94PFBDVG9Db2RlT3JpZ2luTWFwPiBwY1RvQ29kZU9yaWdpbk1hcDsKIH07CiAKLUV4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3Qg
U2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5
TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBs
b29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVy
ZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7
CiAKIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2Nh
dGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVy
bmFsRnVuY3Rpb24qLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CiB2
b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVm
ZmVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE3ICs2MywyNiBAQCBib29sIEJCUVBsYW46
OnByZXBhcmVJbXBsKCkKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnM7CiAgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtSW50
ZXJuYWxGdW5jdGlvbnMsIGZ1bmN0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rpb25z
IikKICAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMs
IGZ1bmN0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4dHMiKQotICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdGllclVwQ291bnRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHRp
ZXItdXAgY291bnRzIikpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBD
b3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fYWxsTG9vcEVudHJ5cG9pbnRzLCBmdW5jdGlvbnMuc2l6ZSgp
LCAiIGxvb3AgZW50cnlwb2ludHMiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9j
b21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX3RpZXJV
cENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9hbGxMb29wRW50cnlwb2lu
dHMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0
YXRpYyB2b2lkIHNldExvb3BFbnRyeXBvaW50cyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBCMzo6
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQ
dHJUYWc+PiYgbG9jYXRpb25zKQoreworICAgIC8vIE9PUFM6IFRoaXMgZG9lc24ndCB3b3JrIHdp
dGggZXhjZXB0aW9ucy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvY2VkdXJlLm51
bUVudHJ5cG9pbnRzKCkgLSAxOyArK2kpCisgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQobGlua0J1
ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4ocHJvY2VkdXJlLmNvZGUoKS5lbnRyeXBv
aW50TGFiZWwoaSArIDEpKSk7Cit9CisKIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiB7CiAgICAgaWYgKCFtX2NhbGxlZUdyb3VwKSB7CkBAIC0xMjUsMTMgKzEz
NCwxNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsK
LSAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92
ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHRp
ZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpLCBXVEZNb3ZlKGZ1bmN0aW9u
LT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1v
dmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6
Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0g
QkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9u
SW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlv
bkluZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5l
eGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyksIGZ1
bmN0aW9uLT5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKKyAgICAgICAgZm9yIChhdXRvJiBt
b3ZlTG9jYXRpb24gOiBmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVu
dHJ5cG9pbnQoKTsKIAogICAgICAgICBpZiAoY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkKICAg
ICAgICAgICAgIENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5hZGRQQ1RvQ29kZU9yaWdpbk1h
cChjYWxsZWUucHRyKCksIFdURk1vdmUoY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkpOwogCisg
ICAgICAgIGlmIChjb250ZXh0LnByb2NlZHVyZSkKKyAgICAgICAgICAgIHNldExvb3BFbnRyeXBv
aW50cyhsaW5rQnVmZmVyLCAqY29udGV4dC5wcm9jZWR1cmUsIGNhbGxlZS0+bG9vcEVudHJ5cG9p
bnRzKCkpOworCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHB1Ymxpc2ggb3Vy
IGNhbGxlZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGxpbmsgb3VyIGNhbGxzaXRlcy4gVGhpcyBl
bmFibGVzIHVzIHRvIGVuc3VyZSB3ZQogICAgICAgICAvLyBhbHdheXMgY2FsbCB0aGUgZmFzdGVz
dCBjb2RlLiBBbnkgZnVuY3Rpb24gbGlua2VkIGFmdGVyIHVzIHdpbGwgc2VlIG91ciBuZXcgY29k
ZSBhbmQgdGhlIG5ldyBjYWxsc2l0ZXMsIHdoaWNoIHRoZXkKICAgICAgICAgLy8gd2lsbCB1cGRh
dGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVz
ZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKQEAgLTE5
NSwyMSArMjA4LDIzIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGEK
ICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5p
bXBvcnRGdW5jdGlvbkNvdW50KCkgKyBmdW5jdGlvbkluZGV4OwogICAgIEFTU0VSVF9VTlVTRUQo
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRl
eCk7CiAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplID0gMDsKLQogICAgIC8vIEZJWE1FOiBTb21lIHdlYnBhZ2VzIHVzZSB2ZXJ5IGxh
cmdlIFdhc20gbW9kdWxlLCBhbmQgaXQgZXhoYXVzdHMgYWxsIGV4ZWN1dGFibGUgbWVtb3J5IGlu
IEFSTTY0IGRldmljZXMgc2luY2UgdGhlIHNpemUgb2YgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9u
IGlzIG9ubHkgbGltaXRlZCB0byAxMjhNQi4KICAgICAvLyBUaGUgbG9uZyB0ZXJtIHNvbHV0aW9u
IHNob3VsZCBiZSB0byBpbnRyb2R1Y2UgYSBXYXNtIGludGVycHJldGVyLiBCdXQgYXMgYSBzaG9y
dCB0ZXJtIHNvbHV0aW9uLCB3ZSBpbnRyb2R1Y2UgaGV1cmlzdGljcyB0byBzd2l0Y2ggYmFjayB0
byBCQlEgQjMgYXQgdGhlIHNhY3JpZmljZSBvZiBzdGFydC11cCB0aW1lLAogICAgIC8vIGFzIEJC
USBBaXIgYmxvYXRzIHN1Y2ggbGVuZ3RoeSBXYXNtIGNvZGUgYW5kIHdpbGwgY29uc3VtZSBhIGxh
cmdlIGFtb3VudCBvZiBleGVjdXRhYmxlIG1lbW9yeS4KKworICAgIC8vIE9PUFMKICAgICBib29s
IGZvcmNlVXNpbmdCMyA9IGZhbHNlOworICAgIC8qCiAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2Vt
Ymx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0
aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAg
ICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKICAgICBlbHNlIGlmICghbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGZ1bmN0aW9uSW5k
ZXgpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogICAgIGVsc2UgaWYgKCFPcHRpb25z
Ojp3YXNtQkJRVXNlc0FpcigpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOworICAgICov
CiAKICAgICBpZiAoZm9yY2VVc2luZ0IzKQotICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbklu
ZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXApOworICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGls
YXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXApOwog
ICAgIGVsc2UKICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
QWlyKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJV
cCk7CiAKQEAgLTI0Niw2ICsyNjEsOSBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24oKQogCiAgICAgICAgICAgICBjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAoY29udGV4dCwg
bGlua0J1ZmZlcik7CiAKKyAgICAgICAgICAgIGlmIChjb250ZXh0LnByb2NlZHVyZSkKKyAgICAg
ICAgICAgICAgICBzZXRMb29wRW50cnlwb2ludHMobGlua0J1ZmZlciwgKmNvbnRleHQucHJvY2Vk
dXJlLCBtX2FsbExvb3BFbnRyeXBvaW50c1tmdW5jdGlvbkluZGV4XSk7CisKICAgICAgICAgICAg
IGZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlv
bj4oCiAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxh
dGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3Ry
aW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAog
ICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMp
KTsKQEAgLTI4NSwxMyArMzAzLDE4IEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMo
Y29uc3QgQ2EKICAgICAgICAgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlOwogICAgICAgICBpZiAoYXV0byBlbWJlZGRlclRvV2FzbUZ1bmN0
aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0
aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBFbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGVtYmVkZGVyVG9XYXNtRnVuY3Rp
b24tPmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcihlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20oZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxl
ZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWUuZ2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24q
IGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XS5nZXQoKTsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVu
Y3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsK
LSAgICAgICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6
OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNl
LCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFj
ZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1v
dmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RG
TW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFu
ZGxlcnMpLCBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0
aW9uSW5kZXhdKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBv
aW50Q2FsbGVlLnB0cigpKSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50
Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCks
IGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVu
Y3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxG
dW5jdGlvbkluZGV4XSksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVu
Y3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJMb2Nh
dGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIGZ1bmN0aW9uLT5vc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplKTsKKworICAgICAgICB3YXNtRW50cnlwb2ludENhbGxlZS0+bG9vcEVudHJ5cG9p
bnRzKCkgPSBXVEZNb3ZlKG1fYWxsTG9vcEVudHJ5cG9pbnRzW2ludGVybmFsRnVuY3Rpb25JbmRl
eF0pOworCisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZnVuY3Rpb24tPmNhbGxl
ZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVl
LnB0cigpKSk7CiAKICAgICAgICAgaWYgKG1fY29tcGlsYXRpb25Db250ZXh0c1tpbnRlcm5hbEZ1
bmN0aW9uSW5kZXhdLnBjVG9Db2RlT3JpZ2luTWFwKQogICAgICAgICAgICAgQ2FsbGVlUmVnaXN0
cnk6OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKHdhc21FbnRyeXBvaW50Q2FsbGVl
LnB0cigpLCBXVEZNb3ZlKG1fY29tcGlsYXRpb25Db250ZXh0c1tpbnRlcm5hbEZ1bmN0aW9uSW5k
ZXhdLnBjVG9Db2RlT3JpZ2luTWFwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmgJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHJp
dmF0ZToKICAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIERlZmF1bHRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAg
ICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGllclVwQ291bnRzOworICAg
IFZlY3RvcjxWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4+IG1fYWxs
TG9vcEVudHJ5cG9pbnRzOwogCiAgICAgUmVmUHRyPENhbGxlZUdyb3VwPiBtX2NhbGxlZUdyb3Vw
IHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTcyLDkgKzE3Miw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIEJCUUNhbGxlZSBmaW5hbCA6IHB1Ymxp
YyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxl
ZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVu
aXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0YWNrbWFwcywgVmVjdG9y
PFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9j
YXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zKQorICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0
aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxs
cywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBl
eGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBC
QlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1v
dmUodGllclVwQ291bnQpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFw
cyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3Vu
dCksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyksIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpKTsKICAgICB9CiAKICAgICBPU1JFbnRyeUNhbGxlZSog
b3NyRW50cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0x
OTQsMTcgKzE5NCwyNCBAQCBwdWJsaWM6CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQo
KSB7IHJldHVybiBtX3RpZXJVcENvdW50LmdldCgpOyB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0
aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4mIGxvb3BFbnRyeXBvaW50cygpIHsgcmV0dXJuIG1f
bG9vcEVudHJ5cG9pbnRzOyB9CisKKyAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9CisKIHBy
aXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXpl
X3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBu
YW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0YWNr
bWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKQorICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50
cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1l
U2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENv
dW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBTdGFj
a01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlv
bkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSkKICAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCiAg
ICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKKyAgICAgICAgLCBt
X29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAg
ICB7CiAgICAgfQogCiAgICAgUmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBtX29zckVudHJ5Q2FsbGVl
OwogICAgIFJlZlB0cjxPTUdDYWxsZWU+IG1fcmVwbGFjZW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFRpZXJVcENvdW50PiBtX3RpZXJVcENvdW50OworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+PiBtX2xvb3BFbnRyeXBvaW50czsKICAgICBib29sIG1fZGlk
U3RhcnRDb21waWxpbmdPU1JFbnRyeUNhbGxlZSB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV9v
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplIHsgMCB9OwogfTsKICNlbmRpZgogCkBAIC0yNjcsNyAr
Mjc0LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogICAgIEpJ
VENhbGxlZSogcmVwbGFjZW1lbnQoTWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX3JlcGxhY2Vt
ZW50c1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0uZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJl
cGxhY2VtZW50KFJlZjxKSVRDYWxsZWU+JiYgcmVwbGFjZW1lbnQsIE1lbW9yeU1vZGUgbW9kZSkK
KyAgICB2b2lkIHNldFJlcGxhY2VtZW50KFJlZjxPcHRpbWl6aW5nSklUQ2FsbGVlPiYmIHJlcGxh
Y2VtZW50LCBNZW1vcnlNb2RlIG1vZGUpCiAgICAgewogICAgICAgICBtX3JlcGxhY2VtZW50c1tz
dGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0gPSBXVEZNb3ZlKHJlcGxhY2VtZW50KTsKICAgICB9
CkBAIC0zMDIsNyArMzA5LDcgQEAgcHJpdmF0ZToKICAgICBGaXhlZFZlY3RvcjxKdW1wVGFibGU+
IG1fanVtcFRhYmxlczsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLSAgICBSZWZQ
dHI8SklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsK
KyAgICBSZWZQdHI8T3B0aW1pemluZ0pJVENhbGxlZT4gbV9yZXBsYWNlbWVudHNbV2FzbTo6TnVt
YmVyT2ZNZW1vcnlNb2Rlc107CiAgICAgUmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBtX29zckVudHJ5
Q2FsbGVlc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKICNlbmRpZgogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fZW50cnlwb2ludDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCShyZXZpc2lvbiAyODc1
ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEVudHJ5
UGxhbj4gbV9wbGFuOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5pc2hl
ZCB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworcHVibGljOgogICAgIExv
Y2sgbV9sb2NrOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsMTAgKzQ0MywxMSBAQCBzdHJ1Y3QgRW50
cnlwb2ludCB7CiAKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRy
eVB0clRhZz4gY2FsbGVlTW92ZUxvY2F0aW9uOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPj4gY2FsbGVlTW92ZUxvY2F0aW9uczsKICAgICBTdGFj
a01hcHMgc3RhY2ttYXBzOwogICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBleGNlcHRp
b25IYW5kbGVyczsKICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CisgICAgdW5zaWduZWQgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSB7IDAgfTsKIH07CiAKIC8vIFdlYkFzc2VtYmx5IGRpcmVj
dCBjYWxscyBhbmQgY2FsbF9pbmRpcmVjdCB1c2UgaW5kaWNlcyBpbnRvICJmdW5jdGlvbiBpbmRl
eCBzcGFjZSIuIFRoaXMgc3BhY2Ugc3RhcnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
OCw4ICsxNjgsOCBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigpCiAg
ICAgICAgICAgICBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjYWxsZWUgPSBFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7
CiAgICAgICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgcmVwYXRjaFBvaW50ZXIgLSBqdXN0
IHBhc3MgaW4gdGhlIGNhbGxlZSBkaXJlY3RseQogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24pCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2Nh
dGlvbiA6IGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJl
ZGRlckNhbGxlZXMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoY2FsbGVlKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjg3NTgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw5ICs3MSw4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogCiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+IHVubGlua2VkQ2FsbHM7Ci0gICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZTsKICAgICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0
dXJlLCB1bmxpbmtlZENhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5j
dGlvbkluZGV4LCBVSU5UMzJfTUFYKTsKKyAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENh
bGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6
T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYKTsKIAogICAgIGlmIChVTkxJS0VM
WSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9s
b2NrIH07CkBAIC0xMDUsNyArMTA0LDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9u
RWZmb3J0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9t
b2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOwogICAgICAgICBSZWY8T01HQ2FsbGVlPiBj
YWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlv
bkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rp
b25JbmRleFNwYWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1
bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhh
bmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIGZv
ciAoYXV0byYgbW92ZUxvY2F0aW9uIDogaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0
aW9ucykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9j
YXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIGVudHJ5
cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKIAogICAgICAgICBpZiAoY29udGV4dC5wY1Rv
Q29kZU9yaWdpbk1hcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JF
bnRyeVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PU1JFbnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCAr
NzYsNyBAQCB2b2lkIE9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9yCiAKICAgICBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gdW5saW5rZWRDYWxsczsKICAgICBDb21waWxh
dGlvbkNvbnRleHQgY29udGV4dDsKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplID0gMDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGls
ZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIHRhcmdl
dENvbXBpbGF0aW9uTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBtX2xvb3BJbmRleCk7CisgICAgYXV0
byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rp
b24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwg
bV9tb2RlLCB0YXJnZXRDb21waWxhdGlvbk1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5k
ZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKQEAgLTEwNCw5ICsxMDMsMTAgQEAgdm9pZCBP
U1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcgogICAgIG9tZ0VudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5j
YWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09
IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtb2RlKCkpKTsKLSAgICBSZWY8T1NSRW50cnlDYWxs
ZWU+IGNhbGxlZSA9IE9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUodGFyZ2V0Q29tcGlsYXRpb25Nb2Rl
LCBXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5m
b3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdU
Rk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0
aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
cykpOworICAgIFJlZjxPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT1NSRW50cnlDYWxsZWU6OmNy
ZWF0ZSh0YXJnZXRDb21waWxhdGlvbk1vZGUsIFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpLCBpbnRlcm5hbEZ1bmN0aW9uLT5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5h
bEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlv
bkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CiAgICAgewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+
Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwor
ICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGludGVybmFsRnVuY3Rpb24tPmNhbGxl
ZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogCiAg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdyb3VwLT5tX2xvY2sgfTsKICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCShyZXZpc2lv
biAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYzICsxODAsODkgQEAgV0FTTV9TTE9XX1BBVEhfREVD
TChsb29wX29zcikKIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNh
bGxlZSwgIjogRW50ZXJlZCBsb29wX29zciB3aXRoIHRpZXJVcENvdW50ZXIgPSAiLCBjYWxsZWUt
PnRpZXJVcENvdW50ZXIoKSk7CiAKLSAgICB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCA9IGNhbGxlZS0+Ynl0ZWNvZGVPZmZzZXQocGMpOwotICAgIGNvbnN0IGF1dG8mIG9zckVu
dHJ5RGF0YSA9IHRpZXJVcENvdW50ZXIub3NyRW50cnlEYXRhRm9yTG9vcChsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCk7Ci0KICAgICBpZiAoIXRpZXJVcENvdW50ZXIuY2hlY2tJZk9wdGltaXph
dGlvblRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAg
ICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgY29u
c3QgYXV0byBkb09TUkVudHJ5ID0gWyZdKFdhc206Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNh
bGxlZSkgewotICAgICAgICBpZiAob3NyRW50cnlDYWxsZWUtPmxvb3BJbmRleCgpICE9IG9zckVu
dHJ5RGF0YS5sb29wSW5kZXgpCisgICAgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZz
ZXQgPSBjYWxsZWUtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICBjb25zdCBhdXRvJiBvc3JFbnRy
eURhdGEgPSB0aWVyVXBDb3VudGVyLm9zckVudHJ5RGF0YUZvckxvb3AobG9vcE9TUkVudHJ5Qnl0
ZWNvZGVPZmZzZXQpOworCisgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgp
ICYmIGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLm1fZnVuY3Rpb25Eb2Vz
Tm90VXNlRXhjZXB0aW9ucy5xdWlja0dldChjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKSkpIHsKKyAg
ICAgICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhjYWxsZWUsIGluc3RhbmNlKSkK
ICAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKIAotICAgICAg
ICBzaXplX3Qgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IG9zckVudHJ5Q2FsbGVlLT5vc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUgPT0gb3NyRW50cnlEYXRhLnZhbHVlcy5zaXplKCkpOworICAgICAg
ICBXYXNtOjpCQlFDYWxsZWUqIGJicUNhbGxlZTsKKyAgICAgICAgeworICAgICAgICAgICAgTG9j
a2VyIGxvY2tlciB7IGluc3RhbmNlLT5jYWxsZWVHcm91cCgpLT5tX2xvY2sgfTsKKyAgICAgICAg
ICAgIGJicUNhbGxlZSA9IGluc3RhbmNlLT5jYWxsZWVHcm91cCgpLT5iYnFDYWxsZWUobG9ja2Vy
LCBjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKSk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYmJxQ2FsbGVlKTsKKworICAgICAgICBzaXplX3Qgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSA9IGJicUNhbGxlZS0+b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID49IG9zckVudHJ5RGF0YS52
YWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250
ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwog
ICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRy
LCBudWxscHRyKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlEYXRhLmxvb3BJbmRl
eCA8IGJicUNhbGxlZS0+bG9vcEVudHJ5cG9pbnRzKCkuc2l6ZSgpKTsKIAogICAgICAgICB1aW50
MzJfdCBpbmRleCA9IDA7CiAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA6IG9zckVu
dHJ5RGF0YS52YWx1ZXMpCiAgICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBSRUFEKHJlZyku
ZW5jb2RlZEpTVmFsdWUoKTsKIAotICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVyLCBvc3JF
bnRyeUNhbGxlZS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIH07Ci0K
LSAgICBpZiAoYXV0byogb3NyRW50cnlDYWxsZWUgPSBjYWxsZWUtPm9zckVudHJ5Q2FsbGVlKGlu
c3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKSkKLSAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkob3Ny
RW50cnlDYWxsZWUpOwotCi0gICAgYm9vbCBjb21waWxlID0gZmFsc2U7Ci0gICAgewotICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgdGllclVwQ291bnRlci5tX2xvY2sgfTsKLSAgICAgICAgc3dpdGNo
ICh0aWVyVXBDb3VudGVyLm1fbG9vcENvbXBpbGF0aW9uU3RhdHVzKSB7Ci0gICAgICAgIGNhc2Ug
V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Tm90Q29tcGlsZWQ6
Ci0gICAgICAgICAgICBjb21waWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIHRpZXJVcENvdW50ZXIu
bV9sb29wQ29tcGlsYXRpb25TdGF0dXMgPSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBp
bGF0aW9uU3RhdHVzOjpDb21waWxpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxpbmc6
Ci0gICAgICAgICAgICB0aWVyVXBDb3VudGVyLm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29t
cGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRh
dGFMb2dMbigiT1NSIGVudGVyaW5nIGludG8gQkJRIEFpciEiKTsKKyAgICAgICAgV0FTTV9SRVRV
Uk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEu
bG9vcEluZGV4XS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBj
b25zdCBhdXRvIGRvT1NSRW50cnkgPSBbJl0oV2FzbTo6T1NSRW50cnlDYWxsZWUqIG9zckVudHJ5
Q2FsbGVlKSB7CisgICAgICAgICAgICBpZiAob3NyRW50cnlDYWxsZWUtPmxvb3BJbmRleCgpICE9
IG9zckVudHJ5RGF0YS5sb29wSW5kZXgpCisgICAgICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdP
KG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgICAgICBzaXplX3Qgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSA9IG9zckVudHJ5Q2FsbGVlLT5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID09
IG9zckVudHJ5RGF0YS52YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBidWZm
ZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKTsKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAg
ICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICAgICAgdWlu
dDMyX3QgaW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnIDog
b3NyRW50cnlEYXRhLnZhbHVlcykKKyAgICAgICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBS
RUFEKHJlZykuZW5jb2RlZEpTVmFsdWUoKTsKKworICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdP
KGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoYXV0byogb3NyRW50cnlDYWxsZWUgPSBjYWxs
ZWUtPm9zckVudHJ5Q2FsbGVlKGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybiBkb09TUkVudHJ5KG9zckVudHJ5Q2FsbGVlKTsKKworICAgICAgICBib29sIGNv
bXBpbGUgPSBmYWxzZTsKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHRp
ZXJVcENvdW50ZXIubV9sb2NrIH07CisgICAgICAgICAgICBzd2l0Y2ggKHRpZXJVcENvdW50ZXIu
bV9sb29wQ29tcGlsYXRpb25TdGF0dXMpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6TExJbnRU
aWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Tm90Q29tcGlsZWQ6CisgICAgICAgICAg
ICAgICAgY29tcGlsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgdGllclVwQ291bnRlci5tX2xv
b3BDb21waWxhdGlvblN0YXR1cyA9IFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRp
b25TdGF0dXM6OkNvbXBpbGluZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGls
aW5nOgorICAgICAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRp
ZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChjb21w
aWxlKSB7Ci0gICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKnN0YXRpY19j
YXN0PFdhc206OlBsYW4qPihuZXcgV2FzbTo6T1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0
KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpDYWxs
ZWU+KCpjYWxsZWUpLCBjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKSwgb3NyRW50cnlEYXRhLmxvb3BJ
bmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5hbGl6
ZSgpKSkpOwotICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5
UmVmKCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQo
KSkpCi0gICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB0aWVyVXBDb3VudGVyLm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICB9
CisgICAgICAgIGlmIChjb21waWxlKSB7CisgICAgICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxh
biA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxXYXNtOjpQbGFuKj4obmV3IFdhc206Ok9TUkVudHJ5
UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9k
dWxlKCkpLCBSZWY8V2FzbTo6Q2FsbGVlPigqY2FsbGVlKSwgY2FsbGVlLT5mdW5jdGlvbkluZGV4
KCksIG9zckVudHJ5RGF0YS5sb29wSW5kZXgsIGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpLCBX
YXNtOjpQbGFuOjpkb250RmluYWxpemUoKSkpKTsKKyAgICAgICAgICAgIFdhc206OmVuc3VyZVdv
cmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCisgICAgICAgICAgICAgICAgcGxhbi0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0
aWVyVXBDb3VudGVyLm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCi0gICAgaWYg
KGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+
bWVtb3J5KCktPm1vZGUoKSkpCi0gICAgICAgIHJldHVybiBkb09TUkVudHJ5KG9zckVudHJ5Q2Fs
bGVlKTsKKyAgICAgICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRy
eUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZG9PU1JFbnRyeShvc3JFbnRyeUNhbGxlZSk7CiAKLSAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0
ciwgbnVsbHB0cik7CisgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsK
KyAgICB9CiB9CiAKIFdBU01fU0xPV19QQVRIX0RFQ0woZXBpbG9ndWVfb3NyKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjg3NTgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsOSArMTc4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGNyZWF0ZQogICAgIGppdC5lbWl0WmVyb1RvQ2FsbEZyYW1lSGVhZGVyKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVN
b3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBq
aXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHI8V2FzbUVudHJ5UHRyVGFnPiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1v
dmVMb2NhdGlvbjsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRy
eVB0clRhZz4+KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9u
czsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRy
eVB0clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKKyAgICAgICAgbGlua2VkQ2FsbGVlTW92ZS0+
YXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1vdmVM
b2NhdGlvbikpOwogICAgIH0pOwogCiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5u
ZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448657</attachid>
            <date>2022-01-07 18:38:58 -0800</date>
            <delta_ts>2022-01-07 19:04:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45463</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2Rl
LmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgyLDE5ICs1ODIsMjIgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0
ZXJzOjpnZW5lcgogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCiAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wIHRtcCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2VkUmVn
aXN0ZXIodG1wLnJlZygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fbmFtZWRVc2VkUmVncy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
bmFtZWREZWZkUmVncy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworCiAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IGFy
Zy50bXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2Vk
UmVnaXN0ZXIodG1wLnJlZygpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9uYW1lZFVzZWRS
ZWdzLnNldCh0bXAucmVnKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURl
Zihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbmFtZWREZWZkUmVncy5zZXQodG1w
LnJlZygpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBXZSBjb252
ZXJ0IGFueSBjb2xkIHVzZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiB0aGUgc3RhY2sgdG8ganVzdCBw
b2ludCB0bwogICAgICAgICAgICAgICAgIC8vIHRoZSBjYW5vbmljYWwgc3RhY2sgbG9jYXRpb24u
CkBAIC02OTQsMzMgKzY5NywyOCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6
OmdlbmVyCiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gcHJvdmlkaW5nIHRoYXQg
YXJnIGluIHN0YWNrIGZvcm0uIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBmdWxseSBhbGxvY2F0ZQog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGluc3Qgd2hlbiB3ZSByZXdpbmQuCiAgICAgICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZyhbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJh
bmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgVG1wIHRtcCA9IGFyZy50bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
bXAuaXNSZWcoKSAmJiBpc0Rpc2FsbG93ZWRSZWdpc3Rlcih0bXAucmVnKCkpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wIG9yaWdpbmFs
VG1wID0gYWxsb2NhdGlvblNuYXBzaG90W3RtcC5yZWcoKV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsVG1wLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRtcC5yZWcoKSA9PSBvcmlnaW5hbFRtcC5yZWcoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhpcyBJbnN0IHJlZmVy
cmVkIHRvIHRoaXMgcmVnIGRpcmVjdGx5LiBXZSBsZWF2ZSB0aGVzZSBhcyBpcy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBvcmlnaW5hbFRtcDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bnN0LmFkbWl0c1N0YWNrKGFyZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSB0bXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGluc3QuYWRtaXRzU3RhY2soYXJnKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBhcmcudG1wKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChSZWcgcmVnID0gZW50cnkucmVnKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KSwgZW50cnkuc3BpbGxTbG90LT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1w
RmFzdChbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rpc2FsbG93ZWRSZWdp
c3Rlcih0bXAucmVnKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAgb3JpZ2luYWxUbXAgPSBh
bGxvY2F0aW9uU25hcHNob3RbdG1wLnJlZygpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsVG1wLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCh0bXAucmVnKCkgPT0gb3JpZ2luYWxUbXAucmVnKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGlzIEluc3Qg
cmVmZXJyZWQgdG8gdGhpcyByZWcgZGlyZWN0bHkuIFdlIGxlYXZlIHRoZXNlIGFzIGlzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IG9yaWdpbmFsVG1wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9
IG1fbWFwW3RtcF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVnIHJlZyA9IGVudHJ5
LnJlZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpLCBlbnRyeS5zcGlsbFNsb3QtPm9mZnNldEZyb21GUCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICAgLS1pbnN0SW5kZXg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwK
ICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRp
ZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgQWlySVJHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJiwgdW5zaWduZWQmIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogCiAgICAgdm9pZCBmaW5hbGl6ZUVudHJ5cG9pbnRzKCk7
CiAKQEAgLTc4Myw3ICs3ODMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAg
dm9pZCBlbWl0TG9hZChUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVHlwZWRUbXAgcmVzdWx0KQor
ICAgIHZvaWQgZW1pdExvYWQoVG1wIGJhc2UsIHNpemVfdCBvZmZzZXQsIGNvbnN0IFR5cGVkVG1w
JiByZXN1bHQpCiAgICAgewogICAgICAgICBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1ZVR5cGUocmVz
dWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNlLCBvZmZzZXQsIHJlc3Vs
dC50bXAoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBl
bWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2
b2lkIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7Ci0gICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNr
KHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBjb25zdCBT
dGFjayYgbmV3U3RhY2spOworICAgIHZvaWQgZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBs
b29wSW5kZXgsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGxpdmVWYWx1ZXMpOwogCiAgICAgdm9p
ZCBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgRXhwcmVzc2lvblR5cGUgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CkBAIC04ODQsNiArODg0LDkgQEAgcHJpdmF0ZToK
ICAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07CiAgICAgU3RhY2tN
YXBzIG1fc3RhY2ttYXBzOwogICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2Vw
dGlvbkhhbmRsZXJzOworCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmVjdG9y
PFR5cGVkVG1wPj4+IG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhOworICAgIHVuc2lnbmVkJiBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiB9OwogCiAvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2Vi
QXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUg
c2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgpAQCAtOTI5LDcgKzkzMiw3IEBAIHZvaWQgQWly
SVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEkKICAgICBlbWl0UGF0Y2hwb2ludChibG9j
aywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFp
cklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1v
ZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKQorQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVy
bmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICA6IG1faW5mbyhpbmZv
KQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRl
eCkKQEAgLTkzOCw2ICs5NDEsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kCiAgICAgLCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKICAgICAsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiAgICAgLCBtX251bUltcG9ydEZ1
bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAsIG1fb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogewogICAgIG1fY3VycmVu
dEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CiAgICAgbV9yb290QmxvY2sgPSBtX2N1cnJlbnRC
bG9jazsKQEAgLTk2Nyw3ICs5NzEsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3Io
Y29uc3QgTW9kCiAgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1swXTsKICAgICAgICAgICAgIGF1dG8gbW92ZUxv
Y2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIGNhbGxlZUdQUik7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NvbXBp
bGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAg
Y29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRp
b25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbikpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKQEAgLTEwNzIsNyArMTA3Niw3
IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKIAogdm9pZCBBaXJJ
UkdlbmVyYXRvcjo6ZmluYWxpemVFbnRyeXBvaW50cygpCiB7Ci0gICAgdW5zaWduZWQgbnVtRW50
cnlwb2ludHMgPSAxICsgbV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBu
dW1FbnRyeXBvaW50cyA9IENoZWNrZWQ8dW5zaWduZWQ+KDEpICsgbV9jYXRjaEVudHJ5cG9pbnRz
LnNpemUoKSArIG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhLnNpemUoKTsKICAgICBtX3Byb2Muc2V0
TnVtRW50cnlwb2ludHMobnVtRW50cnlwb2ludHMpOwogICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZv
ckVudHJ5cG9pbnQoMCwgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1
ZUdlbmVyYXRvcikpOwogCkBAIC0xMDk1LDYgKzEwOTksMjUgQEAgdm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZmluYWxpemVFbnRyeXBvaW50cwogICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKG1fbWFpbkVudHJ5
cG9pbnRTdGFydCk7CiAgICAgc3VjY2Vzc29ycy5hcHBlbmRWZWN0b3IobV9jYXRjaEVudHJ5cG9p
bnRzKTsKIAorICAgIGZvciAoYXV0byYgcGFpciA6IG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhKSB7
CisgICAgICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcGFpci5maXJzdDsKKyAgICAgICAgQmFz
aWNCbG9jayogZW50cnkgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgc3VjY2Vzc29ycy5h
cHBlbmQoZW50cnkpOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGVudHJ5OworCisgICAgICAg
IGF1dG8mIHRlbXBzID0gcGFpci5zZWNvbmQ7CisgICAgICAgIG1fb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSA9IHN0ZDo6bWF4KG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHRlbXBzLnNpemUoKSkpOworICAgICAgICBUbXAgYmFzZVB0ciA9IFRtcChH
UFJJbmZvOjphcmd1bWVudEdQUjApOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dGVtcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGkpICogc2l6ZW9mKHVpbnQ2NF90KTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
KGJhc2VQdHIsIG9mZnNldCwgdGVtcHNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgYXBwZW5k
KEp1bXApOworICAgICAgICBlbnRyeS0+c2V0U3VjY2Vzc29ycyhsb29wQm9keSk7CisgICAgfQor
CiAgICAgUkVMRUFTRV9BU1NFUlQobnVtRW50cnlwb2ludHMgPT0gc3VjY2Vzc29ycy5zaXplKCkp
OwogICAgIG1fcm9vdEJsb2NrLT5zdWNjZXNzb3JzKCkgPSBzdWNjZXNzb3JzOwogfQpAQCAtMzAz
Myw3ICszMDU2LDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlYwog
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSwgY291bnRkb3duUHRyKTsKIH0KIAotdm9p
ZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgs
IGNvbnN0IFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgY29uc3QgU3RhY2smIG5ld1N0YWNrKQordm9p
ZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgs
IGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGxpdmVWYWx1ZXMpCiB7CiAgICAgdWludDMyX3Qgb3V0
ZXJMb29wSW5kZXggPSB0aGlzLT5vdXRlckxvb3BJbmRleCgpOwogICAgIG1fb3V0ZXJMb29wcy5h
cHBlbmQobG9vcEluZGV4KTsKQEAgLTMwNjIsMTQgKzMwODUsOCBAQCB2b2lkIEFpcklSR2VuZXJh
dG9yOjplbWl0TG9vcFRpZXJVcENoZWNrCiAKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBh
dGNoQXJnczsKICAgICBwYXRjaEFyZ3MuYXBwZW5kKGNvdW50ZG93blB0cik7Ci0KLSAgICBmb3JF
YWNoTGl2ZVZhbHVlKFsmXSAoVG1wIHRtcCkgewotICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENv
bnN0cmFpbmVkVG1wKHRtcCwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgfSk7Ci0gICAg
Zm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBlbmNsb3NpbmdTdGFjaykKLSAgICAgICAgcGF0
Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh2YWx1ZS52YWx1ZSgpLCBCMzo6VmFsdWVSZXA6
OkNvbGRBbnkpKTsKLSAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IG5ld1N0YWNrKQot
ICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLnZhbHVlKCksIEIz
OjpWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgIGZvciAoY29uc3QgVHlwZWRUbXAmIHRtcCA6IGxp
dmVWYWx1ZXMpCisgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodG1wLnRt
cCgpLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkpKTsKIAogICAgIFRpZXJVcENvdW50OjpUcmlnZ2Vy
UmVhc29uKiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV90aWVyVXAtPm9zckVudHJ5VHJpZ2dlcnMo
KS5sYXN0KCkpOwogICAgIHN0YXRpY19hc3NlcnQoIXN0YXRpY19jYXN0PHVpbnQ4X3Q+KFRpZXJV
cENvdW50OjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dlciksICJ0aGUgSklUIGNvZGUgYXNzdW1l
cyBub24temVybyBtZWFucyAnZW50ZXInIik7CkBAIC0zMTEwLDEwICszMTI3LDIyIEBAIEFpcklS
R2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXQKIAogYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFjayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRl
eCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFJFTEVBU0VfQVNTRVJUKGxvb3BJbmRleCA9PSBt
X2xvb3BFbnRyeVZhcmlhYmxlRGF0YS5zaXplKCkpOworCiAgICAgQmFzaWNCbG9jayogYm9keSA9
IG1fY29kZS5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29k
ZS5hZGRCbG9jaygpOwogCiAgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNr
LCBuZXdTdGFjayk7CisKKyAgICBWZWN0b3I8VHlwZWRUbXA+IGxpdmVWYWx1ZXM7CisgICAgZm9y
RWFjaExpdmVWYWx1ZShbJl0gKFR5cGVkVG1wIHRtcCkgeworICAgICAgICBsaXZlVmFsdWVzLmFw
cGVuZCh0bXApOworICAgIH0pOworICAgIGZvciAoYXV0byB2YXJpYWJsZSA6IGVuY2xvc2luZ1N0
YWNrKQorICAgICAgICBsaXZlVmFsdWVzLmFwcGVuZCh2YXJpYWJsZSk7CisgICAgZm9yIChhdXRv
IHZhcmlhYmxlIDogbmV3U3RhY2spCisgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKHZhcmlhYmxl
KTsKKwogICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAgICByZXN1bHRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobmV3U3RhY2suc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8gaXRlbSA6IG5ld1N0YWNr
KQpAQCAtMzEyNCw3ICszMTUzLDkgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9j
a1NpZ25hdAogICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOwogCiAgICAg
bV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIGVtaXRMb29wVGllclVwQ2hlY2sobG9vcEluZGV4
LCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIGVtaXRMb29wVGllclVwQ2hlY2sobG9v
cEluZGV4LCBsaXZlVmFsdWVzKTsKKworICAgIG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhLmFwcGVu
ZChzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+KGJvZHksIFdURk1vdmUo
bGl2ZVZhbHVlcykpKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0zODk5LDcgKzM5MzAsNyBA
QCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAgICAgCiAgICAgcHJv
Y2VkdXJlLnNldE9wdExldmVsKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyT3B0aW1pemF0aW9u
TGV2ZWwoKSk7CiAKLSAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1
cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9u
SW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlKTsKKyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRv
cihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlLCByZXN1bHQtPm9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBw
YXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNp
emUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlci5wYXJzZSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NzcsNyArNjc3LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bAog
ICAgIH0KIAogICAgIHsKLSAgICAgICAgYXV0byogY2FsbGVlTW92ZUxvY2F0aW9uID0gJmNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgICAgIGF1dG8qIGNhbGxlZU1vdmVMb2Nh
dGlvbnMgPSAmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnM7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSA8IFdh
c21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMsICJXZSByZWx5IG9uIHRoaXMg
aGVyZSBmb3Igbm93LiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNp
emVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6SW50NjQsIE9yaWdpbigp
KTsKQEAgLTY4Nyw4ICs2ODcsOCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsCiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0ID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb25z
LCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxlZU1vdmVMb2NhdGlvbnMtPmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCkBAIC0zMTM4LDcgKzMxMzgsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRE
dW1wSVJGb3IodWludDMyX3QgZnVuCiAgICAgcmV0dXJuIGR1bXBBbGxvd2xpc3QtPnNob3VsZER1
bXBXYXNtRnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRp
b25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rp
b24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlQjMoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1v
ZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29w
SW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMzE3NSw3ICszMTc1LDcg
QEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgICAgICA/IE9w
dGlvbnM6OndlYkFzc2VtYmx5QkJRQjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0
aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5l
cmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxh
dGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXApOwor
ICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0
KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9y
T1NSRW50cnksIHRpZXJVcCk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFy
c2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXpl
KCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZXIucGFyc2UoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5N
YXA+IHBjVG9Db2RlT3JpZ2luTWFwOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVy
VXBDb3VudCogPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCMyhDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBp
bGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9y
T1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwogCiB2b2lkIGNvbXB1dGVQQ1RvQ29k
ZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4Nzgw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsMTMgKzY0LDE1IEBAIGJvb2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQog
ICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9u
czsKICAgICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywg
ZnVuY3Rpb25zLnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQogICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUo
KSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNp
dHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkK
KyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25z
LnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNp
dHkobV9hbGxMb29wRW50cnlwb2ludHMsIGZ1bmN0aW9ucy5zaXplKCksICIgbG9vcCBlbnRyeXBv
aW50cyIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9leGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX2NvbXBpbGF0aW9uQ29udGV4
dHMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShm
dW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2FsbExvb3BFbnRyeXBvaW50cy5yZXNpemUoZnVuY3Rp
b25zLnNpemUoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTExMyw3ICsxMTUsOCBAQCB2
b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgfQogCiAgICAgVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zOwotICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIGZ1bmN0aW9uLmdldCgpLCBjb250ZXh0LCBsaW5rQnVm
ZmVyKTsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4gbG9v
cEVudHJ5cG9pbnRMb2NhdGlvbnM7CisgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJBbmRMb29w
RW50cnlwb2ludExvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBsb29wRW50cnlw
b2ludExvY2F0aW9ucywgZnVuY3Rpb24uZ2V0KCksIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCiAg
ICAgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFwKGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCkBAIC0x
MjYsOCArMTI5LDkgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgog
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
ICAgICB7Ci0gICAgICAgIFJlZjxCQlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRl
KFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RG
TW92ZSh0aWVyVXApLCBXVEZNb3ZlKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSwgV1RGTW92ZShm
dW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+IGNh
bGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBm
dW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQo
ZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh0aWVyVXApLCBXVEZNb3ZlKHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5j
dGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpLCBXVEZNb3ZlKGxvb3BFbnRyeXBvaW50TG9jYXRpb25zKSwgZnVuY3Rpb24tPm9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUpOworICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1
bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUu
cHRyKCkpKTsKICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAg
ICAgICAgIGlmIChjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQpAQCAtMTk2LDcgKzIwMCw2IEBA
IHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGEKICAgICB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNv
dW50KCkgKyBmdW5jdGlvbkluZGV4OwogICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CiAgICAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZVJlc3VsdDsKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gMDsK
IAogICAgIC8vIEZJWE1FOiBTb21lIHdlYnBhZ2VzIHVzZSB2ZXJ5IGxhcmdlIFdhc20gbW9kdWxl
LCBhbmQgaXQgZXhoYXVzdHMgYWxsIGV4ZWN1dGFibGUgbWVtb3J5IGluIEFSTTY0IGRldmljZXMg
c2luY2UgdGhlIHNpemUgb2YgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9uIGlzIG9ubHkgbGltaXRl
ZCB0byAxMjhNQi4KICAgICAvLyBUaGUgbG9uZyB0ZXJtIHNvbHV0aW9uIHNob3VsZCBiZSB0byBp
bnRyb2R1Y2UgYSBXYXNtIGludGVycHJldGVyLiBCdXQgYXMgYSBzaG9ydCB0ZXJtIHNvbHV0aW9u
LCB3ZSBpbnRyb2R1Y2UgaGV1cmlzdGljcyB0byBzd2l0Y2ggYmFjayB0byBCQlEgQjMgYXQgdGhl
IHNhY3JpZmljZSBvZiBzdGFydC11cCB0aW1lLApAQCAtMjA4LDcgKzIxMSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGEKICAgICAgICAgZm9yY2VVc2luZ0IzID0g
dHJ1ZTsKIAogICAgIGlmIChmb3JjZVVzaW5nQjMpCi0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0
aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CisgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZUIzKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUs
IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwgdGll
clVwKTsKICAgICBlbHNlCiAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5k
Q29tcGlsZUFpcihjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXApOwogCkBAIC0yNDEsNyArMjQ0LDcgQEAgdm9pZCBCQlFQbGFuOjpkaWRDb21wbGV0
ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKG1fZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIGNvbnRleHQsIGxpbmtC
dWZmZXIpOworICAgICAgICAgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJBbmRMb29wRW50cnlw
b2ludExvY2F0aW9ucyhtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0s
IG1fYWxsTG9vcEVudHJ5cG9pbnRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgY29udGV4dCwg
bGlua0J1ZmZlcik7CiAKICAgICAgICAgICAgIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250
ZXh0LCBsaW5rQnVmZmVyKTsKIApAQCAtMjg0LDEzICsyODcsMTYgQEAgdm9pZCBCQlFQbGFuOjpp
bml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYQogICAgICAgICBSZWZQdHI8RW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiAgICAgICAgIGlmIChhdXRvIGVt
YmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMu
Z2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1i
ZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZW1iZWRkZXJUb1dh
c21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAg
SW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRl
cm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNw
YWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0
RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBm
dW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQo
ZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0
aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2ludGVybmFsRnVu
Y3Rpb25JbmRleF0pLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0
aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxl
ZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0
aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9u
LT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBD
b3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2tt
YXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKG1fZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZSht
X2FsbExvb3BFbnRyeXBvaW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgZnVuY3Rpb24tPm9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworCisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0
aW9uIDogZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgaWYgKG1fY29tcGlsYXRp
b25Db250ZXh0c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLnBjVG9Db2RlT3JpZ2luTWFwKQogICAg
ICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFw
KHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpLCBXVEZNb3ZlKG1fY29tcGlsYXRpb25Db250ZXh0
c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLnBjVG9Db2RlT3JpZ2luTWFwKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgJKHJldmlzaW9uIDI4NzgwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIERlZmF1bHRIYXNoPHVpbnQzMl90PiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBp
bGF0aW9uQ29udGV4dHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+
IG1fdGllclVwQ291bnRzOworICAgIFZlY3RvcjxWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2Fz
bUVudHJ5UHRyVGFnPj4+IG1fYWxsTG9vcEVudHJ5cG9pbnRzOwogCiAgICAgUmVmUHRyPENhbGxl
ZUdyb3VwPiBtX2NhbGxlZUdyb3VwIHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fZnVuY3Rp
b25JbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJKHJl
dmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDkgKzE3Miw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIEJC
UUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0
aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFw
cyYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFu
ZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4m
JiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQorICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBj
cmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVl
X3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiYmIGxvb3BFbnRy
eXBvaW50cywgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBp
bmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5r
ZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyks
IFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RG
TW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKSwgV1RGTW92ZShsb29wRW50cnlwb2ludHMpLCBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplKSk7CiAgICAgfQogCiAgICAgT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlKCkgeyByZXR1cm4gbV9vc3JFbnRyeUNhbGxlZS5nZXQoKTsgfQpAQCAtMTk0LDE2
ICsxOTQsMjQgQEAgcHVibGljOgogCiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyBy
ZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsgfQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxh
YmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb29wRW50cnlwb2ludHMoKSB7IHJldHVybiBtX2xvb3BF
bnRyeXBvaW50czsgfQorCisgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsgfQorCiBwcml2YXRl
OgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwg
c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBTdGFja01hcHMmJiBzdGFja21hcHMs
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8
Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykKKyAgICBCQlFDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9p
bnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rp
b24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBz
JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5k
bGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYm
IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNt
RW50cnlQdHJUYWc+PiYmIGxvb3BFbnRyeXBvaW50cywgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSkKICAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCiAg
ICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKKyAgICAgICAgLCBt
X2xvb3BFbnRyeXBvaW50cyhXVEZNb3ZlKGxvb3BFbnRyeXBvaW50cykpCisgICAgICAgICwgbV9v
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAg
ewogICAgIH0KIAogICAgIFJlZlB0cjxPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsK
ICAgICBSZWZQdHI8T01HQ2FsbGVlPiBtX3JlcGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3VudDsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFi
ZWw8V2FzbUVudHJ5UHRyVGFnPj4gbV9sb29wRW50cnlwb2ludHM7CisgICAgdW5zaWduZWQgbV9v
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplIHsgMCB9OwogICAgIGJvb2wgbV9kaWRTdGFydENvbXBp
bGluZ09TUkVudHJ5Q2FsbGVlIHsgZmFsc2UgfTsKIH07CiAjZW5kaWYKQEAgLTI2Nyw3ICsyNzUs
NyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgSklUQ2Fs
bGVlKiByZXBsYWNlbWVudChNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fcmVwbGFjZW1lbnRz
W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UmVwbGFj
ZW1lbnQoUmVmPEpJVENhbGxlZT4mJiByZXBsYWNlbWVudCwgTWVtb3J5TW9kZSBtb2RlKQorICAg
IHZvaWQgc2V0UmVwbGFjZW1lbnQoUmVmPE9wdGltaXppbmdKSVRDYWxsZWU+JiYgcmVwbGFjZW1l
bnQsIE1lbW9yeU1vZGUgbW9kZSkKICAgICB7CiAgICAgICAgIG1fcmVwbGFjZW1lbnRzW3N0YXRp
Y19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IFdURk1vdmUocmVwbGFjZW1lbnQpOwogICAgIH0KQEAg
LTMwMiw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgIEZpeGVkVmVjdG9yPEp1bXBUYWJsZT4gbV9q
dW1wVGFibGVzOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotICAgIFJlZlB0cjxK
SVRDYWxsZWU+IG1fcmVwbGFjZW1lbnRzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOworICAg
IFJlZlB0cjxPcHRpbWl6aW5nSklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1iZXJP
Zk1lbW9yeU1vZGVzXTsKICAgICBSZWZQdHI8T1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxs
ZWVzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogI2VuZGlmCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9lbnRyeXBvaW50OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgJKHJldmlzaW9uIDI4NzgwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RW50cnlQbGFu
PiBtX3BsYW47CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsg
ZmFsc2UgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CitwdWJsaWM6CiAgICAgTG9jayBt
X2xvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CShyZXZpc2lvbiAyODc4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMCArNDQzLDExIEBAIHN0cnVjdCBFbnRyeXBv
aW50IHsKIAogc3RydWN0IEludGVybmFsRnVuY3Rpb24gewogICAgIFdURl9NQUtFX1NUUlVDVF9G
QVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRy
VGFnPiBjYWxsZWVNb3ZlTG9jYXRpb247CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjxXYXNtRW50cnlQdHJUYWc+PiBjYWxsZWVNb3ZlTG9jYXRpb25zOwogICAgIFN0YWNrTWFw
cyBzdGFja21hcHM7CiAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhh
bmRsZXJzOwogICAgIEVudHJ5cG9pbnQgZW50cnlwb2ludDsKKyAgICB1bnNpZ25lZCBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplIHsgMCB9OwogfTsKIAogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNh
bGxzIGFuZCBjYWxsX2luZGlyZWN0IHVzZSBpbmRpY2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNw
YWNlIi4gVGhpcyBzcGFjZSBzdGFydHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgJKHJldmlzaW9uIDI4NzgwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjMsMjQgKzYzLDM0IEBAIHN0cnVjdCBQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlIHsKIH07CiAKIAotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3Qg
Q29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorc3Rh
dGljIGlubGluZSB2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyQW5kTG9vcEVudHJ5cG9pbnRM
b2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
PiYgaGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiYg
bG9vcEVudHJ5cG9pbnRzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3Qg
Q29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewog
ICAgIGlmICghY29udGV4dC5wcm9jZWR1cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2ln
bmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7CisgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0g
MTsKICAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1F
bnRyeXBvaW50cygpOwogICAgIGZvciAoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxl
ckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZW50cnlwb2ludEluZGV4IDwgbnVtRW50cnlwb2ludHMpOwogICAgICAgICBpZiAoaGFu
ZGxlckluZm8ubV90eXBlID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSkgewogICAgICAgICAgICAg
aGFuZGxlcnMuYXBwZW5kKHsgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
Ci0gICAgICAgICsrZW50cnlwb2ludEluZGV4OworICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRy
eXBvaW50SW5kZXggPCBudW1FbnRyeXBvaW50cyk7CiAgICAgICAgIGhhbmRsZXJzLmFwcGVuZChs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29udGV4dC5wcm9j
ZWR1cmUtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSkpOworICAgICAg
ICArK2VudHJ5cG9pbnRJbmRleDsKICAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2lu
dEluZGV4ID09IG51bUVudHJ5cG9pbnRzIC0gMSk7CisKKyAgICBmb3IgKDsgZW50cnlwb2ludElu
ZGV4IDwgbnVtRW50cnlwb2ludHM7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICBsb29wRW50
cnlwb2ludHMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNv
bnRleHQucHJvY2VkdXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkp
KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZXJzLnNpemUoKSArIGxvb3BFbnRyeXBvaW50
cy5zaXplKCkgKyAxID09IG51bUVudHJ5cG9pbnRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0
aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKQoreworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50
cnlQdHJUYWc+PiBpZ25vcmVkOworICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyQW5kTG9vcEVu
dHJ5cG9pbnRMb2NhdGlvbnMoaGFuZGxlcnMsIGlnbm9yZWQsIGZ1bmN0aW9uLCBjb250ZXh0LCBs
aW5rQnVmZmVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVtaXRSZXRocm93SW1wbChDQ2Fs
bEhlbHBlcnMmIGppdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludFBsYW4uY3BwCShyZXZpc2lvbiAyODc4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBA
IHZvaWQgTExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgICAgIFJl
ZjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENh
bGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKICAgICAgICAgICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhpcyByZXBhdGNoUG9pbnRlciAtIGp1c3QgcGFzcyBpbiB0aGUg
Y2FsbGVlIGRpcmVjdGx5CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmNhbGxlZU1v
dmVMb2NhdGlvbikKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxs
ZWUucHRyKCkpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUu
cHRyKCkpKTsKIAogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5h
ZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShjYWxsZWUpKTsKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyODc4MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDkgKzcyLDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CiAKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gdW5saW5r
ZWRDYWxsczsKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIENv
bXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2Vk
Q2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIFVJ
TlQzMl9NQVgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21w
aWxlQjMoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1f
ZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5k
Q29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwpAQCAt
MTA2LDcgKzEwNSw4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxlLT5jYWxs
ZWVHcm91cEZvcihtb2RlKCkpKTsKICAgICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01H
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNl
LCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFj
ZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3Rh
Y2ttYXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdU
Rk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBD
YWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBmb3IgKGF1dG8mIG1v
dmVMb2NhdGlvbiA6IGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnMpCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBlbnRyeXBvaW50ID0gY2Fs
bGVlLT5lbnRyeXBvaW50KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQucGNUb0NvZGVPcmlnaW5N
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQ
bGFuLmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9TUkVudHJ5UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDcgQEAgdm9p
ZCBPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcgogCiAgICAgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0
IGNvbnRleHQ7Ci0gICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7Ci0g
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwg
ZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCB0YXJnZXRDb21waWxhdGlv
bk1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQjMoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25h
dHVyZSwgdW5saW5rZWRDYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCB0
YXJnZXRDb21waWxhdGlvbk1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwogCiAg
ICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIExvY2tl
ciBsb2NrZXIgeyBtX2xvY2sgfTsKQEAgLTEwNSw5ICsxMDQsMTAgQEAgdm9pZCBPU1JFbnRyeVBs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcgogICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzKTsKIAogICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxl
LT5jYWxsZWVHcm91cEZvcihtb2RlKCkpKTsKLSAgICBSZWY8T1NSRW50cnlDYWxsZWU+IGNhbGxl
ZSA9IE9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUodGFyZ2V0Q29tcGlsYXRpb25Nb2RlLCBXVEZNb3Zl
KG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50
ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNl
cHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOworICAg
IFJlZjxPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT1NSRW50cnlDYWxsZWU6OmNyZWF0ZSh0YXJn
ZXRDb21waWxhdGlvbk1vZGUsIFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBpbnRlcm5hbEZ1bmN0aW9uLT5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xv
b3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9u
LT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJz
KSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CiAgICAgewotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBm
b3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2Nh
dGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogCiAgICAgICAgIExv
Y2tlciBsb2NrZXIgeyBtX2NhbGxlZUdyb3VwLT5tX2xvY2sgfTsKICAgICAgICAgZm9yIChhdXRv
JiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODc4MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgwLDYzICsxODAsODkgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChsb29wX29z
cikKIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjog
RW50ZXJlZCBsb29wX29zciB3aXRoIHRpZXJVcENvdW50ZXIgPSAiLCBjYWxsZWUtPnRpZXJVcENv
dW50ZXIoKSk7CiAKLSAgICB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IGNh
bGxlZS0+Ynl0ZWNvZGVPZmZzZXQocGMpOwotICAgIGNvbnN0IGF1dG8mIG9zckVudHJ5RGF0YSA9
IHRpZXJVcENvdW50ZXIub3NyRW50cnlEYXRhRm9yTG9vcChsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCk7Ci0KICAgICBpZiAoIXRpZXJVcENvdW50ZXIuY2hlY2tJZk9wdGltaXphdGlvblRocmVz
aG9sZFJlYWNoZWQoKSkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICBXQVNN
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgY29uc3QgYXV0byBk
b09TUkVudHJ5ID0gWyZdKFdhc206Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSkgewot
ICAgICAgICBpZiAob3NyRW50cnlDYWxsZWUtPmxvb3BJbmRleCgpICE9IG9zckVudHJ5RGF0YS5s
b29wSW5kZXgpCisgICAgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBjYWxs
ZWUtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICBjb25zdCBhdXRvJiBvc3JFbnRyeURhdGEgPSB0
aWVyVXBDb3VudGVyLm9zckVudHJ5RGF0YUZvckxvb3AobG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZz
ZXQpOworCisgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKSB7CisgICAg
ICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY2FsbGVlLCBpbnN0YW5jZSkpCiAg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICAgICAg
c2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBvc3JFbnRyeUNhbGxlZS0+b3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplID09IG9zckVudHJ5RGF0YS52YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAg
V2FzbTo6QkJRQ2FsbGVlKiBiYnFDYWxsZWU7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tl
ciBsb2NrZXIgeyBpbnN0YW5jZS0+Y2FsbGVlR3JvdXAoKS0+bV9sb2NrIH07CisgICAgICAgICAg
ICBiYnFDYWxsZWUgPSBpbnN0YW5jZS0+Y2FsbGVlR3JvdXAoKS0+YmJxQ2FsbGVlKGxvY2tlciwg
Y2FsbGVlLT5mdW5jdGlvbkluZGV4KCkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGJicUNhbGxlZSk7CisKKyAgICAgICAgc2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUgPSBiYnFDYWxsZWUtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA+PSBvc3JFbnRyeURhdGEudmFs
dWVzLnNpemUoKSk7CiAgICAgICAgIHVpbnQ2NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4
dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKICAg
ICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwg
bnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5RGF0YS5sb29wSW5kZXgg
PCBiYnFDYWxsZWUtPmxvb3BFbnRyeXBvaW50cygpLnNpemUoKSk7CiAKICAgICAgICAgdWludDMy
X3QgaW5kZXggPSAwOwogICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRy
eURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gUkVBRChyZWcpLmVu
Y29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgb3NyRW50
cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB9OwotCi0g
ICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0
YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCi0gICAgICAgIHJldHVybiBkb09TUkVudHJ5KG9zckVu
dHJ5Q2FsbGVlKTsKLQotICAgIGJvb2wgY29tcGlsZSA9IGZhbHNlOwotICAgIHsKLSAgICAgICAg
TG9ja2VyIGxvY2tlciB7IHRpZXJVcENvdW50ZXIubV9sb2NrIH07Ci0gICAgICAgIHN3aXRjaCAo
dGllclVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cykgewotICAgICAgICBjYXNlIFdh
c206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6Ok5vdENvbXBpbGVkOgot
ICAgICAgICAgICAgY29tcGlsZSA9IHRydWU7Ci0gICAgICAgICAgICB0aWVyVXBDb3VudGVyLm1f
bG9vcENvbXBpbGF0aW9uU3RhdHVzID0gV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxh
dGlvblN0YXR1czo6Q29tcGlsaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsaW5nOgot
ICAgICAgICAgICAgdGllclVwQ291bnRlci5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBp
bGF0aW9uU3RhdHVzOjpDb21waWxlZDoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkYXRh
TG9nTG4oIk9TUiBlbnRlcmluZyBpbnRvIEJCUSBBaXIhIik7CisgICAgICAgIFdBU01fUkVUVVJO
X1RXTyhidWZmZXIsIGJicUNhbGxlZS0+bG9vcEVudHJ5cG9pbnRzKClbb3NyRW50cnlEYXRhLmxv
b3BJbmRleF0uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u
c3QgYXV0byBkb09TUkVudHJ5ID0gWyZdKFdhc206Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNh
bGxlZSkgeworICAgICAgICAgICAgaWYgKG9zckVudHJ5Q2FsbGVlLT5sb29wSW5kZXgoKSAhPSBv
c3JFbnRyeURhdGEubG9vcEluZGV4KQorICAgICAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhu
dWxscHRyLCBudWxscHRyKTsKKworICAgICAgICAgICAgc2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUgPSBvc3JFbnRyeUNhbGxlZS0+b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9PSBv
c3JFbnRyeURhdGEudmFsdWVzLnNpemUoKSk7CisgICAgICAgICAgICB1aW50NjRfdCogYnVmZmVy
ID0gaW5zdGFuY2UtPmNvbnRleHQoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUob3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgICAg
ICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIHVpbnQz
Ml90IGluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA6IG9z
ckVudHJ5RGF0YS52YWx1ZXMpCisgICAgICAgICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gUkVB
RChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CisKKyAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhi
dWZmZXIsIG9zckVudHJ5Q2FsbGVlLT5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVl
LT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gZG9PU1JFbnRyeShvc3JFbnRyeUNhbGxlZSk7CisKKyAgICAgICAgYm9vbCBjb21w
aWxlID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyB0aWVy
VXBDb3VudGVyLm1fbG9jayB9OworICAgICAgICAgICAgc3dpdGNoICh0aWVyVXBDb3VudGVyLm1f
bG9vcENvbXBpbGF0aW9uU3RhdHVzKSB7CisgICAgICAgICAgICBjYXNlIFdhc206OkxMSW50VGll
clVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6Ok5vdENvbXBpbGVkOgorICAgICAgICAgICAg
ICAgIGNvbXBpbGUgPSB0cnVlOworICAgICAgICAgICAgICAgIHRpZXJVcENvdW50ZXIubV9sb29w
Q29tcGlsYXRpb25TdGF0dXMgPSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9u
U3RhdHVzOjpDb21waWxpbmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGlu
ZzoKKyAgICAgICAgICAgICAgICB0aWVyVXBDb3VudGVyLm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVy
VXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoY29tcGls
ZSkgewotICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpzdGF0aWNfY2Fz
dDxXYXNtOjpQbGFuKj4obmV3IFdhc206Ok9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgp
LCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6Q2FsbGVl
PigqY2FsbGVlKSwgY2FsbGVlLT5mdW5jdGlvbkluZGV4KCksIG9zckVudHJ5RGF0YS5sb29wSW5k
ZXgsIGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUo
KSkpKTsKLSAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJl
ZigpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkp
KQotICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGllclVwQ291bnRlci5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgfQor
ICAgICAgICBpZiAoY29tcGlsZSkgeworICAgICAgICAgICAgUmVmPFdhc206OlBsYW4+IHBsYW4g
PSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8V2FzbTo6UGxhbio+KG5ldyBXYXNtOjpPU1JFbnRyeVBs
YW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVs
ZSgpKSwgUmVmPFdhc206OkNhbGxlZT4oKmNhbGxlZSksIGNhbGxlZS0+ZnVuY3Rpb25JbmRleCgp
LCBvc3JFbnRyeURhdGEubG9vcEluZGV4LCBpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSwgV2Fz
bTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKSk7CisgICAgICAgICAgICBXYXNtOjplbnN1cmVXb3Jr
bGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQorICAgICAgICAgICAgICAgIHBsYW4tPndh
aXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGll
clVwQ291bnRlci5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIH0KIAotICAgIGlmIChh
dXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUoaW5zdGFuY2UtPm1l
bW9yeSgpLT5tb2RlKCkpKQotICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShvc3JFbnRyeUNhbGxl
ZSk7CisgICAgICAgIGlmIChhdXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlD
YWxsZWUoaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGRv
T1NSRW50cnkob3NyRW50cnlDYWxsZWUpOwogCi0gICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIs
IG51bGxwdHIpOworICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7Cisg
ICAgfQogfQogCiBXQVNNX1NMT1dfUEFUSF9ERUNMKGVwaWxvZ3VlX29zcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJKHJldmlzaW9uIDI4NzgwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc4LDkgKzE3OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiBjcmVhdGUKICAgICBqaXQuZW1pdFplcm9Ub0NhbGxGcmFtZUhlYWRlcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spOwogICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92
ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PFdhc21FbnRyeVB0clRhZz4qIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3Zl
TG9jYXRpb247CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQ
dHJUYWc+PiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbnM7
CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQ
dHJUYWc+KGNhbGxlZU1vdmVMb2NhdGlvbik7CisgICAgICAgIGxpbmtlZENhbGxlZU1vdmUtPmFw
cGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9j
YXRpb24pKTsKICAgICB9KTsKIAogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVk
UmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448661</attachid>
            <date>2022-01-07 19:04:26 -0800</date>
            <delta_ts>2022-01-07 19:24:35 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45765</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2Rl
LmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgyLDE5ICs1ODIsMjIgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0
ZXJzOjpnZW5lcgogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCiAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wIHRtcCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2VkUmVn
aXN0ZXIodG1wLnJlZygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fbmFtZWRVc2VkUmVncy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
bmFtZWREZWZkUmVncy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworCiAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IGFy
Zy50bXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2Vk
UmVnaXN0ZXIodG1wLnJlZygpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9uYW1lZFVzZWRS
ZWdzLnNldCh0bXAucmVnKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURl
Zihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbmFtZWREZWZkUmVncy5zZXQodG1w
LnJlZygpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBXZSBjb252
ZXJ0IGFueSBjb2xkIHVzZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiB0aGUgc3RhY2sgdG8ganVzdCBw
b2ludCB0bwogICAgICAgICAgICAgICAgIC8vIHRoZSBjYW5vbmljYWwgc3RhY2sgbG9jYXRpb24u
CkBAIC02OTQsMzMgKzY5NywyOCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6
OmdlbmVyCiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gcHJvdmlkaW5nIHRoYXQg
YXJnIGluIHN0YWNrIGZvcm0uIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBmdWxseSBhbGxvY2F0ZQog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGluc3Qgd2hlbiB3ZSByZXdpbmQuCiAgICAgICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZyhbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJh
bmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgVG1wIHRtcCA9IGFyZy50bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
bXAuaXNSZWcoKSAmJiBpc0Rpc2FsbG93ZWRSZWdpc3Rlcih0bXAucmVnKCkpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wIG9yaWdpbmFs
VG1wID0gYWxsb2NhdGlvblNuYXBzaG90W3RtcC5yZWcoKV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsVG1wLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRtcC5yZWcoKSA9PSBvcmlnaW5hbFRtcC5yZWcoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhpcyBJbnN0IHJlZmVy
cmVkIHRvIHRoaXMgcmVnIGRpcmVjdGx5LiBXZSBsZWF2ZSB0aGVzZSBhcyBpcy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBvcmlnaW5hbFRtcDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bnN0LmFkbWl0c1N0YWNrKGFyZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSB0bXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGluc3QuYWRtaXRzU3RhY2soYXJnKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBhcmcudG1wKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChSZWcgcmVnID0gZW50cnkucmVnKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KSwgZW50cnkuc3BpbGxTbG90LT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1w
RmFzdChbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rpc2FsbG93ZWRSZWdp
c3Rlcih0bXAucmVnKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAgb3JpZ2luYWxUbXAgPSBh
bGxvY2F0aW9uU25hcHNob3RbdG1wLnJlZygpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsVG1wLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCh0bXAucmVnKCkgPT0gb3JpZ2luYWxUbXAucmVnKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGlzIEluc3Qg
cmVmZXJyZWQgdG8gdGhpcyByZWcgZGlyZWN0bHkuIFdlIGxlYXZlIHRoZXNlIGFzIGlzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IG9yaWdpbmFsVG1wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9
IG1fbWFwW3RtcF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVnIHJlZyA9IGVudHJ5
LnJlZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpLCBlbnRyeS5zcGlsbFNsb3QtPm9mZnNldEZyb21GUCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICAgLS1pbnN0SW5kZXg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwK
ICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRp
ZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgQWlySVJHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJiwgdW5zaWduZWQmIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogCiAgICAgdm9pZCBmaW5hbGl6ZUVudHJ5cG9pbnRzKCk7
CiAKQEAgLTc4Myw3ICs3ODMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAg
dm9pZCBlbWl0TG9hZChUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVHlwZWRUbXAgcmVzdWx0KQor
ICAgIHZvaWQgZW1pdExvYWQoVG1wIGJhc2UsIHNpemVfdCBvZmZzZXQsIGNvbnN0IFR5cGVkVG1w
JiByZXN1bHQpCiAgICAgewogICAgICAgICBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1ZVR5cGUocmVz
dWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNlLCBvZmZzZXQsIHJlc3Vs
dC50bXAoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBl
bWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2
b2lkIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7Ci0gICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNr
KHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBjb25zdCBT
dGFjayYgbmV3U3RhY2spOworICAgIHZvaWQgZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBs
b29wSW5kZXgsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGxpdmVWYWx1ZXMpOwogCiAgICAgdm9p
ZCBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgRXhwcmVzc2lvblR5cGUgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CkBAIC04ODQsNiArODg0LDkgQEAgcHJpdmF0ZToK
ICAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07CiAgICAgU3RhY2tN
YXBzIG1fc3RhY2ttYXBzOwogICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2Vw
dGlvbkhhbmRsZXJzOworCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmVjdG9y
PFR5cGVkVG1wPj4+IG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhOworICAgIHVuc2lnbmVkJiBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiB9OwogCiAvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2Vi
QXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUg
c2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgpAQCAtOTI5LDcgKzkzMiw3IEBAIHZvaWQgQWly
SVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEkKICAgICBlbWl0UGF0Y2hwb2ludChibG9j
aywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFp
cklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1v
ZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKQorQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVy
bmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICA6IG1faW5mbyhpbmZv
KQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRl
eCkKQEAgLTkzOCw2ICs5NDEsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kCiAgICAgLCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKICAgICAsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiAgICAgLCBtX251bUltcG9ydEZ1
bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAsIG1fb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogewogICAgIG1fY3VycmVu
dEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CiAgICAgbV9yb290QmxvY2sgPSBtX2N1cnJlbnRC
bG9jazsKQEAgLTk2Nyw3ICs5NzEsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3Io
Y29uc3QgTW9kCiAgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1swXTsKICAgICAgICAgICAgIGF1dG8gbW92ZUxv
Y2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIGNhbGxlZUdQUik7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NvbXBp
bGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAg
Y29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRp
b25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbikpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKQEAgLTEwNzIsOSArMTA3Niwx
MSBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAKIHZvaWQgQWly
SVJHZW5lcmF0b3I6OmZpbmFsaXplRW50cnlwb2ludHMoKQogewotICAgIHVuc2lnbmVkIG51bUVu
dHJ5cG9pbnRzID0gMSArIG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCk7CisgICAgdW5zaWduZWQg
bnVtRW50cnlwb2ludHMgPSBDaGVja2VkPHVuc2lnbmVkPigxKSArIG1fY2F0Y2hFbnRyeXBvaW50
cy5zaXplKCkgKyBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YS5zaXplKCk7CiAgICAgbV9wcm9jLnNl
dE51bUVudHJ5cG9pbnRzKG51bUVudHJ5cG9pbnRzKTsKICAgICBtX2NvZGUuc2V0UHJvbG9ndWVG
b3JFbnRyeXBvaW50KDAsIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4oKm1fcHJvbG9n
dWVHZW5lcmF0b3IpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbV9jYXRjaEVudHJ5cG9p
bnRzLnNpemUoKTsgaSA8IG51bUVudHJ5cG9pbnRzOyArK2kpCisgICAgICAgIG1fY29kZS5zZXRQ
cm9sb2d1ZUZvckVudHJ5cG9pbnQoaSwgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigq
bV9wcm9sb2d1ZUdlbmVyYXRvcikpOwogCiAgICAgaWYgKG1fY2F0Y2hFbnRyeXBvaW50cy5zaXpl
KCkpIHsKICAgICAgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBjYXRjaFByb2xv
Z3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRv
ckZ1bmN0aW9uPihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2Rl
KSB7CkBAIC0xMDk1LDYgKzExMDEsMjUgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZmluYWxpemVF
bnRyeXBvaW50cwogICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKG1fbWFpbkVudHJ5cG9pbnRTdGFydCk7
CiAgICAgc3VjY2Vzc29ycy5hcHBlbmRWZWN0b3IobV9jYXRjaEVudHJ5cG9pbnRzKTsKIAorICAg
IGZvciAoYXV0byYgcGFpciA6IG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhKSB7CisgICAgICAgIEJh
c2ljQmxvY2sqIGxvb3BCb2R5ID0gcGFpci5maXJzdDsKKyAgICAgICAgQmFzaWNCbG9jayogZW50
cnkgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgc3VjY2Vzc29ycy5hcHBlbmQoZW50cnkp
OworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGVudHJ5OworCisgICAgICAgIGF1dG8mIHRlbXBz
ID0gcGFpci5zZWNvbmQ7CisgICAgICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IHN0
ZDo6bWF4KG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHRlbXBzLnNpemUoKSkpOworICAgICAgICBUbXAgYmFzZVB0ciA9IFRtcChHUFJJbmZvOjphcmd1
bWVudEdQUjApOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGVtcHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KGkpICogc2l6ZW9mKHVpbnQ2NF90KTsKKyAgICAgICAgICAgIGVtaXRMb2FkKGJhc2VQdHIsIG9m
ZnNldCwgdGVtcHNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kKEp1bXApOworICAg
ICAgICBlbnRyeS0+c2V0U3VjY2Vzc29ycyhsb29wQm9keSk7CisgICAgfQorCiAgICAgUkVMRUFT
RV9BU1NFUlQobnVtRW50cnlwb2ludHMgPT0gc3VjY2Vzc29ycy5zaXplKCkpOwogICAgIG1fcm9v
dEJsb2NrLT5zdWNjZXNzb3JzKCkgPSBzdWNjZXNzb3JzOwogfQpAQCAtMzAzMyw3ICszMDU4LDcg
QEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlYwogICAgIGVtaXRQYXRj
aHBvaW50KHBhdGNoLCBUbXAoKSwgY291bnRkb3duUHRyKTsKIH0KIAotdm9pZCBBaXJJUkdlbmVy
YXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgY29uc3QgU3RhY2smIG5ld1N0YWNrKQordm9pZCBBaXJJUkdlbmVy
YXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIGxpdmVWYWx1ZXMpCiB7CiAgICAgdWludDMyX3Qgb3V0ZXJMb29wSW5kZXgg
PSB0aGlzLT5vdXRlckxvb3BJbmRleCgpOwogICAgIG1fb3V0ZXJMb29wcy5hcHBlbmQobG9vcElu
ZGV4KTsKQEAgLTMwNjIsMTQgKzMwODcsOCBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9v
cFRpZXJVcENoZWNrCiAKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKICAg
ICBwYXRjaEFyZ3MuYXBwZW5kKGNvdW50ZG93blB0cik7Ci0KLSAgICBmb3JFYWNoTGl2ZVZhbHVl
KFsmXSAoVG1wIHRtcCkgewotICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1w
KHRtcCwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgfSk7Ci0gICAgZm9yIChUeXBlZEV4
cHJlc3Npb24gdmFsdWUgOiBlbmNsb3NpbmdTdGFjaykKLSAgICAgICAgcGF0Y2hBcmdzLmFwcGVu
ZChDb25zdHJhaW5lZFRtcCh2YWx1ZS52YWx1ZSgpLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkpKTsK
LSAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IG5ld1N0YWNrKQotICAgICAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLnZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6
Q29sZEFueSkpOworICAgIGZvciAoY29uc3QgVHlwZWRUbXAmIHRtcCA6IGxpdmVWYWx1ZXMpCisg
ICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodG1wLnRtcCgpLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKIAogICAgIFRpZXJVcENvdW50OjpUcmlnZ2VyUmVhc29uKiBmb3Jj
ZUVudHJ5VHJpZ2dlciA9ICYobV90aWVyVXAtPm9zckVudHJ5VHJpZ2dlcnMoKS5sYXN0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQoIXN0YXRpY19jYXN0PHVpbnQ4X3Q+KFRpZXJVcENvdW50OjpUcmln
Z2VyUmVhc29uOjpEb250VHJpZ2dlciksICJ0aGUgSklUIGNvZGUgYXNzdW1lcyBub24temVybyBt
ZWFucyAnZW50ZXInIik7CkBAIC0zMTEwLDEwICszMTI5LDIyIEBAIEFpcklSR2VuZXJhdG9yOjpD
b250cm9sRGF0YSBBaXJJUkdlbmVyYXQKIAogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5
cGUmIGJsb2NrLCBTdGFjayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCkgLT4gUGFydGlh
bFJlc3VsdAogeworICAgIFJFTEVBU0VfQVNTRVJUKGxvb3BJbmRleCA9PSBtX2xvb3BFbnRyeVZh
cmlhYmxlRGF0YS5zaXplKCkpOworCiAgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5hZGRC
bG9jaygpOwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygp
OwogCiAgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7
CisKKyAgICBWZWN0b3I8VHlwZWRUbXA+IGxpdmVWYWx1ZXM7CisgICAgZm9yRWFjaExpdmVWYWx1
ZShbJl0gKFR5cGVkVG1wIHRtcCkgeworICAgICAgICBsaXZlVmFsdWVzLmFwcGVuZCh0bXApOwor
ICAgIH0pOworICAgIGZvciAoYXV0byB2YXJpYWJsZSA6IGVuY2xvc2luZ1N0YWNrKQorICAgICAg
ICBsaXZlVmFsdWVzLmFwcGVuZCh2YXJpYWJsZSk7CisgICAgZm9yIChhdXRvIHZhcmlhYmxlIDog
bmV3U3RhY2spCisgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKHZhcmlhYmxlKTsKKwogICAgIFJl
c3VsdExpc3QgcmVzdWx0czsKICAgICByZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV3
U3RhY2suc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8gaXRlbSA6IG5ld1N0YWNrKQpAQCAtMzEyNCw3
ICszMTU1LDkgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdAogICAg
IG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOwogCiAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBib2R5OwotICAgIGVtaXRMb29wVGllclVwQ2hlY2sobG9vcEluZGV4LCBlbmNsb3NpbmdT
dGFjaywgbmV3U3RhY2spOworICAgIGVtaXRMb29wVGllclVwQ2hlY2sobG9vcEluZGV4LCBsaXZl
VmFsdWVzKTsKKworICAgIG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhLmFwcGVuZChzdGQ6OnBhaXI8
QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+KGJvZHksIFdURk1vdmUobGl2ZVZhbHVlcykp
KTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0zODk5LDcgKzM5MzIsNyBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAgICAgCiAgICAgcHJvY2VkdXJlLnNldE9w
dExldmVsKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAK
LSAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJV
cCwgc2lnbmF0dXJlKTsKKyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9j
ZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0
aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5l
cmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0
dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgp
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzcsNyArNjc3LDcg
QEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bAogICAgIH0KIAogICAg
IHsKLSAgICAgICAgYXV0byogY2FsbGVlTW92ZUxvY2F0aW9uID0gJmNvbXBpbGF0aW9uLT5jYWxs
ZWVNb3ZlTG9jYXRpb247CisgICAgICAgIGF1dG8qIGNhbGxlZU1vdmVMb2NhdGlvbnMgPSAmY29t
cGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnM7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSA8IFdhc21DYWxsaW5nQ29u
dmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93
LiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVv
ZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzLCAi
V2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgQjM6OlBhdGNocG9pbnRW
YWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6
OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6SW50NjQsIE9yaWdpbigpKTsKQEAgLTY4Nyw4
ICs2ODcsOCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsCiAgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcGFy
YW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQ
dHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFtjYWxsZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7CisgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb25zLCBtb3ZlTG9jYXRp
b25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZU1vdmVMb2NhdGlvbnMtPmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRy
VGFnPihtb3ZlTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0p
OwogCkBAIC0zMTM4LDcgKzMxMzgsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wSVJGb3IodWlu
dDMyX3QgZnVuCiAgICAgcmV0dXJuIGR1bXBBbGxvd2xpc3QtPnNob3VsZER1bXBXYXNtRnVuY3Rp
b24oZnVuY3Rpb25JbmRleCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRp
b25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3Qg
bG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0
YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRp
b25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JF
bnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlx
dWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMzE3NSw3ICszMTc1LDcgQEAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgICAgICA/IE9wdGlvbnM6OndlYkFz
c2VtYmx5QkJRQjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNz
ZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5l
cmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1
bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXApOworICAgIEIzSVJHZW5l
cmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUs
IGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRp
ZXJVcCk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJh
dG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVy
ZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3Qg
Q29tcGlsYXRpb25Db250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5NYXA+IHBjVG9Db2Rl
T3JpZ2luTWFwOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBG
dW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBu
dWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGVCMyhDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlv
bkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRp
ZXJVcENvdW50KiA9IG51bGxwdHIpOwogCiB2b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChD
b21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsMTMgKzY0LDE1IEBAIGJvb2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQogICAgIGNvbnN0IGF1
dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBpZiAo
IXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25zLnNp
emUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQogICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNh
cGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxh
dGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBD
b3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAgfHwg
IXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0
aWVyLXVwIGNvdW50cyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9hbGxMb29w
RW50cnlwb2ludHMsIGZ1bmN0aW9ucy5zaXplKCksICIgbG9vcCBlbnRyeXBvaW50cyIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXplKGZ1
bmN0aW9ucy5zaXplKCkpOwogICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6
ZSgpKTsKKyAgICBtX2FsbExvb3BFbnRyeXBvaW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTExMyw3ICsxMTUsOCBAQCB2b2lkIEJCUVBsYW46
OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgfQogCiAgICAgVmVjdG9yPENvZGVMb2Nh
dGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zOwotICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMsIGZ1bmN0aW9uLmdldCgpLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKyAgICBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4gbG9vcEVudHJ5cG9pbnRM
b2NhdGlvbnM7CisgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJBbmRMb29wRW50cnlwb2ludExv
Y2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBsb29wRW50cnlwb2ludExvY2F0aW9u
cywgZnVuY3Rpb24uZ2V0KCksIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCiAgICAgY29tcHV0ZVBD
VG9Db2RlT3JpZ2luTWFwKGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCkBAIC0xMjYsOCArMTI5LDkg
QEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICB7Ci0gICAg
ICAgIFJlZjxCQlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVu
Y3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRp
b24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh0aWVyVXAp
LCBXVEZNb3ZlKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSwgV1RGTW92ZShmdW5jdGlvbi0+c3Rh
Y2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdh
c20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNh
bGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4
U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRl
eFNwYWNlKSwgV1RGTW92ZSh0aWVyVXApLCBXVEZNb3ZlKHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
KSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0
aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpLCBXVEZNb3Zl
KGxvb3BFbnRyeXBvaW50TG9jYXRpb25zKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUpOworICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1bmN0aW9uLT5jYWxs
ZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAg
ICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQpAQCAtMTk2LDcgKzIwMCw2IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGEKICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
U3BhY2UgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCkgKyBmdW5j
dGlvbkluZGV4OwogICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CiAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsK
LSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gMDsKIAogICAgIC8vIEZJ
WE1FOiBTb21lIHdlYnBhZ2VzIHVzZSB2ZXJ5IGxhcmdlIFdhc20gbW9kdWxlLCBhbmQgaXQgZXho
YXVzdHMgYWxsIGV4ZWN1dGFibGUgbWVtb3J5IGluIEFSTTY0IGRldmljZXMgc2luY2UgdGhlIHNp
emUgb2YgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9uIGlzIG9ubHkgbGltaXRlZCB0byAxMjhNQi4K
ICAgICAvLyBUaGUgbG9uZyB0ZXJtIHNvbHV0aW9uIHNob3VsZCBiZSB0byBpbnRyb2R1Y2UgYSBX
YXNtIGludGVycHJldGVyLiBCdXQgYXMgYSBzaG9ydCB0ZXJtIHNvbHV0aW9uLCB3ZSBpbnRyb2R1
Y2UgaGV1cmlzdGljcyB0byBzd2l0Y2ggYmFjayB0byBCQlEgQjMgYXQgdGhlIHNhY3JpZmljZSBv
ZiBzdGFydC11cCB0aW1lLApAQCAtMjA4LDcgKzIxMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiBCQlFQbGEKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKIAogICAg
IGlmIChmb3JjZVVzaW5nQjMpCi0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5n
ZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJ
TlQzMl9NQVgsIHRpZXJVcCk7CisgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZUIzKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwKTsKICAgICBl
bHNlCiAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihj
b250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOwog
CkBAIC0yNDEsNyArMjQ0LDcgQEAgdm9pZCBCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9u
KCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9uc1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOworICAg
ICAgICAgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJBbmRMb29wRW50cnlwb2ludExvY2F0aW9u
cyhtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIG1fYWxsTG9vcEVu
dHJ5cG9pbnRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7
CiAKICAgICAgICAgICAgIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0LCBsaW5rQnVm
ZmVyKTsKIApAQCAtMjg0LDEzICsyODcsMTYgQEAgdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyhjb25zdCBDYQogICAgICAgICBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiAgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNt
RnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFs
RnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9
IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21G
dW5jdGlvbi0+ZW50cnlwb2ludCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2Fs
bGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+
Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50
cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5j
dGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9u
SW5kZXhdLmdldCgpOwogICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJu
YWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3Vu
dCgpOwotICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNh
bGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4
U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRl
eFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwg
V1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0p
LCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRp
b25IYW5kbGVycyksIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2ludGVybmFs
RnVuY3Rpb25JbmRleF0pKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVu
dHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5
cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBv
aW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlv
bi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRl
cm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92
ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX2FsbExvb3BFbnRy
eXBvaW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUpOworCisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBv
aW50Q2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgaWYgKG1fY29tcGlsYXRpb25Db250ZXh0c1tp
bnRlcm5hbEZ1bmN0aW9uSW5kZXhdLnBjVG9Db2RlT3JpZ2luTWFwKQogICAgICAgICAgICAgQ2Fs
bGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKHdhc21FbnRyeXBv
aW50Q2FsbGVlLnB0cigpLCBXVEZNb3ZlKG1fY29tcGlsYXRpb25Db250ZXh0c1tpbnRlcm5hbEZ1
bmN0aW9uSW5kZXhdLnBjVG9Db2RlT3JpZ2luTWFwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmgJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIERlZmF1bHRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0
aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4
dHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGllclVwQ291
bnRzOworICAgIFZlY3RvcjxWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFn
Pj4+IG1fYWxsTG9vcEVudHJ5cG9pbnRzOwogCiAgICAgUmVmUHRyPENhbGxlZUdyb3VwPiBtX2Nh
bGxlZUdyb3VwIHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJKHJldmlzaW9uIDI4Nzgw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTcyLDkgKzE3Miw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIEJCUUNhbGxlZSBmaW5h
bCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0YWNrbWFw
cywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3Rv
cjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zKQorICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBD
b3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5s
aW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVy
SW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiYmIGxvb3BFbnRyeXBvaW50cywgdW5z
aWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEJCUUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92
ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdU
Rk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
QkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21h
cHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKSwgV1RGTW92ZShsb29wRW50cnlwb2ludHMpLCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplKSk7CiAgICAgfQogCiAgICAgT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlKCkg
eyByZXR1cm4gbV9vc3JFbnRyeUNhbGxlZS5nZXQoKTsgfQpAQCAtMTk0LDE2ICsxOTQsMjQgQEAg
cHVibGljOgogCiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVy
VXBDb3VudC5nZXQoKTsgfQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRy
eVB0clRhZz4+JiBsb29wRW50cnlwb2ludHMoKSB7IHJldHVybiBtX2xvb3BFbnRyeXBvaW50czsg
fQorCisgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsgfQorCiBwcml2YXRlOgotICAgIEJCUUNh
bGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBh
aXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVf
cHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mJiB1bmxpbmtlZENhbGxzLCBTdGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxp
bmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9u
TGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
cykKKyAgICBCQlFDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBp
bmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUs
IHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBz
LCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9y
PENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+
PiYmIGxvb3BFbnRyeXBvaW50cywgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkK
ICAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJR
TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUo
dW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5k
bGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCiAgICAgICAgICwgbV90
aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKKyAgICAgICAgLCBtX2xvb3BFbnRyeXBv
aW50cyhXVEZNb3ZlKGxvb3BFbnRyeXBvaW50cykpCisgICAgICAgICwgbV9vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgewogICAgIH0KIAog
ICAgIFJlZlB0cjxPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAgICBSZWZQdHI8
T01HQ2FsbGVlPiBtX3JlcGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3Vu
dD4gbV90aWVyVXBDb3VudDsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5
UHRyVGFnPj4gbV9sb29wRW50cnlwb2ludHM7CisgICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplIHsgMCB9OwogICAgIGJvb2wgbV9kaWRTdGFydENvbXBpbGluZ09TUkVudHJ5
Q2FsbGVlIHsgZmFsc2UgfTsKIH07CiAjZW5kaWYKQEAgLTI2Nyw3ICsyNzUsNyBAQCBwdWJsaWM6
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgSklUQ2FsbGVlKiByZXBsYWNl
bWVudChNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fcmVwbGFjZW1lbnRzW3N0YXRpY19jYXN0
PHVpbnQ4X3Q+KG1vZGUpXS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UmVwbGFjZW1lbnQoUmVmPEpJ
VENhbGxlZT4mJiByZXBsYWNlbWVudCwgTWVtb3J5TW9kZSBtb2RlKQorICAgIHZvaWQgc2V0UmVw
bGFjZW1lbnQoUmVmPE9wdGltaXppbmdKSVRDYWxsZWU+JiYgcmVwbGFjZW1lbnQsIE1lbW9yeU1v
ZGUgbW9kZSkKICAgICB7CiAgICAgICAgIG1fcmVwbGFjZW1lbnRzW3N0YXRpY19jYXN0PHVpbnQ4
X3Q+KG1vZGUpXSA9IFdURk1vdmUocmVwbGFjZW1lbnQpOwogICAgIH0KQEAgLTMwMiw3ICszMTAs
NyBAQCBwcml2YXRlOgogICAgIEZpeGVkVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVzOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotICAgIFJlZlB0cjxKSVRDYWxsZWU+IG1f
cmVwbGFjZW1lbnRzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOworICAgIFJlZlB0cjxPcHRp
bWl6aW5nSklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVz
XTsKICAgICBSZWZQdHI8T1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxsZWVzW1dhc206Ok51
bWJlck9mTWVtb3J5TW9kZXNdOwogI2VuZGlmCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gbV9lbnRyeXBvaW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxlZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODMsNiArMTgzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RW50cnlQbGFuPiBtX3BsYW47CiAg
ICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKICAg
ICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CitwdWJsaWM6CiAgICAgTG9jayBtX2xvY2s7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAy
ODc4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0MywxMCArNDQzLDExIEBAIHN0cnVjdCBFbnRyeXBvaW50IHsKIAogc3Ry
dWN0IEludGVybmFsRnVuY3Rpb24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRF
RDsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiBjYWxsZWVN
b3ZlTG9jYXRpb247CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50
cnlQdHJUYWc+PiBjYWxsZWVNb3ZlTG9jYXRpb25zOwogICAgIFN0YWNrTWFwcyBzdGFja21hcHM7
CiAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRsZXJzOwogICAg
IEVudHJ5cG9pbnQgZW50cnlwb2ludDsKKyAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplIHsgMCB9OwogfTsKIAogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxs
X2luZGlyZWN0IHVzZSBpbmRpY2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBz
cGFjZSBzdGFydHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JUkdlbmVy
YXRvckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMjQgKzYzLDMyIEBAIHN0cnVjdCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHsKIH07
CiAKIAotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25z
KFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRs
ZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25D
b250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorc3RhdGljIGlubGluZSB2
b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyQW5kTG9vcEVudHJ5cG9pbnRMb2NhdGlvbnMoVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMs
IFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiYgbG9vcEVudHJ5cG9p
bnRzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25D
b250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewogICAgIGlmICghY29u
dGV4dC5wcm9jZWR1cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIGVudHJ5cG9p
bnRJbmRleCA9IDA7CisgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMTsKICAgICB1bnNp
Z25lZCBudW1FbnRyeXBvaW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygp
OwogICAgIGZvciAoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5j
dGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlw
b2ludEluZGV4IDwgbnVtRW50cnlwb2ludHMpOwogICAgICAgICBpZiAoaGFuZGxlckluZm8ubV90
eXBlID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSkgewogICAgICAgICAgICAgaGFuZGxlcnMuYXBw
ZW5kKHsgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgICsr
ZW50cnlwb2ludEluZGV4OworICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXgg
PCBudW1FbnRyeXBvaW50cyk7CiAgICAgICAgIGhhbmRsZXJzLmFwcGVuZChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29udGV4dC5wcm9jZWR1cmUtPmNvZGUo
KS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSkpOworICAgICAgICArK2VudHJ5cG9p
bnRJbmRleDsKICAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4ID09IG51
bUVudHJ5cG9pbnRzIC0gMSk7CisKKyAgICBmb3IgKDsgZW50cnlwb2ludEluZGV4IDwgbnVtRW50
cnlwb2ludHM7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICBsb29wRW50cnlwb2ludHMuYXBw
ZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNvbnRleHQucHJvY2Vk
dXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkpKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25z
dCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBj
b250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiBpZ25vcmVkOworICAgIGNvbXB1dGVFeGNlcHRpb25I
YW5kbGVyQW5kTG9vcEVudHJ5cG9pbnRMb2NhdGlvbnMoaGFuZGxlcnMsIGlnbm9yZWQsIGZ1bmN0
aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVtaXRS
ZXRocm93SW1wbChDQ2FsbEhlbHBlcnMmIGppdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCShyZXZpc2lvbiAyODc4MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY4LDggKzE2OCw4IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkK
ICAgICAgICAgICAgIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNhbGxlZSA9IEVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQp
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyByZXBhdGNoUG9pbnRlciAtIGp1
c3QgcGFzcyBpbiB0aGUgY2FsbGVlIGRpcmVjdGx5CiAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICBpZiAoZnVu
Y3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbikKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0
czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbW92ZUxv
Y2F0aW9uIDogZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6
Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2Vt
YmVkZGVyQ2FsbGVlcy5hZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShjYWxsZWUpKTsKICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyODc4
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDkgKzcyLDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9u
RWZmb3J0KQogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4gdW5saW5rZWRDYWxsczsKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIGF1dG8gcGFyc2VB
bmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWdu
YXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1
bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlQjMoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5r
ZWRDYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1v
ZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAgICBpZiAoVU5M
SUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fbG9jayB9OwpAQCAtMTA2LDcgKzEwNSw4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxh
dGlvbkVmZm9ydCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09
IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtb2RlKCkpKTsKICAgICAgICAgUmVmPE9NR0NhbGxl
ZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJu
YWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRp
b25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVl
TW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAg
ICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVM
b2NhdGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBl
bnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQu
cGNUb0NvZGVPcmlnaW5NYXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T1NSRW50cnlQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT1NSRW50cnlQbGFuLmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDggKzc3LDcgQEAgdm9pZCBPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcgogCiAg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgQ29t
cGlsYXRpb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSA9IDA7Ci0gICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENv
bXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCB0
YXJnZXRDb21waWxhdGlvbk1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOworICAg
IGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQjMoY29udGV4dCwg
ZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5n
ZXQoKSwgbV9tb2RlLCB0YXJnZXRDb21waWxhdGlvbk1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9s
b29wSW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7
CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKQEAgLTEwNSw5ICsxMDQsMTAgQEAg
dm9pZCBPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcgogICAgIG9tZ0VudHJ5cG9p
bnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0
cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtb2RlKCkpKTsKLSAgICBSZWY8T1NSRW50
cnlDYWxsZWU+IGNhbGxlZSA9IE9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUodGFyZ2V0Q29tcGlsYXRp
b25Nb2RlLCBXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxs
cyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShpbnRlcm5h
bEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucykpOworICAgIFJlZjxPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT1NSRW50cnlDYWxs
ZWU6OmNyZWF0ZSh0YXJnZXRDb21waWxhdGlvbk1vZGUsIFdURk1vdmUob21nRW50cnlwb2ludCks
IGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpLCBpbnRlcm5hbEZ1bmN0aW9uLT5vc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShp
bnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4
Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CiAg
ICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIo
KSkpOworICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGludGVybmFsRnVuY3Rpb24t
PmNhbGxlZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkp
OwogCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdyb3VwLT5tX2xvY2sgfTsKICAg
ICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyODc4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYzICsxODAsODkgQEAgV0FTTV9TTE9XX1BB
VEhfREVDTChsb29wX29zcikKIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgKmNhbGxlZSwgIjogRW50ZXJlZCBsb29wX29zciB3aXRoIHRpZXJVcENvdW50ZXIgPSAiLCBj
YWxsZWUtPnRpZXJVcENvdW50ZXIoKSk7CiAKLSAgICB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IGNhbGxlZS0+Ynl0ZWNvZGVPZmZzZXQocGMpOwotICAgIGNvbnN0IGF1dG8m
IG9zckVudHJ5RGF0YSA9IHRpZXJVcENvdW50ZXIub3NyRW50cnlEYXRhRm9yTG9vcChsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCk7Ci0KICAgICBpZiAoIXRpZXJVcENvdW50ZXIuY2hlY2tJZk9w
dGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIp
OwogICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogCi0g
ICAgY29uc3QgYXV0byBkb09TUkVudHJ5ID0gWyZdKFdhc206Ok9TUkVudHJ5Q2FsbGVlKiBvc3JF
bnRyeUNhbGxlZSkgewotICAgICAgICBpZiAob3NyRW50cnlDYWxsZWUtPmxvb3BJbmRleCgpICE9
IG9zckVudHJ5RGF0YS5sb29wSW5kZXgpCisgICAgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQgPSBjYWxsZWUtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICBjb25zdCBhdXRvJiBv
c3JFbnRyeURhdGEgPSB0aWVyVXBDb3VudGVyLm9zckVudHJ5RGF0YUZvckxvb3AobG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVPZmZzZXQpOworCisgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBU
b0JCUSgpKSB7CisgICAgICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY2FsbGVl
LCBpbnN0YW5jZSkpCiAgICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0
cik7CiAKLSAgICAgICAgc2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBvc3JFbnRy
eUNhbGxlZS0+b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID09IG9zckVudHJ5RGF0YS52YWx1ZXMuc2l6
ZSgpKTsKKyAgICAgICAgV2FzbTo6QkJRQ2FsbGVlKiBiYnFDYWxsZWU7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBpbnN0YW5jZS0+Y2FsbGVlR3JvdXAoKS0+bV9sb2Nr
IH07CisgICAgICAgICAgICBiYnFDYWxsZWUgPSBpbnN0YW5jZS0+Y2FsbGVlR3JvdXAoKS0+YmJx
Q2FsbGVlKGxvY2tlciwgY2FsbGVlLT5mdW5jdGlvbkluZGV4KCkpOworICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGJicUNhbGxlZSk7CisKKyAgICAgICAgc2l6ZV90IG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUgPSBiYnFDYWxsZWUtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUo
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA+PSBv
c3JFbnRyeURhdGEudmFsdWVzLnNpemUoKSk7CiAgICAgICAgIHVpbnQ2NF90KiBidWZmZXIgPSBp
bnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplKTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICBXQVNNX1JFVFVS
Tl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5
RGF0YS5sb29wSW5kZXggPCBiYnFDYWxsZWUtPmxvb3BFbnRyeXBvaW50cygpLnNpemUoKSk7CiAK
ICAgICAgICAgdWludDMyX3QgaW5kZXggPSAwOwogICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3Rl
ciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVmZmVyW2luZGV4Kytd
ID0gUkVBRChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FTTV9SRVRVUk5fVFdP
KGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKLSAgICB9OwotCi0gICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JF
bnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCi0gICAgICAgIHJldHVybiBk
b09TUkVudHJ5KG9zckVudHJ5Q2FsbGVlKTsKLQotICAgIGJvb2wgY29tcGlsZSA9IGZhbHNlOwot
ICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IHRpZXJVcENvdW50ZXIubV9sb2NrIH07Ci0g
ICAgICAgIHN3aXRjaCAodGllclVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cykgewot
ICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6
Ok5vdENvbXBpbGVkOgotICAgICAgICAgICAgY29tcGlsZSA9IHRydWU7Ci0gICAgICAgICAgICB0
aWVyVXBDb3VudGVyLm1fbG9vcENvbXBpbGF0aW9uU3RhdHVzID0gV2FzbTo6TExJbnRUaWVyVXBD
b3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsaW5nOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsaW5nOgotICAgICAgICAgICAgdGllclVwQ291bnRlci5vcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJV
cENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDoKLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAvL2RhdGFMb2dMbigiT1NSIGVudGVyaW5nIGludG8gQkJRIEFpciEiKTsKKyAg
ICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVlLT5sb29wRW50cnlwb2ludHMo
KVtvc3JFbnRyeURhdGEubG9vcEluZGV4XS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBjb25zdCBhdXRvIGRvT1NSRW50cnkgPSBbJl0oV2FzbTo6T1NSRW50cnlD
YWxsZWUqIG9zckVudHJ5Q2FsbGVlKSB7CisgICAgICAgICAgICBpZiAob3NyRW50cnlDYWxsZWUt
Pmxvb3BJbmRleCgpICE9IG9zckVudHJ5RGF0YS5sb29wSW5kZXgpCisgICAgICAgICAgICAgICAg
V0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgICAgICBzaXplX3Qg
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IG9zckVudHJ5Q2FsbGVlLT5vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplID09IG9zckVudHJ5RGF0YS52YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAg
IHVpbnQ2NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKKyAgICAgICAgICAgIGlmICghYnVmZmVy
KQorICAgICAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKKwor
ICAgICAgICAgICAgdWludDMyX3QgaW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnIDogb3NyRW50cnlEYXRhLnZhbHVlcykKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaW5kZXgrK10gPSBSRUFEKHJlZykuZW5jb2RlZEpTVmFsdWUoKTsKKworICAgICAgICAgICAg
V0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoYXV0byogb3NyRW50
cnlDYWxsZWUgPSBjYWxsZWUtPm9zckVudHJ5Q2FsbGVlKGluc3RhbmNlLT5tZW1vcnkoKS0+bW9k
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBkb09TUkVudHJ5KG9zckVudHJ5Q2FsbGVlKTsKKwor
ICAgICAgICBib29sIGNvbXBpbGUgPSBmYWxzZTsKKyAgICAgICAgeworICAgICAgICAgICAgTG9j
a2VyIGxvY2tlciB7IHRpZXJVcENvdW50ZXIubV9sb2NrIH07CisgICAgICAgICAgICBzd2l0Y2gg
KHRpZXJVcENvdW50ZXIubV9sb29wQ29tcGlsYXRpb25TdGF0dXMpIHsKKyAgICAgICAgICAgIGNh
c2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Tm90Q29tcGls
ZWQ6CisgICAgICAgICAgICAgICAgY29tcGlsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgdGll
clVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cyA9IFdhc206OkxMSW50VGllclVwQ291
bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlv
blN0YXR1czo6Q29tcGlsaW5nOgorICAgICAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1p
emVBZnRlcldhcm1VcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0K
IAotICAgIGlmIChjb21waWxlKSB7Ci0gICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRv
cHRSZWYoKnN0YXRpY19jYXN0PFdhc206OlBsYW4qPihuZXcgV2FzbTo6T1NSRW50cnlQbGFuKGlu
c3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSks
IFJlZjxXYXNtOjpDYWxsZWU+KCpjYWxsZWUpLCBjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKSwgb3Ny
RW50cnlEYXRhLmxvb3BJbmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBs
YW46OmRvbnRGaW5hbGl6ZSgpKSkpOwotICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVu
cXVldWUocGxhbi5jb3B5UmVmKCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSkpCi0gICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aWVyVXBDb3VudGVyLm9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICB9CisgICAgICAgIGlmIChjb21waWxlKSB7CisgICAgICAgICAgICBSZWY8
V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxXYXNtOjpQbGFuKj4obmV3
IFdhc206Ok9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxl
PihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6Q2FsbGVlPigqY2FsbGVlKSwgY2FsbGVl
LT5mdW5jdGlvbkluZGV4KCksIG9zckVudHJ5RGF0YS5sb29wSW5kZXgsIGluc3RhbmNlLT5tZW1v
cnkoKS0+bW9kZSgpLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUoKSkpKTsKKyAgICAgICAgICAg
IFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCisgICAgICAg
ICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB0aWVyVXBDb3VudGVyLm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAg
ICAgfQogCi0gICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRyeUNh
bGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCi0gICAgICAgIHJldHVybiBkb09TUkVu
dHJ5KG9zckVudHJ5Q2FsbGVlKTsKKyAgICAgICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0g
Y2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCisgICAg
ICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShvc3JFbnRyeUNhbGxlZSk7CiAKLSAgICBXQVNNX1JF
VFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKKyAgICB9CiB9CiAKIFdBU01fU0xPV19QQVRIX0RFQ0woZXBpbG9ndWVf
b3NyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAko
cmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOSArMTc4LDkgQEAgc3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZQogICAgIGppdC5lbWl0WmVyb1RvQ2FsbEZyYW1lSGVh
ZGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogbGlua2VkQ2FsbGVlTW92ZSA9ICZy
ZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPFdhc21FbnRyeVB0clRhZz4+KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2Fs
bGVlTW92ZUxvY2F0aW9uczsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKKyAgICAgICAgbGlu
a2VkQ2FsbGVlTW92ZS0+YXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJU
YWc+KGNhbGxlZU1vdmVMb2NhdGlvbikpOwogICAgIH0pOwogCiAgICAgY29uc3QgUGlubmVkUmVn
aXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448662</attachid>
            <date>2022-01-07 19:24:35 -0800</date>
            <delta_ts>2022-01-10 10:00:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>48522</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDIyLTAxLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IGxvb3AgdGllciB1cCB0byB0aGUgQWlyIHRpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDU4NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vODY5Njg2Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIGxvb3AgdGllciB1cCBmcm9tIExMSW50IC0+IEFpci4gVG8g
aW1wbGVtZW50IHRoaXMsIHdlIHVzZQorICAgICAgICBFbnRyeVN3aXRjaCB0byBwb2ludCBhdCBl
YWNoIGxvb3AgaGVhZGVyLCBtYWtpbmcgZWFjaCBsb29wIGFuIGVudHJ5cG9pbnQuCisgICAgICAg
IFRoaXMgaXMgdW5saWtlIEJCUS0+T01HIHRpZXIgdXAsIHdoZXJlIHdlIGNvbXBpbGUgYSBzcGVj
aWFsIE9TUiBlbnRyeSBPTUcKKyAgICAgICAgY2FsbGVlLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29k
IGFyY2hpdGVjdHVyZSBmb3IgdGhlIEFpciB0aWVyLCBzaW5jZSB3ZSBtaWdodCBlbmQKKyAgICAg
ICAgdXAgd2l0aCBzbGlnaHRseSB3b3JzZSB0aHJvdWdocHV0LCBidXQgd2Ugd29uJ3QgbmVlZCBh
IGRpZmZlcmVudCBjb21waWxhdGlvbgorICAgICAgICBmb3IgbG9vcHMgdnMgY2FsbCBlbnRyeXBv
aW50cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBhIGJ1ZyBpbiBB
aXIncyBPMCByZWdpc3RlciBhbGxvY2F0aW9uIHdoZXJlIGl0CisgICAgICAgIGRpZG4ndCBwcm9w
ZXJseSBhY2NvdW50IGZvciBhbGwgbmFtZWQgcmVnaXN0ZXJzIGluIGFuIGluc3RydWN0aW9uLiBU
aGVyZQorICAgICAgICB3YXMgYSBzaWxseSBidWcgd2hlcmUgd2UgYXNrZWQgZWFjaCBhcmcgaWYg
aXQgd2VyZSBhIHRlbXAsIGluc3RlYWQgb2YKKyAgICAgICAgYXNraW5nIHRoZSBJbnN0IGZvciBl
YWNoIG9mIGl0cyB0ZW1wcywgc2luY2UgYW4gQXJnIGNhbiBiZSBhbiBhZGRyZXNzCisgICAgICAg
IGJ1dCBzdGlsbCB1c2UgdGVtcHMuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyYXRlKToKKyAgICAgICAgKiB3YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmaW5hbGl6
ZUVudHJ5cG9pbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRM
b29wVGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUFpcik6CisgICAgICAg
ICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENv
bXBpbGVCMyk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6IERlbGV0ZWQu
CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlSW1wbCk6
CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAgICAoSlNDOjpXYXNt
OjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFu
OjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWVHcm91cC5o
OgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV2FzbUlSR2Vu
ZXJhdG9ySGVscGVycy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlRXhjZXB0aW9uSGFu
ZGxlckFuZExvb3BFbnRyeXBvaW50TG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y29t
cHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50
UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21w
aWxhdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9TUkVudHJ5UGxhbi5j
cHA6CisgICAgICAgIChKU0M6Oldhc206Ok9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICog
d2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OldBU01fU0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorCiAyMDIyLTAxLTA3ICBTYWFtIEJhcmF0
aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBXYXNtIGV4
Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJl
Z2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNr
QW5kR2VuZXJhdGVDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDExICs1ODEsNyBAQCB2
b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAgICAgICB9KSgp
OwogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgICAgICAgICBpbnN0LmZv
ckVhY2hBcmcoWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgVG1wIHRtcCA9IGFyZy50bXAoKTsKKyAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcChbJl0gKGNvbnN0IFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFu
aywgV2lkdGgpIHsKICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxv
d2VkUmVnaXN0ZXIodG1wLnJlZygpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCkBA
IC01OTUsNiArNTkxLDEzIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2Vu
ZXIKICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX25hbWVkRGVmZFJlZ3Muc2V0KHRtcC5yZWcoKSk7CiAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaEFy
ZyhbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBUbXAgdG1wID0gYXJnLnRtcCgpOwogCiAgICAgICAgICAgICAgICAg
Ly8gV2UgY29udmVydCBhbnkgY29sZCB1c2VzIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIHN0YWNr
IHRvIGp1c3QgcG9pbnQgdG8KICAgICAgICAgICAgICAgICAvLyB0aGUgY2Fub25pY2FsIHN0YWNr
IGxvY2F0aW9uLgpAQCAtNjk0LDMzICs2OTcsMjggQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRl
UmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtb3ZlIHRvIHByb3Zp
ZGluZyB0aGF0IGFyZyBpbiBzdGFjayBmb3JtLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gZnVsbHkg
YWxsb2NhdGUKICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpbnN0IHdoZW4gd2UgcmV3aW5k
LgogICAgICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoWyZdIChBcmcmIGFyZywgQXJn
OjpSb2xlLCBCYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcu
aXNUbXAoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBhcmcudG1wKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2VkUmVnaXN0ZXIodG1wLnJlZygpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRt
cCBvcmlnaW5hbFRtcCA9IGFsbG9jYXRpb25TbmFwc2hvdFt0bXAucmVnKCldOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0bXAucmVnKCkgPT0gb3JpZ2luYWxUbXAucmVn
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoaXMg
SW5zdCByZWZlcnJlZCB0byB0aGlzIHJlZyBkaXJlY3RseS4gV2UgbGVhdmUgdGhlc2UgYXMgaXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gb3JpZ2lu
YWxUbXA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkgJiYgaW5zdC5h
ZG1pdHNTdGFjayhhcmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9
IGFyZy50bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9IG1f
bWFwW3RtcF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBlbnRy
eS5yZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaWxsKHRtcCwgcmVnKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBlbnRyeS5zcGlsbFNsb3QtPm9mZnNldEZyb21GUCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzRGlzYWxsb3dlZFJlZ2lzdGVyKHRtcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRtcCBvcmlnaW5hbFRtcCA9IGFsbG9jYXRpb25TbmFwc2hvdFt0bXAucmVnKCldOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxUbXAuaXNSZWcoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRtcC5yZWcoKSA9PSBvcmln
aW5hbFRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoaXMgSW5zdCByZWZlcnJlZCB0byB0aGlzIHJlZyBkaXJlY3RseS4gV2UgbGVh
dmUgdGhlc2UgYXMgaXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG1wID0gb3JpZ2luYWxUbXA7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhhcmcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnID0gdG1wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byYgZW50cnkgPSBtX21hcFt0bXBdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZyBy
ZWcgPSBlbnRyeS5yZWcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbGwodG1wLCBy
ZWcpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgZW50cnkuc3BpbGxTbG90LT5vZmZzZXRGcm9tRlAoKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgICAgIC0taW5zdElu
ZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODc4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIy
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAg
ICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJh
dG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVu
Y3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKIAogICAgIHZvaWQgZmluYWxpemVFbnRy
eXBvaW50cygpOwogCkBAIC03ODMsNyArNzgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
IH0KIAotICAgIHZvaWQgZW1pdExvYWQoVG1wIGJhc2UsIHNpemVfdCBvZmZzZXQsIFR5cGVkVG1w
IHJlc3VsdCkKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBjb25z
dCBUeXBlZFRtcCYgcmVzdWx0KQogICAgIHsKICAgICAgICAgZW1pdExvYWQobW92ZU9wRm9yVmFs
dWVUeXBlKHJlc3VsdC50eXBlKCkpLCB0b0IzVHlwZShyZXN1bHQudHlwZSgpKSwgYmFzZSwgb2Zm
c2V0LCByZXN1bHQudG1wKCkpOwogICAgIH0KQEAgLTc5MSw3ICs3OTEsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUp
OwogCiAgICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVjaygpOwotICAgIHZvaWQgZW1pdExvb3BU
aWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgY29uc3QgU3RhY2smIG5ld1N0YWNrKTsKKyAgICB2b2lkIGVtaXRMb29wVGllclVwQ2hlY2so
dWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBsaXZlVmFsdWVzKTsK
IAogICAgIHZvaWQgZW1pdFdyaXRlQmFycmllckZvckpTV3JhcHBlcigpOwogICAgIEV4cHJlc3Np
b25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOwpAQCAtODg0LDYgKzg4NCw5IEBA
IHByaXZhdGU6CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9jYWxsU2l0ZUluZGV4IHsgMCB9Owog
ICAgIFN0YWNrTWFwcyBtX3N0YWNrbWFwczsKICAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5m
bz4gbV9leGNlcHRpb25IYW5kbGVyczsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QmFzaWNCbG9j
ayosIFZlY3RvcjxUeXBlZFRtcD4+PiBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YTsKKyAgICB1bnNp
Z25lZCYgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogfTsKIAogLy8gTWVtb3J5IGFjY2Vz
c2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMg
dGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KQEAgLTkyOSw3ICs5MzIsNyBA
QCB2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJCiAgICAgZW1pdFBhdGNo
cG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFpcklSR2Vu
ZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6
OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVt
b3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVw
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgOiBt
X2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1
bmN0aW9uSW5kZXgpCkBAIC05MzgsNiArOTQxLDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2Vu
ZXJhdG9yKGNvbnN0IE1vZAogICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCiAgICAgLCBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogICAgICwgbV9u
dW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCisgICAgLCBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKIHsKICAg
ICBtX2N1cnJlbnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOwogICAgIG1fcm9vdEJsb2NrID0g
bV9jdXJyZW50QmxvY2s7CkBAIC05NjcsNyArOTcxLDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklS
R2VuZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMF07CiAgICAgICAgICAgICBh
dXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOwogICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAg
ICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zLmFwcGVuZChsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVH
UFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC0xMDcy
LDkgKzEwNzYsMTEgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAog
CiB2b2lkIEFpcklSR2VuZXJhdG9yOjpmaW5hbGl6ZUVudHJ5cG9pbnRzKCkKIHsKLSAgICB1bnNp
Z25lZCBudW1FbnRyeXBvaW50cyA9IDEgKyBtX2NhdGNoRW50cnlwb2ludHMuc2l6ZSgpOworICAg
IHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzID0gQ2hlY2tlZDx1bnNpZ25lZD4oMSkgKyBtX2NhdGNo
RW50cnlwb2ludHMuc2l6ZSgpICsgbV9sb29wRW50cnlWYXJpYWJsZURhdGEuc2l6ZSgpOwogICAg
IG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhudW1FbnRyeXBvaW50cyk7CiAgICAgbV9jb2RlLnNl
dFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+
KCptX3Byb2xvZ3VlR2VuZXJhdG9yKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG1fY2F0
Y2hFbnRyeXBvaW50cy5zaXplKCk7IGkgPCBudW1FbnRyeXBvaW50czsgKytpKQorICAgICAgICBt
X2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KGksIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdl
bmVyYXRvcj4oKm1fcHJvbG9ndWVHZW5lcmF0b3IpKTsKIAogICAgIGlmIChtX2NhdGNoRW50cnlw
b2ludHMuc2l6ZSgpKSB7CiAgICAgICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4g
Y2F0Y2hQcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9n
dWVHZW5lcmF0b3JGdW5jdGlvbj4oW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6
Q29kZSYgY29kZSkgewpAQCAtMTA5NSw2ICsxMTAxLDI1IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6
OmZpbmFsaXplRW50cnlwb2ludHMKICAgICBzdWNjZXNzb3JzLmFwcGVuZChtX21haW5FbnRyeXBv
aW50U3RhcnQpOwogICAgIHN1Y2Nlc3NvcnMuYXBwZW5kVmVjdG9yKG1fY2F0Y2hFbnRyeXBvaW50
cyk7CiAKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YSkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHBhaXIuZmlyc3Q7CisgICAgICAgIEJhc2lj
QmxvY2sqIGVudHJ5ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIHN1Y2Nlc3NvcnMuYXBw
ZW5kKGVudHJ5KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBlbnRyeTsKKworICAgICAgICBh
dXRvJiB0ZW1wcyA9IHBhaXIuc2Vjb25kOworICAgICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUgPSBzdGQ6Om1heChtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0ZW1wcy5zaXplKCkpKTsKKyAgICAgICAgVG1wIGJhc2VQdHIgPSBUbXAoR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRl
bXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihpKSAqIHNpemVvZih1aW50NjRfdCk7CisgICAgICAgICAgICBlbWl0TG9hZChi
YXNlUHRyLCBvZmZzZXQsIHRlbXBzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChK
dW1wKTsKKyAgICAgICAgZW50cnktPnNldFN1Y2Nlc3NvcnMobG9vcEJvZHkpOworICAgIH0KKwog
ICAgIFJFTEVBU0VfQVNTRVJUKG51bUVudHJ5cG9pbnRzID09IHN1Y2Nlc3NvcnMuc2l6ZSgpKTsK
ICAgICBtX3Jvb3RCbG9jay0+c3VjY2Vzc29ycygpID0gc3VjY2Vzc29yczsKIH0KQEAgLTMwMzMs
NyArMzA1OCw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENoZWMKICAg
ICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIGNvdW50ZG93blB0cik7CiB9CiAKLXZvaWQg
QWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBj
b25zdCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIGNvbnN0IFN0YWNrJiBuZXdTdGFjaykKK3ZvaWQg
QWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBj
b25zdCBWZWN0b3I8VHlwZWRUbXA+JiBsaXZlVmFsdWVzKQogewogICAgIHVpbnQzMl90IG91dGVy
TG9vcEluZGV4ID0gdGhpcy0+b3V0ZXJMb29wSW5kZXgoKTsKICAgICBtX291dGVyTG9vcHMuYXBw
ZW5kKGxvb3BJbmRleCk7CkBAIC0zMDYyLDE0ICszMDg3LDggQEAgdm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjawogCiAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRj
aEFyZ3M7CiAgICAgcGF0Y2hBcmdzLmFwcGVuZChjb3VudGRvd25QdHIpOwotCi0gICAgZm9yRWFj
aExpdmVWYWx1ZShbJl0gKFRtcCB0bXApIHsKLSAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25z
dHJhaW5lZFRtcCh0bXAsIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOwotICAgIH0pOwotICAgIGZv
ciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZW5jbG9zaW5nU3RhY2spCi0gICAgICAgIHBhdGNo
QXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodmFsdWUudmFsdWUoKSwgQjM6OlZhbHVlUmVwOjpD
b2xkQW55KSk7Ci0gICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBuZXdTdGFjaykKLSAg
ICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh2YWx1ZS52YWx1ZSgpLCBCMzo6
VmFsdWVSZXA6OkNvbGRBbnkpKTsKKyAgICBmb3IgKGNvbnN0IFR5cGVkVG1wJiB0bXAgOiBsaXZl
VmFsdWVzKQorICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHRtcC50bXAo
KSwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7CiAKICAgICBUaWVyVXBDb3VudDo6VHJpZ2dlclJl
YXNvbiogZm9yY2VFbnRyeVRyaWdnZXIgPSAmKG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCku
bGFzdCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KCFzdGF0aWNfY2FzdDx1aW50OF90PihUaWVyVXBD
b3VudDo6VHJpZ2dlclJlYXNvbjo6RG9udFRyaWdnZXIpLCAidGhlIEpJVCBjb2RlIGFzc3VtZXMg
bm9uLXplcm8gbWVhbnMgJ2VudGVyJyIpOwpAQCAtMzExMCwxMCArMzEyOSwyMiBAQCBBaXJJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ss
IENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChsb29wSW5kZXggPT0gbV9s
b29wRW50cnlWYXJpYWJsZURhdGEuc2l6ZSgpKTsKKwogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBt
X2NvZGUuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUu
YWRkQmxvY2soKTsKIAogICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywg
bmV3U3RhY2spOworCisgICAgVmVjdG9yPFR5cGVkVG1wPiBsaXZlVmFsdWVzOworICAgIGZvckVh
Y2hMaXZlVmFsdWUoWyZdIChUeXBlZFRtcCB0bXApIHsKKyAgICAgICAgbGl2ZVZhbHVlcy5hcHBl
bmQodG1wKTsKKyAgICB9KTsKKyAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBlbmNsb3NpbmdTdGFj
aykKKyAgICAgICAgbGl2ZVZhbHVlcy5hcHBlbmQodmFyaWFibGUpOworICAgIGZvciAoYXV0byB2
YXJpYWJsZSA6IG5ld1N0YWNrKQorICAgICAgICBsaXZlVmFsdWVzLmFwcGVuZCh2YXJpYWJsZSk7
CisKICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5ld1N0YWNrLnNpemUoKSk7CiAgICAgZm9yIChhdXRvIGl0ZW0gOiBuZXdTdGFjaykK
QEAgLTMxMjQsNyArMzE1NSw5IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tT
aWduYXQKICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhib2R5KTsKIAogICAgIG1f
Y3VycmVudEJsb2NrID0gYm9keTsKLSAgICBlbWl0TG9vcFRpZXJVcENoZWNrKGxvb3BJbmRleCwg
ZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICBlbWl0TG9vcFRpZXJVcENoZWNrKGxvb3BJ
bmRleCwgbGl2ZVZhbHVlcyk7CisKKyAgICBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YS5hcHBlbmQo
c3RkOjpwYWlyPEJhc2ljQmxvY2sqLCBWZWN0b3I8VHlwZWRUbXA+Pihib2R5LCBXVEZNb3ZlKGxp
dmVWYWx1ZXMpKSk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMzg5OSw3ICszOTMyLDcgQEAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgIAogICAgIHByb2Nl
ZHVyZS5zZXRPcHRMZXZlbChPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck9wdGltaXphdGlvbkxl
dmVsKCkpOwogCi0gICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJl
LCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBmdW5jdGlvbklu
ZGV4LCB0aWVyVXAsIHNpZ25hdHVyZSk7CisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3Io
aW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBt
b2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHNpZ25hdHVyZSwgcmVzdWx0LT5vc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKTsKICAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFy
c2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXpl
KCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZXIucGFyc2UoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc3
LDcgKzY3Nyw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWwKICAg
ICB9CiAKICAgICB7Ci0gICAgICAgIGF1dG8qIGNhbGxlZU1vdmVMb2NhdGlvbiA9ICZjb21waWxh
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRp
b25zID0gJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zOwogICAgICAgICBzdGF0aWNf
YXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBXYXNt
Q2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0aGlzIGhl
cmUgZm9yIG5vdy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgKiBzaXplb2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXpl
SW5CeXRlcywgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAgICAgICAgIEIzOjpQ
YXRjaHBvaW50VmFsdWUqIGdldENhbGxlZVBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBPcmlnaW4oKSk7
CkBAIC02ODcsOCArNjg3LDggQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBN
b2R1bAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdCA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24p
OworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0aW9ucywg
bW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
ICAgICBjYWxsZWVNb3ZlTG9jYXRpb25zLT5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdh
c21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9KTsKIApAQCAtMzEzOCw3ICszMTM4LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkRHVt
cElSRm9yKHVpbnQzMl90IGZ1bgogICAgIHJldHVybiBkdW1wQWxsb3dsaXN0LT5zaG91bGREdW1w
V2FzbUZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9u
Q29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9u
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUs
IENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwKQorRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZUIzKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBG
dW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2Rl
IGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcElu
ZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAgYXV0byByZXN1bHQg
PSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTMxNzUsNyArMzE3NSw3IEBA
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICAgICAgPyBPcHRp
b25zOjp3ZWJBc3NlbWJseUJCUUIzT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlv
bnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJh
dG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRp
b25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVwKTsKKyAg
ICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgp
LCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgcmVzdWx0LT5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9T
UkVudHJ5LCB0aWVyVXApOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNl
cihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgp
LCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2Vy
LnBhcnNlKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4NzgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQm94PFBDVG9Db2RlT3JpZ2luTWFw
PiBwY1RvQ29kZU9yaWdpbk1hcDsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0
JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVw
Q291bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMoQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogdm9pZCBjb21wdXRlUENUb0NvZGVP
cmlnaW5NYXAoQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyODc4MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDEzICs2NCwxNSBAQCBib29sIEJCUVBsYW46OnByZXBhcmVJbXBsKCkKICAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7
CiAgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtSW50ZXJuYWxGdW5jdGlvbnMsIGZ1
bmN0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rpb25zIikKICAgICAgICAgfHwgIXRy
eVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9ucy5zaXplKCks
ICIgY29tcGlsYXRpb24gY29udGV4dHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fdGllclVwQ291bnRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHRpZXItdXAgY291bnRzIikpCisg
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9ucy5z
aXplKCksICIgdGllci11cCBjb3VudHMiKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fYWxsTG9vcEVudHJ5cG9pbnRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGxvb3AgZW50cnlwb2lu
dHMiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlv
bnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9jb21waWxhdGlvbkNvbnRleHRz
LnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVu
Y3Rpb25zLnNpemUoKSk7CisgICAgbV9hbGxMb29wRW50cnlwb2ludHMucmVzaXplKGZ1bmN0aW9u
cy5zaXplKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTMsNyArMTE1LDggQEAgdm9p
ZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgogICAgIH0KIAogICAgIFZlY3Rv
cjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9uczsKLSAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwgY29udGV4dCwgbGlua0J1ZmZl
cik7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IGxvb3BF
bnRyeXBvaW50TG9jYXRpb25zOworICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyQW5kTG9vcEVu
dHJ5cG9pbnRMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgbG9vcEVudHJ5cG9p
bnRMb2NhdGlvbnMsIGZ1bmN0aW9uLmdldCgpLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAogICAg
IGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKIApAQCAtMTI2
LDggKzEyOSw5IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAg
ICAgewotICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShX
VEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1v
dmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVC
aXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxs
ZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21U
b1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rp
b24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25z
KSwgV1RGTW92ZShsb29wRW50cnlwb2ludExvY2F0aW9ucyksIGZ1bmN0aW9uLT5vc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKTsKKyAgICAgICAgZm9yIChhdXRvJiBtb3ZlTG9jYXRpb24gOiBmdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0
cigpKSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKIAogICAg
ICAgICBpZiAoY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkKQEAgLTE5Niw3ICsyMDAsNiBAQCBz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhCiAgICAgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3Vu
dCgpICsgZnVuY3Rpb25JbmRleDsKICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwogICAgIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGVSZXN1bHQ7Ci0gICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7CiAK
ICAgICAvLyBGSVhNRTogU29tZSB3ZWJwYWdlcyB1c2UgdmVyeSBsYXJnZSBXYXNtIG1vZHVsZSwg
YW5kIGl0IGV4aGF1c3RzIGFsbCBleGVjdXRhYmxlIG1lbW9yeSBpbiBBUk02NCBkZXZpY2VzIHNp
bmNlIHRoZSBzaXplIG9mIGV4ZWN1dGFibGUgbWVtb3J5IHJlZ2lvbiBpcyBvbmx5IGxpbWl0ZWQg
dG8gMTI4TUIuCiAgICAgLy8gVGhlIGxvbmcgdGVybSBzb2x1dGlvbiBzaG91bGQgYmUgdG8gaW50
cm9kdWNlIGEgV2FzbSBpbnRlcnByZXRlci4gQnV0IGFzIGEgc2hvcnQgdGVybSBzb2x1dGlvbiwg
d2UgaW50cm9kdWNlIGhldXJpc3RpY3MgdG8gc3dpdGNoIGJhY2sgdG8gQkJRIEIzIGF0IHRoZSBz
YWNyaWZpY2Ugb2Ygc3RhcnQtdXAgdGltZSwKQEAgLTIwOCw3ICsyMTEsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhCiAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRy
dWU7CiAKICAgICBpZiAoZm9yY2VVc2luZ0IzKQotICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1
bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlv
bkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXApOworICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1
bHQgPSBwYXJzZUFuZENvbXBpbGVCMyhjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBD
b21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJV
cCk7CiAgICAgZWxzZQogICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENv
bXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwg
dGllclVwKTsKIApAQCAtMjQxLDcgKzI0NCw3IEBAIHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVD
b21waWxhdGlvbigpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhtX2V4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVm
ZmVyKTsKKyAgICAgICAgICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyQW5kTG9vcEVudHJ5cG9p
bnRMb2NhdGlvbnMobV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLCBt
X2FsbExvb3BFbnRyeXBvaW50c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIGNvbnRleHQsIGxp
bmtCdWZmZXIpOwogCiAgICAgICAgICAgICBjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAoY29udGV4
dCwgbGlua0J1ZmZlcik7CiAKQEAgLTI4NCwxMyArMjg3LDE2IEBAIHZvaWQgQkJRUGxhbjo6aW5p
dGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2EKICAgICAgICAgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZT4gZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogICAgICAgICBpZiAoYXV0byBlbWJl
ZGRlclRvV2FzbUZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdl
dChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWUgPSBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGVtYmVk
ZGVyVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdldCgp
KSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGVtYmVkZGVyVG9XYXNt
RnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIElu
dGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1
bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxs
ZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlv
bkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0
aW9uSW5kZXhdKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlv
bi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hX
YXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+
IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlv
bi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291
bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFw
cyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShtX2V4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV9h
bGxMb29wRW50cnlwb2ludHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIGZ1bmN0aW9uLT5vc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKKworICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlv
biA6IGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3
YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwogCiAgICAgICAgIGlmIChtX2NvbXBpbGF0aW9u
Q29udGV4dHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5wY1RvQ29kZU9yaWdpbk1hcCkKICAgICAg
ICAgICAgIENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5hZGRQQ1RvQ29kZU9yaWdpbk1hcCh3
YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSwgV1RGTW92ZShtX2NvbXBpbGF0aW9uQ29udGV4dHNb
aW50ZXJuYWxGdW5jdGlvbkluZGV4XS5wY1RvQ29kZU9yaWdpbk1hcCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCShyZXZpc2lvbiAyODc4MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBEZWZhdWx0SGFzaDx1aW50MzJfdD4sIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxh
dGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+PiBt
X3RpZXJVcENvdW50czsKKyAgICBWZWN0b3I8VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21F
bnRyeVB0clRhZz4+PiBtX2FsbExvb3BFbnRyeXBvaW50czsKIAogICAgIFJlZlB0cjxDYWxsZWVH
cm91cD4gbV9jYWxsZWVHcm91cCB7IG51bGxwdHIgfTsKICAgICB1aW50MzJfdCBtX2Z1bmN0aW9u
SW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCShyZXZp
c2lvbiAyODc4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw5ICsxNzIsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBCQlFD
YWxsZWUgZmluYWwgOiBwdWJsaWMgT3B0aW1pemluZ0pJVENhbGxlZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBTdGFja01hcHMm
JiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRs
ZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYg
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3Jl
YXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFp
cjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9w
dHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlu
a2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25z
LCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4mJiBsb29wRW50cnlw
b2ludHMsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5k
ZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpLCBXVEZNb3ZlKHVubGlua2Vk
Q2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBX
VEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEJCUUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShu
YW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1v
dmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucyksIFdURk1vdmUobG9vcEVudHJ5cG9pbnRzKSwgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSkpOwogICAgIH0KIAogICAgIE9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRy
eUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0KCk7IH0KQEAgLTE5NCwxNiAr
MTk0LDI0IEBAIHB1YmxpYzoKIAogICAgIFRpZXJVcENvdW50KiB0aWVyVXBDb3VudCgpIHsgcmV0
dXJuIG1fdGllclVwQ291bnQuZ2V0KCk7IH0KIAorICAgIGNvbnN0IFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiYgbG9vcEVudHJ5cG9pbnRzKCkgeyByZXR1cm4gbV9s
b29wRW50cnlwb2ludHM7IH0KKworICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KKwogcHJp
dmF0ZToKLSAgICBCQlFDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVf
dCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5h
bWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2tt
YXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMpCisgICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291
bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNr
TWFwcyYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9u
SGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
Pj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8
V2FzbUVudHJ5UHRyVGFnPj4mJiBsb29wRW50cnlwb2ludHMsIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUpCiAgICAgICAgIDogT3B0aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21w
aWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1v
dmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMp
KQogICAgICAgICAsIG1fdGllclVwQ291bnQoV1RGTW92ZSh0aWVyVXBDb3VudCkpCisgICAgICAg
ICwgbV9sb29wRW50cnlwb2ludHMoV1RGTW92ZShsb29wRW50cnlwb2ludHMpKQorICAgICAgICAs
IG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQog
ICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8T1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxs
ZWU7CiAgICAgUmVmUHRyPE9NR0NhbGxlZT4gbV9yZXBsYWNlbWVudDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnQ7CisgICAgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IG1fbG9vcEVudHJ5cG9pbnRzOworICAgIHVuc2lnbmVk
IG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSB7IDAgfTsKICAgICBib29sIG1fZGlkU3RhcnRD
b21waWxpbmdPU1JFbnRyeUNhbGxlZSB7IGZhbHNlIH07CiB9OwogI2VuZGlmCkBAIC0yNjcsNyAr
Mjc1LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogICAgIEpJ
VENhbGxlZSogcmVwbGFjZW1lbnQoTWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX3JlcGxhY2Vt
ZW50c1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0uZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJl
cGxhY2VtZW50KFJlZjxKSVRDYWxsZWU+JiYgcmVwbGFjZW1lbnQsIE1lbW9yeU1vZGUgbW9kZSkK
KyAgICB2b2lkIHNldFJlcGxhY2VtZW50KFJlZjxPcHRpbWl6aW5nSklUQ2FsbGVlPiYmIHJlcGxh
Y2VtZW50LCBNZW1vcnlNb2RlIG1vZGUpCiAgICAgewogICAgICAgICBtX3JlcGxhY2VtZW50c1tz
dGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0gPSBXVEZNb3ZlKHJlcGxhY2VtZW50KTsKICAgICB9
CkBAIC0zMDIsNyArMzEwLDcgQEAgcHJpdmF0ZToKICAgICBGaXhlZFZlY3RvcjxKdW1wVGFibGU+
IG1fanVtcFRhYmxlczsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLSAgICBSZWZQ
dHI8SklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsK
KyAgICBSZWZQdHI8T3B0aW1pemluZ0pJVENhbGxlZT4gbV9yZXBsYWNlbWVudHNbV2FzbTo6TnVt
YmVyT2ZNZW1vcnlNb2Rlc107CiAgICAgUmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBtX29zckVudHJ5
Q2FsbGVlc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKICNlbmRpZgogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fZW50cnlwb2ludDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCShyZXZpc2lvbiAyODc4
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEVudHJ5
UGxhbj4gbV9wbGFuOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5pc2hl
ZCB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworcHVibGljOgogICAgIExv
Y2sgbV9sb2NrOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsMTAgKzQ0MywxMSBAQCBzdHJ1Y3QgRW50
cnlwb2ludCB7CiAKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRy
eVB0clRhZz4gY2FsbGVlTW92ZUxvY2F0aW9uOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPj4gY2FsbGVlTW92ZUxvY2F0aW9uczsKICAgICBTdGFj
a01hcHMgc3RhY2ttYXBzOwogICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBleGNlcHRp
b25IYW5kbGVyczsKICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CisgICAgdW5zaWduZWQgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSB7IDAgfTsKIH07CiAKIC8vIFdlYkFzc2VtYmx5IGRpcmVj
dCBjYWxscyBhbmQgY2FsbF9pbmRpcmVjdCB1c2UgaW5kaWNlcyBpbnRvICJmdW5jdGlvbiBpbmRl
eCBzcGFjZSIuIFRoaXMgc3BhY2Ugc3RhcnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oCShyZXZpc2lvbiAyODc4MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDI0ICs2MywzMiBAQCBzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSB7CiB9OwogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlRXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGNv
bnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckFuZExvb3BFbnRyeXBv
aW50TG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4mIGhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFn
Pj4mIGxvb3BFbnRyeXBvaW50cywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGNv
bnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikK
IHsKICAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQogICAgICAgICByZXR1cm47CiAKLSAgICB1
bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOworICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRl
eCA9IDE7CiAgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSBjb250ZXh0LnByb2NlZHVyZS0+
bnVtRW50cnlwb2ludHMoKTsKICAgICBmb3IgKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhh
bmRsZXJJbmZvIDogZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVudHJ5cG9pbnRJbmRleCA8IG51bUVudHJ5cG9pbnRzKTsKICAgICAgICAgaWYg
KGhhbmRsZXJJbmZvLm1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6RGVsZWdhdGUpIHsKICAgICAgICAg
ICAgIGhhbmRsZXJzLmFwcGVuZCh7IH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAotICAgICAgICArK2VudHJ5cG9pbnRJbmRleDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZW50cnlwb2ludEluZGV4IDwgbnVtRW50cnlwb2ludHMpOwogICAgICAgICBoYW5kbGVycy5hcHBl
bmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGNvbnRleHQu
cHJvY2VkdXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkpKTsKKyAg
ICAgICAgKytlbnRyeXBvaW50SW5kZXg7CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5
cG9pbnRJbmRleCA9PSBudW1FbnRyeXBvaW50cyAtIDEpOworCisgICAgZm9yICg7IGVudHJ5cG9p
bnRJbmRleCA8IG51bUVudHJ5cG9pbnRzOyArK2VudHJ5cG9pbnRJbmRleCkKKyAgICAgICAgbG9v
cEVudHJ5cG9pbnRzLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFn
Pihjb250ZXh0LnByb2NlZHVyZS0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5k
ZXgpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+
JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGNvbnN0IENvbXBp
bGF0aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4gaWdub3JlZDsKKyAgICBj
b21wdXRlRXhjZXB0aW9uSGFuZGxlckFuZExvb3BFbnRyeXBvaW50TG9jYXRpb25zKGhhbmRsZXJz
LCBpZ25vcmVkLCBmdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCBlbWl0UmV0aHJvd0ltcGwoQ0NhbGxIZWxwZXJzJiBqaXQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAkocmV2aXNpb24gMjg3
ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw4ICsxNjgsOCBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxl
dGVDb21waWxhdGlvbigpCiAgICAgICAgICAgICBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
PiBjYWxsZWUgPSBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0
aW9uLT5lbnRyeXBvaW50KSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgcmVw
YXRjaFBvaW50ZXIgLSBqdXN0IHBhc3MgaW4gdGhlIGNhbGxlZSBkaXJlY3RseQogICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24pCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRp
b24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gbV9lbWJlZGRlckNhbGxlZXMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUo
Y2FsbGVlKSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3
RW50cnkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw5ICs3Miw4IEBAIHZvaWQgT01HUGxhbjo6
d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogCiAgICAgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7Ci0gICAgdW5zaWduZWQgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsK
LSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9k
ZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYKTsKKyAgICBhdXRvIHBhcnNl
QW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUIzKGNvbnRleHQsIGZ1bmN0aW9uLCBz
aWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgp
OwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAg
IExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKQEAgLTEwNiw3ICsxMDUsOCBAQCB2b2lkIE9NR1Bs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxs
ZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7CiAgICAg
ICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21n
RW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFt
ZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMp
LCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxG
dW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2Nh
dGlvbnMpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGludGVybmFs
RnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUu
cHRyKCkpKTsKKyAgICAgICAgZm9yIChhdXRvJiBtb3ZlTG9jYXRpb24gOiBpbnRlcm5hbEZ1bmN0
aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRy
KCkpKTsKICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5UGxhbi5jcHAJKHJldmlzaW9uIDI4NzgwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw3IEBAIHZvaWQgT1NSRW50cnlQbGFuOjp3b3JrKENvbXBp
bGF0aW9uRWZmb3IKIAogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtl
ZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIHVuc2lnbmVkIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVz
dWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlu
a2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24u
Z2V0KCksIG1fbW9kZSwgdGFyZ2V0Q29tcGlsYXRpb25Nb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIG1f
bG9vcEluZGV4KTsKKyAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29t
cGlsZUIzKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgdGFyZ2V0Q29tcGlsYXRpb25Nb2RlLCBtX2Z1
bmN0aW9uSW5kZXgsIG1fbG9vcEluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRD
b21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBAIC0x
MDUsOSArMTA0LDEwIEBAIHZvaWQgT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3IK
ICAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVybmFs
RnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAKICAgICBBU1NFUlQo
bV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7
Ci0gICAgUmVmPE9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPU1JFbnRyeUNhbGxlZTo6Y3JlYXRl
KHRhcmdldENvbXBpbGF0aW9uTW9kZSwgV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZN
b3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyks
IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKKyAgICBSZWY8T1NSRW50cnlDYWxsZWU+IGNhbGxl
ZSA9IE9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUodGFyZ2V0Q29tcGlsYXRpb25Nb2RlLCBXVEZNb3Zl
KG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgaW50ZXJuYWxGdW5jdGlvbi0+
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRD
YWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShpbnRl
cm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9ucykpOwogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94
V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgZm9yIChhdXRvJiBtb3ZlTG9jYXRpb24gOiBp
bnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2Fz
bShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9jYWxsZWVHcm91
cC0+bV9sb2NrIH07CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2Fz
bUNhbGxzaXRlcygpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2MyArMTgwLDg4
IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAKICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICpjYWxsZWUsICI6IEVudGVyZWQgbG9vcF9vc3Igd2l0aCB0aWVy
VXBDb3VudGVyID0gIiwgY2FsbGVlLT50aWVyVXBDb3VudGVyKCkpOwogCi0gICAgdW5zaWduZWQg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBjYWxsZWUtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsK
LSAgICBjb25zdCBhdXRvJiBvc3JFbnRyeURhdGEgPSB0aWVyVXBDb3VudGVyLm9zckVudHJ5RGF0
YUZvckxvb3AobG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOwotCiAgICAgaWYgKCF0aWVyVXBD
b3VudGVyLmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hv
dWxkIGJlIGxpZnRlZC4iKTsKICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxw
dHIpOwogICAgIH0KIAotICAgIGNvbnN0IGF1dG8gZG9PU1JFbnRyeSA9IFsmXShXYXNtOjpPU1JF
bnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUpIHsKLSAgICAgICAgaWYgKG9zckVudHJ5Q2FsbGVl
LT5sb29wSW5kZXgoKSAhPSBvc3JFbnRyeURhdGEubG9vcEluZGV4KQorICAgIHVuc2lnbmVkIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVlLT5ieXRlY29kZU9mZnNldChwYyk7Cisg
ICAgY29uc3QgYXV0byYgb3NyRW50cnlEYXRhID0gdGllclVwQ291bnRlci5vc3JFbnRyeURhdGFG
b3JMb29wKGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIGlmIChPcHRpb25zOjp3
YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkgeworICAgICAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKGNhbGxlZSwgaW5zdGFuY2UpKQogICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdP
KG51bGxwdHIsIG51bGxwdHIpOwogCi0gICAgICAgIHNpemVfdCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplID0gb3NyRW50cnlDYWxsZWUtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9PSBvc3JFbnRy
eURhdGEudmFsdWVzLnNpemUoKSk7CisgICAgICAgIFdhc206OkJCUUNhbGxlZSogYmJxQ2FsbGVl
OworICAgICAgICB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaW5zdGFuY2UtPmNhbGxl
ZUdyb3VwKCktPm1fbG9jayB9OworICAgICAgICAgICAgYmJxQ2FsbGVlID0gaW5zdGFuY2UtPmNh
bGxlZUdyb3VwKCktPmJicUNhbGxlZShsb2NrZXIsIGNhbGxlZS0+ZnVuY3Rpb25JbmRleCgpKTsK
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChiYnFDYWxsZWUpOworCisgICAgICAg
IHNpemVfdCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gYmJxQ2FsbGVlLT5vc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUgPj0gb3NyRW50cnlEYXRhLnZhbHVlcy5zaXplKCkpOwogICAgICAgICB1aW50
NjRfdCogYnVmZmVyID0gaW5zdGFuY2UtPmNvbnRleHQoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSk7CiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAg
ICAgICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChvc3JFbnRyeURhdGEubG9vcEluZGV4IDwgYmJxQ2FsbGVlLT5sb29wRW50cnlwb2lu
dHMoKS5zaXplKCkpOwogCiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gMDsKICAgICAgICAgZm9y
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnIDogb3NyRW50cnlEYXRhLnZhbHVlcykKICAgICAgICAgICAg
IGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVnKS5lbmNvZGVkSlNWYWx1ZSgpOwogCi0gICAgICAg
IFdBU01fUkVUVVJOX1RXTyhidWZmZXIsIG9zckVudHJ5Q2FsbGVlLT5lbnRyeXBvaW50KCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgfTsKLQotICAgIGlmIChhdXRvKiBvc3JFbnRyeUNhbGxl
ZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUoaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCkpKQot
ICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShvc3JFbnRyeUNhbGxlZSk7Ci0KLSAgICBib29sIGNv
bXBpbGUgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyB0aWVyVXBDb3Vu
dGVyLm1fbG9jayB9OwotICAgICAgICBzd2l0Y2ggKHRpZXJVcENvdW50ZXIubV9sb29wQ29tcGls
YXRpb25TdGF0dXMpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNv
bXBpbGF0aW9uU3RhdHVzOjpOb3RDb21waWxlZDoKLSAgICAgICAgICAgIGNvbXBpbGUgPSB0cnVl
OwotICAgICAgICAgICAgdGllclVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cyA9IFdh
c206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6
Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzoKLSAgICAgICAgICAgIHRpZXJVcENvdW50ZXIu
b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ6Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJxQ2Fs
bGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEubG9vcEluZGV4XS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBhdXRvIGRvT1NSRW50cnkg
PSBbJl0oV2FzbTo6T1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlKSB7CisgICAgICAgICAg
ICBpZiAob3NyRW50cnlDYWxsZWUtPmxvb3BJbmRleCgpICE9IG9zckVudHJ5RGF0YS5sb29wSW5k
ZXgpCisgICAgICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwor
CisgICAgICAgICAgICBzaXplX3Qgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IG9zckVudHJ5
Q2FsbGVlLT5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID09IG9zckVudHJ5RGF0YS52YWx1ZXMu
c2l6ZSgpKTsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4
dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKKyAg
ICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhu
dWxscHRyLCBudWxscHRyKTsKKworICAgICAgICAgICAgdWludDMyX3QgaW5kZXggPSAwOworICAg
ICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnIDogb3NyRW50cnlEYXRhLnZhbHVlcykK
KyAgICAgICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBSRUFEKHJlZykuZW5jb2RlZEpTVmFs
dWUoKTsKKworICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgb3NyRW50cnlDYWxs
ZWUtPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAoYXV0byogb3NyRW50cnlDYWxsZWUgPSBjYWxsZWUtPm9zckVudHJ5Q2FsbGVlKGlu
c3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBkb09TUkVudHJ5
KG9zckVudHJ5Q2FsbGVlKTsKKworICAgICAgICBib29sIGNvbXBpbGUgPSBmYWxzZTsKKyAgICAg
ICAgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHRpZXJVcENvdW50ZXIubV9sb2NrIH07
CisgICAgICAgICAgICBzd2l0Y2ggKHRpZXJVcENvdW50ZXIubV9sb29wQ29tcGlsYXRpb25TdGF0
dXMpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxh
dGlvblN0YXR1czo6Tm90Q29tcGlsZWQ6CisgICAgICAgICAgICAgICAgY29tcGlsZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgdGllclVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cyA9
IFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVy
VXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsaW5nOgorICAgICAgICAgICAgICAg
IHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0
aW9uU3RhdHVzOjpDb21waWxlZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChjb21waWxlKSB7Ci0gICAgICAgIFJlZjxX
YXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PFdhc206OlBsYW4qPihuZXcg
V2FzbTo6T1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+
KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpDYWxsZWU+KCpjYWxsZWUpLCBjYWxsZWUt
PmZ1bmN0aW9uSW5kZXgoKSwgb3NyRW50cnlEYXRhLmxvb3BJbmRleCwgaW5zdGFuY2UtPm1lbW9y
eSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5hbGl6ZSgpKSkpOwotICAgICAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCi0gICAgICAgICAgICBwbGFu
LT53YWl0Rm9yQ29tcGxldGlvbigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aWVyVXBD
b3VudGVyLm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICB9CisgICAgICAgIGlmIChjb21waWxl
KSB7CisgICAgICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpzdGF0aWNf
Y2FzdDxXYXNtOjpQbGFuKj4obmV3IFdhc206Ok9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4
dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6Q2Fs
bGVlPigqY2FsbGVlKSwgY2FsbGVlLT5mdW5jdGlvbkluZGV4KCksIG9zckVudHJ5RGF0YS5sb29w
SW5kZXgsIGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpLCBXYXNtOjpQbGFuOjpkb250RmluYWxp
emUoKSkpKTsKKyAgICAgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFu
LmNvcHlSZWYoKSk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRKSVQoKSkpCisgICAgICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aWVyVXBDb3VudGVyLm9wdGltaXpl
QWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCi0gICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVl
ID0gY2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCi0g
ICAgICAgIHJldHVybiBkb09TUkVudHJ5KG9zckVudHJ5Q2FsbGVlKTsKKyAgICAgICAgaWYgKGF1
dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVt
b3J5KCktPm1vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShvc3JFbnRyeUNh
bGxlZSk7CiAKLSAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAg
IFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKKyAgICB9CiB9CiAKIFdBU01fU0xP
V19QQVRIX0RFQ0woZXBpbG9ndWVfb3NyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjg3ODAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOSArMTc4
LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZQogICAgIGppdC5l
bWl0WmVyb1RvQ2FsbEZyYW1lSGVhZGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92
ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiog
bGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBWZWN0
b3I8Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4+KiBsaW5rZWRDYWxs
ZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uczsKICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVN
b3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbGVlTW92ZUxv
Y2F0aW9uKTsKKyAgICAgICAgbGlua2VkQ2FsbGVlTW92ZS0+YXBwZW5kKGxpbmtCdWZmZXIubG9j
YXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1vdmVMb2NhdGlvbikpOwogICAgIH0pOwog
CiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsK
</data>
<flag name="review"
          id="474577"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="474585"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448764</attachid>
            <date>2022-01-10 10:00:02 -0800</date>
            <delta_ts>2022-01-10 17:37:11 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>48514</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDIyLTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IGxvb3AgdGllciB1cCB0byB0aGUgQWlyIHRpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDU4NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vODY5Njg2Mzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGFkZHMgbG9vcCB0aWVyIHVwIGZyb20gTExJbnQgLT4gQWlyLiBUbyBp
bXBsZW1lbnQgdGhpcywgd2UgdXNlCisgICAgICAgIEVudHJ5U3dpdGNoIHRvIHBvaW50IGF0IGVh
Y2ggbG9vcCBoZWFkZXIsIG1ha2luZyBlYWNoIGxvb3AgYW4gZW50cnlwb2ludC4KKyAgICAgICAg
VGhpcyBpcyB1bmxpa2UgQkJRLT5PTUcgdGllciB1cCwgd2hlcmUgd2UgY29tcGlsZSBhIHNwZWNp
YWwgT1NSIGVudHJ5IE9NRworICAgICAgICBjYWxsZWUuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qg
YXJjaGl0ZWN0dXJlIGZvciB0aGUgQWlyIHRpZXIsIHNpbmNlIHdlIG1pZ2h0IGVuZAorICAgICAg
ICB1cCB3aXRoIHNsaWdodGx5IHdvcnNlIHRocm91Z2hwdXQsIGJ1dCB3ZSB3b24ndCBuZWVkIGEg
ZGlmZmVyZW50IGNvbXBpbGF0aW9uCisgICAgICAgIGZvciBsb29wcyB2cyBjYWxsIGVudHJ5cG9p
bnRzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGluIEFp
cidzIE8wIHJlZ2lzdGVyIGFsbG9jYXRpb24gd2hlcmUgaXQKKyAgICAgICAgZGlkbid0IHByb3Bl
cmx5IGFjY291bnQgZm9yIGFsbCBuYW1lZCByZWdpc3RlcnMgaW4gYW4gaW5zdHJ1Y3Rpb24uIFRo
ZXJlCisgICAgICAgIHdhcyBhIHNpbGx5IGJ1ZyB3aGVyZSB3ZSBhc2tlZCBlYWNoIGFyZyBpZiBp
dCB3ZXJlIGEgdGVtcCwgaW5zdGVhZCBvZgorICAgICAgICBhc2tpbmcgdGhlIEluc3QgZm9yIGVh
Y2ggb2YgaXRzIHRlbXBzLCBzaW5jZSBhbiBBcmcgY2FuIGJlIGFuIGFkZHJlc3MKKyAgICAgICAg
YnV0IHN0aWxsIHVzZSB0ZW1wcy4KKworICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXJhdGUpOgorICAgICAgICAqIHdhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkFpcklS
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmZpbmFsaXpl
RW50cnlwb2ludHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdExv
b3BUaWVyVXBDaGVjayk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRM
b29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlQWlyKToKKyAgICAgICAg
KiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29t
cGlsZUIzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNt
QkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmVJbXBsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6d29yayk6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46
OmRpZENvbXBsZXRlQ29tcGlsYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpp
bml0aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5oOgorICAgICAg
ICAqIHdhc20vV2FzbUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZUdyb3VwLmg6
CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtSVJHZW5l
cmF0b3JIZWxwZXJzLmg6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRpb25IYW5k
bGVyQW5kTG9vcEVudHJ5cG9pbnRMb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21w
dXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRQ
bGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBp
bGF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3
YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6V0FTTV9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisKIDIwMjItMDEtMTAgIEVsbGlvdHQgV2ls
bGlhbXMgIDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIHBvc3Rwcm9jZXNzLWhlYWRlcnMuc2g6
IEF2b2lkIHJlZHVuZGFudCBwcm9jZXNzaW5nIHRvIHNwZWVkIHVwIGluY3JlbWVudGFsIFhjb2Rl
IGJ1aWxkcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJl
Z2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5l
cmF0ZUNvZGUuY3BwCShyZXZpc2lvbiAyODc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01ODEsMTEgKzU4MSw3IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0
ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZyhbJl0gKEFyZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFy
Zy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAg
ICBUbXAgdG1wID0gYXJnLnRtcCgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAo
Y29uc3QgVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSAmJiBpc0Rpc2FsbG93ZWRSZWdpc3Rlcih0bXAucmVnKCkp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTU5NSw2ICs1OTEsMTMgQEAgdm9p
ZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmFt
ZWREZWZkUmVncy5zZXQodG1wLnJlZygpKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKFsmXSAoQXJnJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1w
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIFRtcCB0
bXAgPSBhcmcudG1wKCk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBjb252ZXJ0IGFueSBjb2xk
IHVzZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiB0aGUgc3RhY2sgdG8ganVzdCBwb2ludCB0bwogICAg
ICAgICAgICAgICAgIC8vIHRoZSBjYW5vbmljYWwgc3RhY2sgbG9jYXRpb24uCkBAIC02OTMsMzQg
KzY5NiwyOCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHJld2luZCB0aGlzIEluc3QgdG8gYmUgaW4gaXRzIHByZXZp
b3VzIHN0YXRlLCBob3dldmVyLCBpZiBhbnkgYXJnIGFkbWl0cyBzdGFjaywKICAgICAgICAgICAg
ICAgICAgICAgLy8gd2UgbW92ZSB0byBwcm92aWRpbmcgdGhhdCBhcmcgaW4gc3RhY2sgZm9ybS4g
VGhpcyB3aWxsIGFsbG93IHVzIHRvIGZ1bGx5IGFsbG9jYXRlCiAgICAgICAgICAgICAgICAgICAg
IC8vIHRoaXMgaW5zdCB3aGVuIHdlIHJld2luZC4KLSAgICAgICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoQXJnKFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBhcmcudG1wKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2VkUmVnaXN0
ZXIodG1wLnJlZygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rpc2FsbG93ZWRS
ZWdpc3Rlcih0bXAucmVnKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVG1wIG9yaWdpbmFsVG1wID0gYWxsb2NhdGlvblNuYXBzaG90W3Rt
cC5yZWcoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVG1wLmlz
UmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRtcC5yZWco
KSA9PSBvcmlnaW5hbFRtcC5yZWcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgbWVhbnMgdGhpcyBJbnN0IHJlZmVycmVkIHRvIHRoaXMgcmVnIGRpcmVjdGx5LiBX
ZSBsZWF2ZSB0aGVzZSBhcyBpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBvcmlnaW5hbFRtcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0LmFkbWl0c1N0YWNrKGFyZykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSB0bXA7CisgICAgICAgICAgICAgICAgICAg
ICAgICBUbXAgb3JpZ2luYWxUbXAgPSBhbGxvY2F0aW9uU25hcHNob3RbdG1wLnJlZygpXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFRtcC5pc1JlZygpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRtcC5yZWcoKSA9PSBvcmlnaW5hbFRtcC5yZWco
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGlzIEluc3Qg
cmVmZXJyZWQgdG8gdGhpcyByZWcgZGlyZWN0bHkuIFdlIGxlYXZlIHRoZXNlIGFzIGlzLgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG9yaWdpbmFsVG1wOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKFsmXSAo
QXJnJiBhcmcsIEFyZzo6Um9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmcuaXNUbXAoKSAmJiAhYXJnLnRtcCgpLmlzUmVnKCkgJiYgaW5zdC5hZG1pdHNT
dGFjayhhcmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IGFyZy50
bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9IG1fbWFwW3Rt
cF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBlbnRyeS5yZWcp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaWxsKHRtcCwgcmVnKTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX21hcFt0bXBdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBlbnRyeS5yZWcpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3BpbGwodG1wLCByZWcpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBh
cmcgPSBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgZW50cnkuc3Bp
bGxTbG90LT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
ID0gQXJnOjphZGRyKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIGVudHJ5LnNwaWxs
U2xvdC0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgICAtLWluc3RJbmRleDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjg3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAg
XAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwg
VGllclVwQ291bnQqLCBjb25zdCBTaWduYXR1cmUmKTsKKyAgICBBaXJJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBjb25zdCBTaWduYXR1cmUmLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSk7CiAKICAgICB2b2lkIGZpbmFsaXplRW50cnlwb2ludHMo
KTsKIApAQCAtNzgzLDcgKzc4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBUeXBlZFRtcCByZXN1bHQp
CisgICAgdm9pZCBlbWl0TG9hZChUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgY29uc3QgVHlwZWRU
bXAmIHJlc3VsdCkKICAgICB7CiAgICAgICAgIGVtaXRMb2FkKG1vdmVPcEZvclZhbHVlVHlwZShy
ZXN1bHQudHlwZSgpKSwgdG9CM1R5cGUocmVzdWx0LnR5cGUoKSksIGJhc2UsIG9mZnNldCwgcmVz
dWx0LnRtcCgpKTsKICAgICB9CkBAIC03OTEsNyArNzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAogICAg
IHZvaWQgZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKLSAgICB2b2lkIGVtaXRMb29wVGllclVwQ2hl
Y2sodWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIGNvbnN0
IFN0YWNrJiBuZXdTdGFjayk7CisgICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90
IGxvb3BJbmRleCwgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgbGl2ZVZhbHVlcyk7CiAKICAgICB2
b2lkIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAgICBFeHByZXNzaW9uVHlwZSBl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKQEAgLTg4NCw2ICs4ODQsOSBAQCBwcml2YXRl
OgogICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fY2FsbFNpdGVJbmRleCB7IDAgfTsKICAgICBTdGFj
a01hcHMgbV9zdGFja21hcHM7CiAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhj
ZXB0aW9uSGFuZGxlcnM7CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEJhc2ljQmxvY2sqLCBWZWN0
b3I8VHlwZWRUbXA+Pj4gbV9sb29wRW50cnlWYXJpYWJsZURhdGE7CisgICAgdW5zaWduZWQmIG1f
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBX
ZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2
ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC05MjksNyArOTMyLDcgQEAgdm9pZCBB
aXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SQogICAgIGVtaXRQYXRjaHBvaW50KGJs
b2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6
QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1
cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUg
bW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUpCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50
ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgIDogbV9pbmZvKGlu
Zm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbklu
ZGV4KQpAQCAtOTM4LDYgKzk0MSw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihj
b25zdCBNb2QKICAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQogICAgICwgbV91bmxpbmtlZFdh
c21Ub1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKICAgICAsIG1fbnVtSW1wb3J0
RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQorICAgICwgbV9vc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiB7CiAgICAgbV9jdXJy
ZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVu
dEJsb2NrOwpAQCAtOTY3LDcgKzk3MSw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRv
cihjb25zdCBNb2QKICAgICAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJzWzBdOwogICAgICAgICAgICAgYXV0byBtb3Zl
TG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihudWxscHRyKSwgY2FsbGVlR1BSKTsKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY29t
cGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucy5hcHBlbmQobGlua0J1ZmZlci5sb2Nh
dGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY2FsbGVlR1BSLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpOwogICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwpAQCAtMTA3Miw5ICsxMDc2
LDExIEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKIAogdm9pZCBB
aXJJUkdlbmVyYXRvcjo6ZmluYWxpemVFbnRyeXBvaW50cygpCiB7Ci0gICAgdW5zaWduZWQgbnVt
RW50cnlwb2ludHMgPSAxICsgbV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKTsKKyAgICB1bnNpZ25l
ZCBudW1FbnRyeXBvaW50cyA9IENoZWNrZWQ8dW5zaWduZWQ+KDEpICsgbV9jYXRjaEVudHJ5cG9p
bnRzLnNpemUoKSArIG1fbG9vcEVudHJ5VmFyaWFibGVEYXRhLnNpemUoKTsKICAgICBtX3Byb2Mu
c2V0TnVtRW50cnlwb2ludHMobnVtRW50cnlwb2ludHMpOwogICAgIG1fY29kZS5zZXRQcm9sb2d1
ZUZvckVudHJ5cG9pbnQoMCwgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9s
b2d1ZUdlbmVyYXRvcikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBtX2NhdGNoRW50cnlw
b2ludHMuc2l6ZSgpOyBpIDwgbnVtRW50cnlwb2ludHM7ICsraSkKKyAgICAgICAgbV9jb2RlLnNl
dFByb2xvZ3VlRm9yRW50cnlwb2ludChpLCBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+
KCptX3Byb2xvZ3VlR2VuZXJhdG9yKSk7CiAKICAgICBpZiAobV9jYXRjaEVudHJ5cG9pbnRzLnNp
emUoKSkgewogICAgICAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJv
bG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJh
dG9yRnVuY3Rpb24+KFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNv
ZGUpIHsKQEAgLTEwOTUsNiArMTEwMSwyNSBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpmaW5hbGl6
ZUVudHJ5cG9pbnRzCiAgICAgc3VjY2Vzc29ycy5hcHBlbmQobV9tYWluRW50cnlwb2ludFN0YXJ0
KTsKICAgICBzdWNjZXNzb3JzLmFwcGVuZFZlY3RvcihtX2NhdGNoRW50cnlwb2ludHMpOwogCisg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9sb29wRW50cnlWYXJpYWJsZURhdGEpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogbG9vcEJvZHkgPSBwYWlyLmZpcnN0OworICAgICAgICBCYXNpY0Jsb2NrKiBl
bnRyeSA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBzdWNjZXNzb3JzLmFwcGVuZChlbnRy
eSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gZW50cnk7CisKKyAgICAgICAgYXV0byYgdGVt
cHMgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0g
c3RkOjptYXgobV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odGVtcHMuc2l6ZSgpKSk7CisgICAgICAgIFRtcCBiYXNlUHRyID0gVG1wKEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZW1wcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0YXRpY19jYXN0PHNpemVf
dD4oaSkgKiBzaXplb2YodWludDY0X3QpOworICAgICAgICAgICAgZW1pdExvYWQoYmFzZVB0ciwg
b2Zmc2V0LCB0ZW1wc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoSnVtcCk7Cisg
ICAgICAgIGVudHJ5LT5zZXRTdWNjZXNzb3JzKGxvb3BCb2R5KTsKKyAgICB9CisKICAgICBSRUxF
QVNFX0FTU0VSVChudW1FbnRyeXBvaW50cyA9PSBzdWNjZXNzb3JzLnNpemUoKSk7CiAgICAgbV9y
b290QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IHN1Y2Nlc3NvcnM7CiB9CkBAIC0zMDMzLDcgKzMwNTgs
NyBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjCiAgICAgZW1pdFBh
dGNocG9pbnQocGF0Y2gsIFRtcCgpLCBjb3VudGRvd25QdHIpOwogfQogCi12b2lkIEFpcklSR2Vu
ZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3Rh
Y2smIGVuY2xvc2luZ1N0YWNrLCBjb25zdCBTdGFjayYgbmV3U3RhY2spCit2b2lkIEFpcklSR2Vu
ZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgVmVj
dG9yPFR5cGVkVG1wPiYgbGl2ZVZhbHVlcykKIHsKICAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRl
eCA9IHRoaXMtPm91dGVyTG9vcEluZGV4KCk7CiAgICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29w
SW5kZXgpOwpAQCAtMzA2MiwxNCArMzA4Nyw4IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRM
b29wVGllclVwQ2hlY2sKIAogICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwog
ICAgIHBhdGNoQXJncy5hcHBlbmQoY291bnRkb3duUHRyKTsKLQotICAgIGZvckVhY2hMaXZlVmFs
dWUoWyZdIChUbXAgdG1wKSB7Ci0gICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRU
bXAodG1wLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkpKTsKLSAgICB9KTsKLSAgICBmb3IgKFR5cGVk
RXhwcmVzc2lvbiB2YWx1ZSA6IGVuY2xvc2luZ1N0YWNrKQotICAgICAgICBwYXRjaEFyZ3MuYXBw
ZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLnZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkp
OwotICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogbmV3U3RhY2spCi0gICAgICAgIHBh
dGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodmFsdWUudmFsdWUoKSwgQjM6OlZhbHVlUmVw
OjpDb2xkQW55KSk7CisgICAgZm9yIChjb25zdCBUeXBlZFRtcCYgdG1wIDogbGl2ZVZhbHVlcykK
KyAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh0bXAudG1wKCksIEIzOjpW
YWx1ZVJlcDo6Q29sZEFueSkpOwogCiAgICAgVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb24qIGZv
cmNlRW50cnlUcmlnZ2VyID0gJihtX3RpZXJVcC0+b3NyRW50cnlUcmlnZ2VycygpLmxhc3QoKSk7
CiAgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8dWludDhfdD4oVGllclVwQ291bnQ6OlRy
aWdnZXJSZWFzb246OkRvbnRUcmlnZ2VyKSwgInRoZSBKSVQgY29kZSBhc3N1bWVzIG5vbi16ZXJv
IG1lYW5zICdlbnRlciciKTsKQEAgLTMxMTAsMTAgKzMxMjksMjIgQEAgQWlySVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdAogCiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb29w
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QgbG9vcEluZGV4KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CisgICAgUkVMRUFTRV9BU1NFUlQobG9vcEluZGV4ID09IG1fbG9vcEVudHJ5
VmFyaWFibGVEYXRhLnNpemUoKSk7CisKICAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CiAKICAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNr
KTsKKworICAgIFZlY3RvcjxUeXBlZFRtcD4gbGl2ZVZhbHVlczsKKyAgICBmb3JFYWNoTGl2ZVZh
bHVlKFsmXSAoVHlwZWRUbXAgdG1wKSB7CisgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKHRtcCk7
CisgICAgfSk7CisgICAgZm9yIChhdXRvIHZhcmlhYmxlIDogZW5jbG9zaW5nU3RhY2spCisgICAg
ICAgIGxpdmVWYWx1ZXMuYXBwZW5kKHZhcmlhYmxlKTsKKyAgICBmb3IgKGF1dG8gdmFyaWFibGUg
OiBuZXdTdGFjaykKKyAgICAgICAgbGl2ZVZhbHVlcy5hcHBlbmQodmFyaWFibGUpOworCiAgICAg
UmVzdWx0TGlzdCByZXN1bHRzOwogICAgIHJlc3VsdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShu
ZXdTdGFjay5zaXplKCkpOwogICAgIGZvciAoYXV0byBpdGVtIDogbmV3U3RhY2spCkBAIC0zMTI0
LDcgKzMxNTUsOSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0CiAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoYm9keSk7CiAKICAgICBtX2N1cnJlbnRC
bG9jayA9IGJvZHk7Ci0gICAgZW1pdExvb3BUaWVyVXBDaGVjayhsb29wSW5kZXgsIGVuY2xvc2lu
Z1N0YWNrLCBuZXdTdGFjayk7CisgICAgZW1pdExvb3BUaWVyVXBDaGVjayhsb29wSW5kZXgsIGxp
dmVWYWx1ZXMpOworCisgICAgbV9sb29wRW50cnlWYXJpYWJsZURhdGEuYXBwZW5kKHN0ZDo6cGFp
cjxCYXNpY0Jsb2NrKiwgVmVjdG9yPFR5cGVkVG1wPj4oYm9keSwgV1RGTW92ZShsaXZlVmFsdWVz
KSkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTM4OTksNyArMzkzMiw3IEBAIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICAKICAgICBwcm9jZWR1cmUuc2V0
T3B0TGV2ZWwoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJPcHRpbWl6YXRpb25MZXZlbCgpKTsK
IAotICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0
LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGll
clVwLCBzaWduYXR1cmUpOworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHBy
b2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwLCBzaWduYXR1cmUsIHJlc3VsdC0+b3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdl
bmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWdu
YXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNl
KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw3ICs2Nzcs
NyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsCiAgICAgfQogCiAg
ICAgewotICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb24gPSAmY29tcGlsYXRpb24tPmNh
bGxlZU1vdmVMb2NhdGlvbjsKKyAgICAgICAgYXV0byogY2FsbGVlTW92ZUxvY2F0aW9ucyA9ICZj
b21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uczsKICAgICAgICAgc3RhdGljX2Fzc2VydChD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdD
b252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcywgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBu
b3cuIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6
ZW9mKFJlZ2lzdGVyKSA8IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMs
ICJXZSByZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93LiIpOwogICAgICAgICBCMzo6UGF0Y2hwb2lu
dFZhbHVlKiBnZXRDYWxsZWVQYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxC
Mzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpJbnQ2NCwgT3JpZ2luKCkpOwpAQCAtNjg3
LDggKzY4Nyw4IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWwKICAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBw
YXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlvbnMsIG1vdmVMb2Nh
dGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bGVlTW92ZUxvY2F0aW9ucy0+YXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQ
dHJUYWc+KG1vdmVMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7CiAKQEAgLTMxMzgsNyArMzEzOCw3IEBAIHN0YXRpYyBib29sIHNob3VsZER1bXBJUkZvcih1
aW50MzJfdCBmdW4KICAgICByZXR1cm4gZHVtcEFsbG93bGlzdC0+c2hvdWxkRHVtcFdhc21GdW5j
dGlvbihmdW5jdGlvbkluZGV4KTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQm
IGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxh
dGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJf
dCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCkKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVC
MyhDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25E
YXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwKQogewogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0zMTc1LDcgKzMxNzUsNyBAQCBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAgICAgICAgID8gT3B0aW9uczo6d2Vi
QXNzZW1ibHlCQlFCM09wdGltaXphdGlvbkxldmVsKCkKICAgICAgICAgOiBPcHRpb25zOjp3ZWJB
c3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOwogCi0gICAgQjNJUkdlbmVyYXRvciBpckdl
bmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwg
ZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRpZXJVcCk7CisgICAgQjNJUkdl
bmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIHJlc3VsdC0+b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9k
ZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwg
dGllclVwKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5l
cmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0
dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgp
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCShyZXZpc2lvbiAyODc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVj
dCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIEJveDxQQ1RvQ29kZU9yaWdpbk1hcD4gcGNUb0Nv
ZGVPcmlnaW5NYXA7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9
IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZUIzKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0
aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2Rl
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwg
VGllclVwQ291bnQqID0gbnVsbHB0cik7CiAKIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFw
KENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjg3ODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCwxMyArNjQsMTUgQEAgYm9vbCBCQlFQbGFuOjpwcmVwYXJlSW1wbCgpCiAgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAgIGlm
ICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMu
c2l6ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCiAgICAgICAgIHx8ICF0cnlSZXNlcnZl
Q2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBp
bGF0aW9uIGNvbnRleHRzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJV
cENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8
fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdGllclVwQ291bnRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAi
IHRpZXItdXAgY291bnRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2FsbExv
b3BFbnRyeXBvaW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiBsb29wIGVudHJ5cG9pbnRzIikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMucmVz
aXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0aW9ucy5z
aXplKCkpOworICAgIG1fYWxsTG9vcEVudHJ5cG9pbnRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgp
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTEzLDcgKzExNSw4IEBAIHZvaWQgQkJRUGxh
bjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKICAgICB9CiAKICAgICBWZWN0b3I8Q29kZUxv
Y2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2Nh
dGlvbnM7Ci0gICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucywgZnVuY3Rpb24uZ2V0KCksIGNvbnRleHQsIGxpbmtCdWZmZXIpOworICAg
IFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiBsb29wRW50cnlwb2lu
dExvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckFuZExvb3BFbnRyeXBvaW50
TG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIGxvb3BFbnRyeXBvaW50TG9jYXRp
b25zLCBmdW5jdGlvbi5nZXQoKSwgY29udGV4dCwgbGlua0J1ZmZlcik7CiAKICAgICBjb21wdXRl
UENUb0NvZGVPcmlnaW5NYXAoY29udGV4dCwgbGlua0J1ZmZlcik7CiAKQEAgLTEyNiw4ICsxMjks
OSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsKLSAg
ICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShm
dW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJV
cCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5z
dGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUo
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94
V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJR
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNl
cHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyksIFdURk1v
dmUobG9vcEVudHJ5cG9pbnRMb2NhdGlvbnMpLCBmdW5jdGlvbi0+b3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZnVuY3Rpb24tPmNh
bGxlZU1vdmVMb2NhdGlvbnMpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwog
ICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAKICAgICAgICAgaWYg
KGNvbnRleHQucGNUb0NvZGVPcmlnaW5NYXApCkBAIC0xOTYsNyArMjAwLDYgQEAgc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYQogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSArIGZ1
bmN0aW9uSW5kZXg7CiAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKICAgICBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0
OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwogCiAgICAgLy8g
RklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBl
eGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUg
c2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1C
LgogICAgIC8vIFRoZSBsb25nIHRlcm0gc29sdXRpb24gc2hvdWxkIGJlIHRvIGludHJvZHVjZSBh
IFdhc20gaW50ZXJwcmV0ZXIuIEJ1dCBhcyBhIHNob3J0IHRlcm0gc29sdXRpb24sIHdlIGludHJv
ZHVjZSBoZXVyaXN0aWNzIHRvIHN3aXRjaCBiYWNrIHRvIEJCUSBCMyBhdCB0aGUgc2FjcmlmaWNl
IG9mIHN0YXJ0LXVwIHRpbWUsCkBAIC0yMDgsNyArMjExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+IEJCUVBsYQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCiAg
ICAgaWYgKGZvcmNlVXNpbmdCMykKLSAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwg
VUlOVDMyX01BWCwgdGllclVwKTsKKyAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlQjMoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXApOwogICAg
IGVsc2UKICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWly
KGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7
CiAKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRp
b24oKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMobV9leGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7Cisg
ICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckFuZExvb3BFbnRyeXBvaW50TG9jYXRp
b25zKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XSwgbV9hbGxMb29w
RW50cnlwb2ludHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVy
KTsKIAogICAgICAgICAgICAgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFwKGNvbnRleHQsIGxpbmtC
dWZmZXIpOwogCkBAIC0yODQsMTMgKzI4NywxNiBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVD
YWxsZWVzKGNvbnN0IENhCiAgICAgICAgIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+
IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dh
c21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJu
YWxGdW5jdGlvbkluZGV4KSkgewogICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
ID0gRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2Fz
bUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBD
YWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBtb3ZlTG9jYXRpb24gOiBlbWJlZGRlclRvV2FzbUZ1bmN0aW9u
LT5jYWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rp
b25JbmRleF0uZ2V0KCk7CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBpbnRl
cm5hbEZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNv
dW50KCk7Ci0gICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJR
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0p
LCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XSksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2Vw
dGlvbkhhbmRsZXJzKSwgV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNt
RW50cnlwb2ludENhbGxlZS5wdHIoKSkpOworICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3YXNtRW50
cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5
cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0
aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRl
cm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2lu
dGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZN
b3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUobV9leGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fYWxsTG9vcEVu
dHJ5cG9pbnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBmdW5jdGlvbi0+b3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBtb3ZlTG9jYXRpb24gOiBmdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5
cG9pbnRDYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBpZiAobV9jb21waWxhdGlvbkNvbnRleHRz
W2ludGVybmFsRnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmlnaW5NYXApCiAgICAgICAgICAgICBD
YWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkuYWRkUENUb0NvZGVPcmlnaW5NYXAod2FzbUVudHJ5
cG9pbnRDYWxsZWUucHRyKCksIFdURk1vdmUobV9jb21waWxhdGlvbkNvbnRleHRzW2ludGVybmFs
RnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmlnaW5NYXApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkocmV2aXNpb24gMjg3ODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPiwgRGVmYXVsdEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVu
Y3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250
ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBD
b3VudHM7CisgICAgVmVjdG9yPFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJU
YWc+Pj4gbV9hbGxMb29wRW50cnlwb2ludHM7CiAKICAgICBSZWZQdHI8Q2FsbGVlR3JvdXA+IG1f
Y2FsbGVlR3JvdXAgeyBudWxscHRyIH07CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkocmV2aXNpb24gMjg3
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIsOSArMTcyLDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgQkJRQ2FsbGVlIGZp
bmFsIDogcHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVf
dCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5h
bWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2tt
YXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNt
OjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3Qg
TmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJV
cENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1
bmxpbmtlZENhbGxzLCBTdGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRs
ZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgVmVjdG9y
PENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiYgbG9vcEVudHJ5cG9pbnRzLCB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwg
V1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUodGllclVwQ291bnQpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNr
bWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMpLCBXVEZNb3ZlKGxvb3BFbnRyeXBvaW50cyksIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUpKTsKICAgICB9CiAKICAgICBPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUo
KSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xOTQsMTYgKzE5NCwyNCBA
QCBwdWJsaWM6CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7IHJldHVybiBtX3Rp
ZXJVcENvdW50LmdldCgpOyB9CiAKKyAgICBjb25zdCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8
V2FzbUVudHJ5UHRyVGFnPj4mIGxvb3BFbnRyeXBvaW50cygpIHsgcmV0dXJuIG1fbG9vcEVudHJ5
cG9pbnRzOyB9CisKKyAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9CisKIHByaXZhdGU6Ci0g
ICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6
OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0YWNrbWFwcywgVmVj
dG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKQorICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBTdGFja01hcHMmJiBz
dGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJz
LCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRy
eVB0clRhZz4+JiYgbG9vcEVudHJ5cG9pbnRzLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplKQogICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKICAgICAg
ICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUodGllclVwQ291bnQpKQorICAgICAgICAsIG1fbG9v
cEVudHJ5cG9pbnRzKFdURk1vdmUobG9vcEVudHJ5cG9pbnRzKSkKKyAgICAgICAgLCBtX29zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICB7CiAg
ICAgfQogCiAgICAgUmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBtX29zckVudHJ5Q2FsbGVlOwogICAg
IFJlZlB0cjxPTUdDYWxsZWU+IG1fcmVwbGFjZW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRp
ZXJVcENvdW50PiBtX3RpZXJVcENvdW50OworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxX
YXNtRW50cnlQdHJUYWc+PiBtX2xvb3BFbnRyeXBvaW50czsKKyAgICB1bnNpZ25lZCBtX29zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUgeyAwIH07CiAgICAgYm9vbCBtX2RpZFN0YXJ0Q29tcGlsaW5n
T1NSRW50cnlDYWxsZWUgeyBmYWxzZSB9OwogfTsKICNlbmRpZgpAQCAtMjY3LDcgKzI3NSw3IEBA
IHB1YmxpYzoKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICBKSVRDYWxsZWUq
IHJlcGxhY2VtZW50KE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9yZXBsYWNlbWVudHNbc3Rh
dGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSZXBsYWNlbWVu
dChSZWY8SklUQ2FsbGVlPiYmIHJlcGxhY2VtZW50LCBNZW1vcnlNb2RlIG1vZGUpCisgICAgdm9p
ZCBzZXRSZXBsYWNlbWVudChSZWY8T3B0aW1pemluZ0pJVENhbGxlZT4mJiByZXBsYWNlbWVudCwg
TWVtb3J5TW9kZSBtb2RlKQogICAgIHsKICAgICAgICAgbV9yZXBsYWNlbWVudHNbc3RhdGljX2Nh
c3Q8dWludDhfdD4obW9kZSldID0gV1RGTW92ZShyZXBsYWNlbWVudCk7CiAgICAgfQpAQCAtMzAy
LDcgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAgRml4ZWRWZWN0b3I8SnVtcFRhYmxlPiBtX2p1bXBU
YWJsZXM7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCi0gICAgUmVmUHRyPEpJVENh
bGxlZT4gbV9yZXBsYWNlbWVudHNbV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CisgICAgUmVm
UHRyPE9wdGltaXppbmdKSVRDYWxsZWU+IG1fcmVwbGFjZW1lbnRzW1dhc206Ok51bWJlck9mTWVt
b3J5TW9kZXNdOwogICAgIFJlZlB0cjxPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZXNb
V2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CiAjZW5kaWYKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBtX2VudHJ5cG9pbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaAkocmV2aXNpb24gMjg3ODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Myw2ICsxODMsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFbnRyeVBsYW4+IG1f
cGxhbjsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNoZWQgeyBmYWxz
ZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKK3B1YmxpYzoKICAgICBMb2NrIG1fbG9j
azsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJl
dmlzaW9uIDI4NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDEwICs0NDMsMTEgQEAgc3RydWN0IEVudHJ5cG9pbnQg
ewogCiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+
IGNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PFdhc21FbnRyeVB0clRhZz4+IGNhbGxlZU1vdmVMb2NhdGlvbnM7CiAgICAgU3RhY2tNYXBzIHN0
YWNrbWFwczsKICAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gZXhjZXB0aW9uSGFuZGxl
cnM7CiAgICAgRW50cnlwb2ludCBlbnRyeXBvaW50OworICAgIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUgeyAwIH07CiB9OwogCiAvLyBXZWJBc3NlbWJseSBkaXJlY3QgY2FsbHMg
YW5kIGNhbGxfaW5kaXJlY3QgdXNlIGluZGljZXMgaW50byAiZnVuY3Rpb24gaW5kZXggc3BhY2Ui
LiBUaGlzIHNwYWNlIHN0YXJ0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUlSR2VuZXJhdG9ySGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAkocmV2aXNpb24gMjg3ODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MywyNCArNjMsMzIgQEAgc3RydWN0IFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUgewogfTsKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21w
aWxhdGlvbkNvbnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCitzdGF0aWMg
aW5saW5lIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJBbmRMb29wRW50cnlwb2ludExvY2F0
aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBo
YW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb29w
RW50cnlwb2ludHMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21w
aWxhdGlvbkNvbnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAg
aWYgKCFjb250ZXh0LnByb2NlZHVyZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQg
ZW50cnlwb2ludEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAxOwog
ICAgIHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzID0gY29udGV4dC5wcm9jZWR1cmUtPm51bUVudHJ5
cG9pbnRzKCk7CiAgICAgZm9yIChjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVySW5m
byA6IGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycykgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VChlbnRyeXBvaW50SW5kZXggPCBudW1FbnRyeXBvaW50cyk7CiAgICAgICAgIGlmIChoYW5kbGVy
SW5mby5tX3R5cGUgPT0gSGFuZGxlclR5cGU6OkRlbGVnYXRlKSB7CiAgICAgICAgICAgICBoYW5k
bGVycy5hcHBlbmQoeyB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgKytlbnRyeXBvaW50SW5kZXg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9p
bnRJbmRleCA8IG51bUVudHJ5cG9pbnRzKTsKICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGxpbmtC
dWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihjb250ZXh0LnByb2NlZHVy
ZS0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKSk7CisgICAgICAgICsr
ZW50cnlwb2ludEluZGV4OwogICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5k
ZXggPT0gbnVtRW50cnlwb2ludHMgLSAxKTsKKworICAgIGZvciAoOyBlbnRyeXBvaW50SW5kZXgg
PCBudW1FbnRyeXBvaW50czsgKytlbnRyeXBvaW50SW5kZXgpCisgICAgICAgIGxvb3BFbnRyeXBv
aW50cy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY29udGV4
dC5wcm9jZWR1cmUtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSkpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMo
VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxl
cnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21waWxhdGlvbkNv
bnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgVmVjdG9yPENv
ZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IGlnbm9yZWQ7CisgICAgY29tcHV0ZUV4
Y2VwdGlvbkhhbmRsZXJBbmRMb29wRW50cnlwb2ludExvY2F0aW9ucyhoYW5kbGVycywgaWdub3Jl
ZCwgZnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZv
aWQgZW1pdFJldGhyb3dJbXBsKENDYWxsSGVscGVycyYgaml0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAJKHJldmlzaW9uIDI4NzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjgsOCArMTY4LDggQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24oKQogICAgICAgICAgICAgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY2FsbGVl
ID0gRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50
cnlwb2ludCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHJlcGF0Y2hQb2lu
dGVyIC0ganVzdCBwYXNzIGluIHRoZSBjYWxsZWUgZGlyZWN0bHkKICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uKQotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBD
YWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICAgICAgZm9yIChhdXRv
JiBtb3ZlTG9jYXRpb24gOiBmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogCiAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fZW1iZWRkZXJDYWxsZWVzLmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGNhbGxlZSkp
OwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlz
aW9uIDI4NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsOCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemU7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgYXV0
byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rp
b24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01v
ZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CisgICAgYXV0byBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVCMyhjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJl
LCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYKTsKIAogICAg
IGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgbV9sb2NrIH07CkBAIC0xMDYsNyArMTA1LDggQEAgdm9pZCBPTUdQbGFuOjp3b3Jr
KENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAu
cHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOwogICAgICAgICBSZWY8
T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9p
bnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9u
LT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92
ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24t
PmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9u
LT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7
CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogaW50ZXJuYWxGdW5jdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAg
ICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKIAogICAgICAgICBpZiAo
Y29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyODc4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzcsOCArNzcsNyBAQCB2b2lkIE9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9yCiAKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gdW5saW5rZWRDYWxsczsK
ICAgICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplID0gMDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBh
cnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxz
LCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBt
X21vZGUsIHRhcmdldENvbXBpbGF0aW9uTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBtX2xvb3BJbmRl
eCk7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVCMyhj
b250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9y
bWF0aW9uLmdldCgpLCBtX21vZGUsIHRhcmdldENvbXBpbGF0aW9uTW9kZSwgbV9mdW5jdGlvbklu
ZGV4LCBtX2xvb3BJbmRleCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJl
c3VsdCkpIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwpAQCAtMTA1LDkgKzEw
NCwxMCBAQCB2b2lkIE9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9yCiAgICAgb21n
RW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9u
LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCiAgICAgQVNTRVJUKG1fY2FsbGVl
R3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOwotICAgIFJl
ZjxPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT1NSRW50cnlDYWxsZWU6OmNyZWF0ZSh0YXJnZXRD
b21waWxhdGlvbk1vZGUsIFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxp
bmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3Zl
KGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zKSk7CisgICAgUmVmPE9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPU1JF
bnRyeUNhbGxlZTo6Y3JlYXRlKHRhcmdldENvbXBpbGF0aW9uTW9kZSwgV1RGTW92ZShvbWdFbnRy
eXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIGludGVybmFsRnVuY3Rpb24tPm9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5j
dGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRl
cm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2Fs
bGVlLnB0cigpKSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogaW50ZXJuYWxG
dW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVl
LnB0cigpKSk7CiAKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2FsbGVlR3JvdXAtPm1fbG9j
ayB9OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNjMgKzE4MCw4OCBAQCBXQVNN
X1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAqY2FsbGVlLCAiOiBFbnRlcmVkIGxvb3Bfb3NyIHdpdGggdGllclVwQ291bnRl
ciA9ICIsIGNhbGxlZS0+dGllclVwQ291bnRlcigpKTsKIAotICAgIHVuc2lnbmVkIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVlLT5ieXRlY29kZU9mZnNldChwYyk7Ci0gICAgY29u
c3QgYXV0byYgb3NyRW50cnlEYXRhID0gdGllclVwQ291bnRlci5vc3JFbnRyeURhdGFGb3JMb29w
KGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKLQogICAgIGlmICghdGllclVwQ291bnRlci5j
aGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBs
aWZ0ZWQuIik7CiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAg
ICB9CiAKLSAgICBjb25zdCBhdXRvIGRvT1NSRW50cnkgPSBbJl0oV2FzbTo6T1NSRW50cnlDYWxs
ZWUqIG9zckVudHJ5Q2FsbGVlKSB7Ci0gICAgICAgIGlmIChvc3JFbnRyeUNhbGxlZS0+bG9vcElu
ZGV4KCkgIT0gb3NyRW50cnlEYXRhLmxvb3BJbmRleCkKKyAgICB1bnNpZ25lZCBsb29wT1NSRW50
cnlCeXRlY29kZU9mZnNldCA9IGNhbGxlZS0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgIGNvbnN0
IGF1dG8mIG9zckVudHJ5RGF0YSA9IHRpZXJVcENvdW50ZXIub3NyRW50cnlEYXRhRm9yTG9vcChs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisKKyAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50
VGllcnNVcFRvQkJRKCkpIHsKKyAgICAgICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyhjYWxsZWUsIGluc3RhbmNlKSkKICAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRy
LCBudWxscHRyKTsKIAotICAgICAgICBzaXplX3Qgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9
IG9zckVudHJ5Q2FsbGVlLT5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPT0gb3NyRW50cnlEYXRhLnZh
bHVlcy5zaXplKCkpOworICAgICAgICBXYXNtOjpCQlFDYWxsZWUqIGJicUNhbGxlZTsKKyAgICAg
ICAgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IGluc3RhbmNlLT5jYWxsZWVHcm91cCgp
LT5tX2xvY2sgfTsKKyAgICAgICAgICAgIGJicUNhbGxlZSA9IGluc3RhbmNlLT5jYWxsZWVHcm91
cCgpLT5iYnFDYWxsZWUobG9ja2VyLCBjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKSk7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmJxQ2FsbGVlKTsKKworICAgICAgICBzaXplX3Qg
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IGJicUNhbGxlZS0+b3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplID49IG9zckVudHJ5RGF0YS52YWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgdWludDY0X3QqIGJ1
ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIFdB
U01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
b3NyRW50cnlEYXRhLmxvb3BJbmRleCA8IGJicUNhbGxlZS0+bG9vcEVudHJ5cG9pbnRzKCkuc2l6
ZSgpKTsKIAogICAgICAgICB1aW50MzJfdCBpbmRleCA9IDA7CiAgICAgICAgIGZvciAoVmlydHVh
bFJlZ2lzdGVyIHJlZyA6IG9zckVudHJ5RGF0YS52YWx1ZXMpCiAgICAgICAgICAgICBidWZmZXJb
aW5kZXgrK10gPSBSRUFEKHJlZykuZW5jb2RlZEpTVmFsdWUoKTsKIAotICAgICAgICBXQVNNX1JF
VFVSTl9UV08oYnVmZmVyLCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwotICAgIH07Ci0KLSAgICBpZiAoYXV0byogb3NyRW50cnlDYWxsZWUgPSBjYWxs
ZWUtPm9zckVudHJ5Q2FsbGVlKGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKSkKLSAgICAgICAg
cmV0dXJuIGRvT1NSRW50cnkob3NyRW50cnlDYWxsZWUpOwotCi0gICAgYm9vbCBjb21waWxlID0g
ZmFsc2U7Ci0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgdGllclVwQ291bnRlci5tX2xv
Y2sgfTsKLSAgICAgICAgc3dpdGNoICh0aWVyVXBDb3VudGVyLm1fbG9vcENvbXBpbGF0aW9uU3Rh
dHVzKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlv
blN0YXR1czo6Tm90Q29tcGlsZWQ6Ci0gICAgICAgICAgICBjb21waWxlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHRpZXJVcENvdW50ZXIubV9sb29wQ29tcGlsYXRpb25TdGF0dXMgPSBXYXNtOjpMTElu
dFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxpbmc7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0
aW9uU3RhdHVzOjpDb21waWxpbmc6Ci0gICAgICAgICAgICB0aWVyVXBDb3VudGVyLm9wdGltaXpl
QWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkxM
SW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOgotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIFdBU01fUkVUVVJOX1RXTyhidWZmZXIsIGJicUNhbGxlZS0+bG9v
cEVudHJ5cG9pbnRzKClbb3NyRW50cnlEYXRhLmxvb3BJbmRleF0uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgYXV0byBkb09TUkVudHJ5ID0gWyZdKFdh
c206Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSkgeworICAgICAgICAgICAgaWYgKG9z
ckVudHJ5Q2FsbGVlLT5sb29wSW5kZXgoKSAhPSBvc3JFbnRyeURhdGEubG9vcEluZGV4KQorICAg
ICAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKKworICAgICAg
ICAgICAgc2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBvc3JFbnRyeUNhbGxlZS0+
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9PSBvc3JFbnRyeURhdGEudmFsdWVzLnNpemUoKSk7
CisgICAgICAgICAgICB1aW50NjRfdCogYnVmZmVyID0gaW5zdGFuY2UtPmNvbnRleHQoKS0+c2Ny
YXRjaEJ1ZmZlckZvclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSk7CisgICAgICAgICAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwg
bnVsbHB0cik7CisKKyAgICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gMDsKKyAgICAgICAgICAg
IGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA6IG9zckVudHJ5RGF0YS52YWx1ZXMpCisgICAgICAg
ICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gUkVBRChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CisK
KyAgICAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhidWZmZXIsIG9zckVudHJ5Q2FsbGVlLT5lbnRy
eXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYg
KGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+
bWVtb3J5KCktPm1vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShvc3JFbnRy
eUNhbGxlZSk7CisKKyAgICAgICAgYm9vbCBjb21waWxlID0gZmFsc2U7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIExvY2tlciBsb2NrZXIgeyB0aWVyVXBDb3VudGVyLm1fbG9jayB9OworICAgICAg
ICAgICAgc3dpdGNoICh0aWVyVXBDb3VudGVyLm1fbG9vcENvbXBpbGF0aW9uU3RhdHVzKSB7Cisg
ICAgICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0
dXM6Ok5vdENvbXBpbGVkOgorICAgICAgICAgICAgICAgIGNvbXBpbGUgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHRpZXJVcENvdW50ZXIubV9sb29wQ29tcGlsYXRpb25TdGF0dXMgPSBXYXNtOjpM
TEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxpbmc7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRl
cjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzoKKyAgICAgICAgICAgICAgICB0aWVyVXBD
b3VudGVyLm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICBpZiAoY29tcGlsZSkgewotICAgICAgICBSZWY8V2FzbTo6UGxh
bj4gcGxhbiA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxXYXNtOjpQbGFuKj4obmV3IFdhc206Ok9T
UkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5j
ZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6Q2FsbGVlPigqY2FsbGVlKSwgY2FsbGVlLT5mdW5jdGlv
bkluZGV4KCksIG9zckVudHJ5RGF0YS5sb29wSW5kZXgsIGluc3RhbmNlLT5tZW1vcnkoKS0+bW9k
ZSgpLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUoKSkpKTsKLSAgICAgICAgV2FzbTo6ZW5zdXJl
V29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQotICAgICAgICAgICAgcGxhbi0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGllclVwQ291bnRlci5v
cHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgfQorICAgICAgICBpZiAoY29tcGlsZSkgeworICAg
ICAgICAgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8V2Fz
bTo6UGxhbio+KG5ldyBXYXNtOjpPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVm
PFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkNhbGxlZT4oKmNh
bGxlZSksIGNhbGxlZS0+ZnVuY3Rpb25JbmRleCgpLCBvc3JFbnRyeURhdGEubG9vcEluZGV4LCBp
bnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKSk7
CisgICAgICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVm
KCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklU
KCkpKQorICAgICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGllclVwQ291bnRlci5vcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7CisgICAgICAgIH0KIAotICAgIGlmIChhdXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxl
ZS0+b3NyRW50cnlDYWxsZWUoaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCkpKQotICAgICAgICBy
ZXR1cm4gZG9PU1JFbnRyeShvc3JFbnRyeUNhbGxlZSk7CisgICAgICAgIGlmIChhdXRvKiBvc3JF
bnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUoaW5zdGFuY2UtPm1lbW9yeSgpLT5t
b2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkob3NyRW50cnlDYWxsZWUpOwog
Ci0gICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBXQVNNX1JF
VFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgfQogfQogCiBXQVNNX1NMT1dfUEFUSF9E
RUNMKGVwaWxvZ3VlX29zcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
VG9XYXNtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5jcHAJKHJldmlzaW9uIDI4NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDkgKzE3OCw5IEBAIHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKICAgICBqaXQuZW1pdFplcm9U
b0NhbGxGcmFtZUhlYWRlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0
Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7
Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGxpbmtlZENh
bGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgVmVjdG9yPENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+PiogbGlua2VkQ2FsbGVlTW92ZSA9
ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbnM7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1vdmVMb2NhdGlvbik7
CisgICAgICAgIGxpbmtlZENhbGxlZU1vdmUtPmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
V2FzbUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pKTsKICAgICB9KTsKIAogICAgIGNv
bnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>